【问题标题】:Qt: How to detect which version of OpenGL is being used?Qt:如何检测正在使用的 OpenGL 版本?
【发布时间】:2017-04-22 15:29:41
【问题描述】:

Qt 可以通过多种方式使用 OpenGL:桌面(本机)、ANGLE、ES……现在还有可以在运行时选择的“动态”。在一个应用程序中,有没有一种方法可以检测出哪个正在使用?在 C++ 中还是在 QML 中?

例如相当于global declarations 的东西,可以让您检测操作系统

【问题讨论】:

  • glGetString(GL_VERSION)?
  • 一般来说,当您明确不关心时,您会使用“动态”。也就是说,您正在写 ANGLE 和桌面 GL 之间的最低公分母。那么为什么你需要问这个问题呢?
  • Intel 通常表示“升级驱动程序”。您可以通过多种方式确定您获得的上下文版本:前面提到的GL_VERSION;在 Qt Quick 本身中使用OpenGLInfo;使用QOpenGLContext::openGLModuleType()
  • 另请参阅此处了解说明以及如何根据 GPU 为 ANGLE/OpenGL 使用黑名单:doc.qt.io/qt-5/…
  • 是否有强制在所有 Windows 设备上使用 ANGLE 的全局方法?您可以仅使用 ANGLE 支持重新构建 Qt,或者如果您想使用动态构建,请设置Qt::AA_UseOpenGLES 在创建 Q(Gui)Application 之前。

标签: qt opengl qt5


【解决方案1】:

检测 OpenGL 版本

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

  • 在软件中设置选项(参见下面的代码示例)
    • 对于桌面/本机,将环境变量QT_OPENGL 设置为desktop 或将应用程序属性设置为Qt::AA_UseDesktopOpenGL
    • 对于 ANGLE,将环境变量 QT_OPENGL 设置为 angle 或将应用程序属性设置为 Qt::AA_UseOpenGLES
    • 对于软件渲染,将环境变量QT_OPENGL设置为software或将应用程序属性设置为Qt::AA_UseSoftwareOpenGL
  • 使用configure 选项创建Qt 的静态构建以设置所需的OpenGL 实现(但请注意Qt licensing rules
    • 对于桌面/本机,包括-opengl desktop
    • 对于 ANGLE,不要包含-opengl 选项;那是因为它是默认的
    • 还有-opengl dynamic 让Qt 选择最佳选项。这是在 Qt 5.4 中引入的。如果您需要此选项但出于任何其他原因不需要静态构建,则无需创建静态构建,因为预构建的二进制文件从 Qt 5.5 开始使用此选项。
    • 您还可以通过Qt for Windows - Requirements 探索其他变体。虽然这是一个特定于 Windows 的页面,但这里包含了有关为 Qt 配置 OpenGL 的大部分信息。 (可能是因为大多数 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 提供上述 cmets 中的初步答案,并感谢 user12345 提供博客链接)

【讨论】:

  • glGetString(GL_VERSION) 在我的一台机器(使用 Intel HD 3000)上返回 0,尽管另一个显卡 OpenGL 测试应用程序显示渲染场景,但 OpenGL 无法显示。我能做什么?
  • 我也有 Intel HD 3000 和 win10(驱动程序 9.17.10.3347 10-31-2013),唯一让我的 QML 应用程序正常工作的方法是下载 opengl32.dll mesa 软件渲染器来自这里:fdossena.com/?p=mesa/index.frag 我刚刚复制了我的 qml_app.exe 旁边的 opengl32.dll,最后它运行而没有崩溃。
  • 我也尝试过更新的驱动程序 9.17.10.4229 5-26-2015,它也崩溃了。
猜你喜欢
  • 1970-01-01
  • 2014-06-24
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多