Qt: как определить, какая версия OpenGL используется?

есть несколько способов, которыми Qt может использовать OpenGL: desktop (родной), ANGLE, ES... и сейчас есть "динамический", который можно выбрать во время выполнения. В приложении есть ли способ определить, какой из них используется? Либо в C++, либо в QML?

например, что-то эквивалентно глобальные объявления это позволит вам обнаружить OS

1 ответов


для обнаружения версии OpenGL

если вы хотите применить определенную версию OpenGL

  • установить параметр в программном обеспечении (см. Пример кода под)
    • для desktop / native либо установите переменную окружения QT_OPENGL до desktop или установите атрибут приложения в Qt::AA_UseDesktopOpenGL
    • для угла, либо установите переменную окружения QT_OPENGL до angle или установите атрибут приложения в Qt::AA_UseOpenGLES
    • для рендеринга программного обеспечения установите переменную окружения QT_OPENGL до software или установите атрибут приложения в Qt::AA_UseSoftwareOpenGL
  • создайте статическую сборку 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 за ссылку на блог)