2

我遵循了 OpenGL-tutorial.org 上的每一条指令,下载了 2.1 代码,通过指定 xcode 的 cmake 运行它并使用它的默认编译器。我配置直到红线消失然后点击生成。但是,它生成的项目文件在 xcode 中打开时显示以下错误:

 /OpenGL-tutorial_v0010_21/external/AntTweakBar-1.15/src/LoadOGLCore.h:149:24: Conflicting types for 'glMultiDrawElements'

 /OpenGL-tutorial_v0010_21/external/AntTweakBar-1.15/src/LoadOGLCore.h:214:24: Conflicting types for 'glShaderSource'

 /external/AntTweakBar-ObjectiveC/LoadOGLCore.mm:116:1: Cannot initialize a variable of type 'PFNglMultiDrawElements' (aka 'void (*)(GLenum, const GLsizei *, GLenum, const GLvoid **, GLsizei)') with an lvalue of type 'void (GLenum, const GLsizei *, GLenum, const GLvoid *const *, GLsizei)': type mismatch at 4th parameter ('const GLvoid **' (aka 'const void **') vs 'const GLvoid *const *' (aka 'const void *const *'))

 /external/AntTweakBar-ObjectiveC/LoadOGLCore.mm:116:1: Cannot initialize a variable of type 'PFNglMultiDrawElements' (aka 'void (*)(GLenum, const GLsizei *, GLenum, const GLvoid **, GLsizei)') with an lvalue of type 'void (GLenum, const GLsizei *, GLenum, const GLvoid *const *, GLsizei)': type mismatch at 4th parameter ('const GLvoid **' (aka 'const void **') vs 'const GLvoid *const *' (aka 'const void *const *'))

我正在使用 Xcode 4.6.1 和 cmake 2.8-10

这可能是cmake或教程代码有问题吗?

4

3 回答 3

4

前两个错误很容易修复,也许它会修复其他两个。请注意 gl.h 中 glShaderSource 的签名。这是:

extern void glShaderSource (GLuint shader, GLsizei count, const GLchar* const *string, const GLint *length);

第三个参数是“指向字符串的 const 指针的 const 指针”。

但是,请注意 LoadOGLCore.h 中的签名是(扩展宏):

extern "C" { void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar * *string, const GLint *length);

第三个参数是“指向字符串指针的常量指针”(缺少“常量”)。因此,打开 LoadOGLCore.h 并更改(第 214 行):

const GLchar* *string

至:

const GLchar* const *string

对有关 glMultiDrawElements 的其他错误执行相同操作。这让我至少可以在 OSX 10.8.5 上构建 AntTweakBar。还没有尝试运行示例项目,但是当我这样做时我会更新。

于 2014-06-06T19:41:13.610 回答
0

转到这些函数的定义并用正确的(更新)参数定义替换原型

于 2013-04-25T19:07:05.907 回答
0

作者在这里,

欢迎使用 StackOverflow,感谢您阅读 opengl-tutorial.org!

这是一个已知问题(仅在 10.8 上,我没有)。但是,提供简单 GUI 的 AntTweakBar 仅用于最后一个教程。其他子项目应该构建得很好。以防万一,您可以删除 CMakeLists.txt 文件中的第 367 到 385 行,然后重新运行 CMake。

当它修复时,我会更新这篇文章。带来不便敬请谅解 !

于 2013-04-25T22:03:21.610 回答