我注意到openGLShaderSource的签名已经改变了:
如果你从http://www.khronos.org/registry/gles/(对我来说,转16803页)看gl2.h,签名上写着:
GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length);
现在,在该文件的旧版本(rev 10602)上,或者在查看该函数的桌面版本时,签名显示为:
GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar** string, const GLint* length);
请注意字符串参数...
缺少“const”有谁知道如何检测到这一点并保持向后兼容性?据我所知,没有定义“修订版”宏,可以检查使用一个版本还是另一个版本。
背景信息:我正在尝试为一个带有新gl2.h标头的嵌入式平台编译WebKit。 webkit有这个:
typedef void (*glShaderSourceType) (GLuint, GLsizei, const char**, const GLint*);
在http://opensource.apple.com/source/WebCore/WebCore-1298/platform/graphics/cairo/OpenGLShims.h中,因此在尝试将glShaderSource函数指针分配给glShaderSourceType变量并使用新的gl2.h版本时无法编译...
答案 0 :(得分:0)
感谢Nicol Bolas的暗示!这似乎是编译:
void foo(const char* const*) {} void bar(const char**) {} typedef void (*ftype)(const char**); int main() { ftype f1 = reinterpret_cast(foo); ftype f2 = bar; return 0; }