使用 Qt5 加载 OpenGL 扩展

Posted

技术标签:

【中文标题】使用 Qt5 加载 OpenGL 扩展【英文标题】:Loading OpenGL extensions with Qt5 【发布时间】:2014-06-05 12:48:39 【问题描述】:

我已经关注了这篇关于在 Qt5 (reference) 中使用 OpenGL 扩展的文章,并按照示例代码,我收到以下错误消息: 未定义的引用

QOpenGLExtension_ARB_instanced_arrays::QOpenGLExtension_ARB_instanced_arrays()'
undefined reference to `QOpenGLExtension_ARB_instanced_arrays::initializeOpenGLFunctions()'

我已经确定我通过 m_context->hasExtension(..)

说过扩展名

这是我的代码块(与文章代码非常相似):

assert(m_context->hasExtension(QByteArrayLiteral("GL_ARB_instanced_arrays")));
QOpenGLExtension_ARB_instanced_arrays* m_instanceFuncs = new QOpenGLExtension_ARB_instanced_arrays();
m_instanceFuncs->initializeOpenGLFunctions();
qDebug("extension loaded");

我假设这篇文章会提到其他必要的步骤。我在 Windows 7 上使用 Qt 5.3 和 4.3 Core 上下文。

【问题讨论】:

也许你编译 Qt 5.3 时不支持 QOpenGLExtension_ARB。例如,您可以在 Qt lib 文件中使用文本搜索并尝试查找提及 QOpenGLExtension_ARB_instanced_arrays。但这不是好方法。 这是一个很好的猜测,但我不这么认为。至少我在 Ming482_32\include\QtOpenGLExtensions\qtopenglextensions.h 中看到了头文件和实现 也许这是一种不好的方法,但您可以将 qopenglextensions.cpp 文件添加到您的项目中。您可以在 Qt 源代码中找到它。 为什么需要那个扩展?反正大部分不是在 QOpenGLFunctions_4_3_Compatibility 中吗? 我将 qopenglextensions 文件添加到我自己的项目中,但不幸的是它并没有改变任何东西。至于 4.3 Comp,我认为它不支持扩展。然而,除此之外,我想知道我可以使用 Qt 加载扩展。 ARB_instanced_arrays 只是一个测试用例。 【参考方案1】:

QOpenGLExtensions 位于 opengl 之外的另一个子模块中,因此我必须在 pro 文件中启用它,如下所示:

QT += openglextensions

【讨论】:

以上是关于使用 Qt5 加载 OpenGL 扩展的主要内容,如果未能解决你的问题,请参考以下文章

Qt 5.5 和 OpenGL:检索设备信息

在运行时加载 OpenGL 扩展

使用 Qt5 进行屏幕外渲染(openGL)

Qt5 将 QImage 转换为 OpenGL 格式

Qt5.5下捕获一个带有OpenGL内容的Widget

如何将 QPainter 和 OpenGL 与着色器与 Qt5.9 并行使用