我正在编写一个新项目,并希望用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'
毕竟我还不知道如何解决这个问题,究竟是什么导致了这个错误......
答案 0 :(得分:0)
glbinding - 与几乎所有其他OpenGL加载器一样 - 必须摆弄OpenGL符号标记以避免命名空间冲突。为此,它必须以特定的方式与OpenGL定义交互,这意味着您必须不包含任何OpenGL标头,或者在包含 glbinding 标头时依次包含这些标头。摆弄 glbinding 执行的预处理器将阻止gl.h
以导致故障的方式被包含。
所以你必须做的是:在C ++编译单元文件中包含 glbinding 标头之前的其他内容(Qt头文件,OpenGL帮助程序库等)。