glbinding,Qt和错误" glbinding与gl.h"不兼容

时间:2016-05-06 17:43:05

标签: c++ qt opengl

我正在编写一个新项目,并希望用glbinding替换GLEW。

我的设置是这样的: VS 2015,Qt 5.6,glbinding 2.0

我尝试使用OpenGL上下文(QWindow)编译非常简单的代码窗口(QOpenGLContext),但出现错误: glbinding与gl.h不兼容

当我跟踪这个错误时,我发现该文件(由 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'

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

1 个答案:

答案 0 :(得分:0)

glbinding - 与几乎所有其他OpenGL加载器一样 - 必须摆弄OpenGL符号标记以避免命名空间冲突。为此,它必须以特定的方式与OpenGL定义交互,这意味着您必须不包含任何OpenGL标头,或者在包含 glbinding 标头时依次包含这些标头。摆弄 glbinding 执行的预处理器将阻止gl.h以导致故障的方式被包含。

所以你必须做的是:在C ++编译单元文件中包含 glbinding 标头之前的其他内容(Qt头文件,OpenGL帮助程序库等)。