我刚刚测试了第1章(OpenGL 4.0 Shading Language Cookbook)
中的代码我已经安装了Qt5,qmake -tp vc chapter01.pro然后在vs2010中打开它。
构建并获得许多错误,如:
1>D:\APP\Qt5\5.0.0\msvc2010\include\GLES2/gl2.h(38): error C2371: 'GLintptr' : redefinition; different basic types
1> D:\OpenGL\glew-1.5.4\include\GL/glew.h(1615) : see declaration of 'GLintptr'
1>D:\APP\Qt5\5.0.0\msvc2010\include\GLES2/gl2.h(39): error C2371: 'GLsizeiptr' : redefinition; different basic types
1> D:\OpenGL\glew-1.5.4\include\GL/glew.h(1614) : see declaration of 'GLsizeiptr'
1>D:\APP\Qt5\5.0.0\msvc2010\include\GLES2/gl2.h(96): warning C4005: 'GL_BLEND_EQUATION_RGB' : macro redefinition
1> D:\OpenGL\glew-1.5.4\include\GL/glew.h(1666) : see previous definition of 'GL_BLEND_EQUATION_RGB'
1>D:\APP\Qt5\5.0.0\msvc2010\include\GLES2/gl2.h(474): error C2365: '__glewActiveTexture' : redefinition; previous definition was 'data variable'
1> D:\OpenGL\glew-1.5.4\include\GL/glew.h(12027) : see declaration of '__glewActiveTexture'
1>D:\APP\Qt5\5.0.0\msvc2010\include\GLES2/gl2.h(475): error C2365: '__glewAttachShader' : redefinition; previous definition was 'data variable'
如何解决这些问题? (代码链接为here)
答案 0 :(得分:2)
简答:只包含GLEW的头文件,并且不包含任何OpenGL标题。
说明:GLEW的头文件有效地包含了OpenGL头文件中的所有内容(我从未尝试使用GLES,但我怀疑它是相同的),通过C预处理器宏重新定义所有OpenGL入口点。这就是您看到多重定义的符号和类型的原因。可以找到其他信息here。
答案 1 :(得分:1)
肯定不是最佳答案,但我刚检查了这本书。
当你到达Qt的版本时,这本书似乎已经过时了:
例如,在最新版本的Qt(至少版本4.7)
中
因此,为了便于阅读本书,您可以考虑将您的Qt降级到4.x(例如4.8)系列,因为OpenGl要求可能会有很多变化,特别是如果Qt构建您使用的是使用不同的OpenGl库构建的。
另一个解决方案是使用updated source code,根本不需要Qt:
这是来自David Wolff的OpenGL 4.0着色语言手册的示例程序。源代码已更新为可与MS Visual Studio一起使用,不再需要Qt。