问:如何检测正在使用的OpenGL版本?

时间:2016-12-07 15:46:27

标签: qt opengl qt5

Qt可以通过多种方式使用OpenGL:桌面(原生),ANGLE,ES ......现在还有动态的'可以在运行时选择。在应用程序中,有没有办法可以检测到哪一个正在使用?在C ++中还是在QML中?

e.g。等同于global declarations的东西,让你检测操作系统

1 个答案:

答案 0 :(得分:2)

检测OpenGL版本

如果要强制执行特定的OpenGL版本

  • 在软件中设置选项(参见下面的代码示例)
    • for desktop / native,将环境变量QT_OPENGL设置为desktop或将应用程序属性设置为Qt::AA_UseDesktopOpenGL
    • for ANGLE,将环境变量QT_OPENGL设置为angle或将应用程序属性设置为Qt::AA_UseOpenGLES
    • 用于软件渲染,将环境变量QT_OPENGL设置为software或将应用程序属性设置为Qt::AA_UseSoftwareOpenGL
  • 使用configure选项创建Qt的静态构建来设置所需的OpenGL实现(但要注意Qt licensing rules
    • for desktop / native,包含-opengl desktop
    • 对于ANGLE,包含-opengl选项;那是因为它是默认的
    • 还有-opengl dynamic让Qt选择最佳选项。这是在Qt 5.4中引入的。如果你想要这个选项但是由于任何其他原因不需要静态构建,则不需要创建静态构建,因为预编译的二进制文件从Qt 5.5开始使用此选项。
    • 您还可以在Qt for Windows - Requirements探索其他变体。虽然这是一个特定于Windows的页面,但是有关配置OpenGL for 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();
}

(感谢 peppe 获取上述评论中的初步答案,感谢用户12345获取博客链接)