opengl glbinding,Qt和错误“glbinding is not compatible with gl.h”

8ehkhllq  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(125)

我正在写一个新项目,想用glbinding替换GLEW。
我的设置是这样的:VS 2015,Qt 5.6,glbinding 2.0
我试图编译相当简单的代码-只有窗口(QWindow)与OpenGL上下文(QOpenGLContext),但得到一个错误:*glbinding与gl.h不兼容 *
当我跟踪这个bug时,我发现文件(由 glbinding/gl/gl.h 导入)nogl.h 导致了下面的代码:

#ifdef __gl_h_
    #error "glbinding is not compatible with gl.h"
#else
    #define __gl_h_
#endif

然后我注意到这是由 QtGui/qopenglcontext.h 头文件引起的(我需要它来创建OpenGL上下文.)。因此,当我不包含 qopenglcontext.h 时,我的程序编译时没有错误。我还注意到,只有当我在 QtGui/qopenglcontext.h 之后包含 glbinding/gl/gl.h 时,才会出现此错误消息。如果我颠倒包含顺序,我会得到一堆像这样的错误:

1>C:\Qt\Qt5.6.0\5.6\msvc2015_64\include\QtGui/qopenglext.h(117): error C2065: 'GLenum': undeclared identifier
1>C:\Qt\Qt5.6.0\5.6\msvc2015_64\include\QtGui/qopenglext.h(117): error C2146: syntax error: missing ')' before identifier 'mode'
1>C:\Qt\Qt5.6.0\5.6\msvc2015_64\include\QtGui/qopenglext.h(118): error C2065: 'GLenum': undeclared identifier
1>C:\Qt\Qt5.6.0\5.6\msvc2015_64\include\QtGui/qopenglext.h(118): error C2146: syntax error: missing ')' before identifier 'target'

毕竟,我仍然不知道如何解决这个问题,究竟是什么导致这个错误.

5cg8jx4n

5cg8jx4n1#

  • glbinding* --就像其他OpenGL加载器一样--必须处理OpenGL符号标记以避免命名空间冲突。为此,它必须以特定的方式与OpenGL定义进行交互,这意味着您必须没有包含任何OpenGL头文件,或者在包含 glbinding 头文件时包含此类内容。预处理器fiddling glbinding 执行将防止gl.h以引起麻烦的方式被包括在内。

所以你要做的是:在你的C++编译单元文件中包括 glbinding 头文件,在所有其他文件之前(Qt头文件,OpenGL辅助库等等)。

相关问题