Qt: как определить, какая версия OpenGL используется?
есть несколько способов, которыми Qt может использовать OpenGL: desktop (родной), ANGLE, ES... и сейчас есть "динамический", который можно выбрать во время выполнения. В приложении есть ли способ определить, какой из них используется? Либо в C++, либо в QML?
например, что-то эквивалентно глобальные объявления это позволит вам обнаружить OS
1 ответов
для обнаружения версии OpenGL
- в QML есть
OpenGLInfo
- в C++ есть
QOpenGLContext::openGLModuleType()
- в библиотеке OpenGL C++ есть
glGetString(GL_VERSION)
- см. также Qt blog article: какая реализация OpenGL используется моим Qt Quick app сегодня?
если вы хотите применить определенную версию OpenGL
- установить параметр в программном обеспечении (см. Пример кода под)
- для desktop / native либо установите переменную окружения
QT_OPENGL
доdesktop
или установите атрибут приложения вQt::AA_UseDesktopOpenGL
- для угла, либо установите переменную окружения
QT_OPENGL
доangle
или установите атрибут приложения вQt::AA_UseOpenGLES
- для рендеринга программного обеспечения установите переменную окружения
QT_OPENGL
доsoftware
или установите атрибут приложения вQt::AA_UseSoftwareOpenGL
- для desktop / native либо установите переменную окружения
- создайте статическую сборку Qt с помощью
configure
параметры для установки реализации OpenGL вы хотите (но помните о правила лицензирования Qt)- для рабочего стола/родной, включают в себя
-opengl desktop
- угол не включить , потому что это по умолчанию
- появилась
-opengl dynamic
что позволяет Qt выбрать лучший вариант. Это было введено в Qt 5.4. Если вы хотите эту опцию, но не нуждаетесь в статической сборке по какой-либо другой причине, нет необходимости создавать статическую сборку, так как встроенные двоичные файлы используют эту опцию С Qt 5.5. - есть и другие варианты, которые вы можете изучить на Qt для Windows-требования. Хотя это страница для Windows, большая часть информации о настройке OpenGL для Qt содержится здесь. (Вероятно, потому, что большинство проблем рендеринга OpenGL находятся на платформе Windows!)
- для рабочего стола/родной, включают в себя
код пример
#include <QGuiApplication>
//...
int main(int argc, char *argv[])
{
// Set the OpenGL type before instantiating the application
// In this example, we're forcing use of ANGLE.
// Do either one of the following (not both). They are equivalent.
qputenv("QT_OPENGL", "angle");
QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);
// Now instantiate the app
QGuiApplication app(argc, argv);
//...
return app.exec();
}
(спасибо Пеппе за первоначальные ответы в комментариях выше и спасибо user12345 за ссылку на блог)