我正拼命地理解的架构OpenGL支持Qt5。我目前的问题是这样的:我有一些现有的OpenGL代码(桌面,而不是OpenGL ES),它使用一些OpenGL扩展,包括glGenBuffersARB
。外QT5能够访问这些功能,像这样的扩展是微不足道的,例如,通过使用GLEW我可以简单地这样做:如何在Qt5中使用扩展glGenBuffersARB?
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代码而无需手动手动绑定每个扩展函数?
注:我知道我可以按照this回答提示和做到这一点:
auto functions = context->versionFunctions<QOpenGLFunctions_3_3_Core>();
if (!functions) error();
functions->initializeOpenGLFunctions();
functions->glGenBuffersARB(...);
但后来我不得不对现有的OpenGL每一行代码前加上functions->
,我宁愿不做。
供参考:永远不要使用'glGenBuffersARB'。 'glGenBuffers'已经成为核心OpenGL的近十五年了。 –
我刚刚意识到这一点,对不起这是一个非常糟糕的例子,但我认为这个问题仍然很好。试想一下,我正在谈论另一个与今天相关的扩展! (这是我现有的OpenGL代码使用的扩展)。 –