我正在拼命地了解Qt5中OpenGL支持的架构。
我目前的问题是:我有一些现有的 OpenGL 代码(桌面,不是 OpenGL ES),它们使用一些 OpenGL 扩展,包括glGenBuffersARB
. 在 Qt5 之外访问这样的扩展功能是微不足道的,例如通过使用GLEW,我可以简单地这样做:
glewInit();
一切都会按预期神奇地工作,我可以立即开始使用glGenBuffersARB
。如果我担心,我可以打个电话来glewIsSupported
确保它得到支持。
但在 Qt5 中有一个警告,即 GLEW 并QOpenGLFunctions
不能很好地配合使用(复制自qopenglfunctions.h
):
#ifdef __GLEW_H__
#if defined(Q_CC_GNU)
#warning qopenglfunctions.h is not compatible with GLEW, GLEW defines will be undefined
#warning To use GLEW with Qt, do not include <qopengl.h> or <QOpenGLFunctions> after glew.h
#endif
#endif
因此,假设我为了这个问题并满足好奇心,完全放弃了 GLEW,完全依赖 Qt5 来实现纯 Qt5 方法。在不手动绑定每个扩展函数的情况下,如何让我现有的依赖 glGenBuffersARB 的 OpenGL 代码工作?
注意:我知道我可以按照此答案中的提示进行操作:
auto functions = context->versionFunctions<QOpenGLFunctions_3_3_Core>();
if (!functions) error();
functions->initializeOpenGLFunctions();
functions->glGenBuffersARB(...);
但是我必须在现有的 OpenGL 代码的每一行前面加上functions->
我不想这样做的前缀。