0

我刚刚测试了第 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'

如何解决这些问题?(代码链接在这里

4

2 回答 2

2

简短的回答:只包含 GLEW 的头文件,不包含任何 OpenGL 头文件。

说明:GLEW 的头文件有效地包含了 OpenGL 头文件中的所有内容(我从未尝试过使用 GLES,但我怀疑它是相同的),通过 C 预处理器宏重新定义了所有 OpenGL 入口点。这就是为什么您会看到多重定义的符号和类型。可以在此处找到其他信息。

于 2013-02-06T13:52:19.607 回答
1

肯定不是最佳答案,但我刚刚检查了这本书。

当您使用 Qt 的版本时,这本书似乎已经过时了:

例如,在最近的 Qt 版本中(至少 4.7 版)

因此,为了便于阅读本书,您可以考虑将您的 Qt 降级到 4.x(例如 4.8)系列,因为 OpenGl 要求可能会有很多变化,特别是如果您正在使用 Qt 构建使用不同的 OpenGL 库构建。

另一种解决方案是使用完全不需要 Qt 的更新源代码:

这是来自 David Wolff 的 OpenGL 4.0 Shading Language Cookbook 的示例程序。源代码已更新为与 MS Visual Studio 一起使用,不再需要 Qt。

于 2013-02-07T12:41:13.033 回答