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 за ссылку на блог)
