1

我注意到 openGLShaderSource 的签名发生了变化:

如果您查看http://www.khronos.org/registry/gles/中的 gl2.h (对我来说是 rev 16803),签名内容如下:

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 版本...

4

1 回答 1

0

感谢尼可波拉斯的提示!这似乎编译:

无效 foo(const char* const*) {}
空栏(常量字符**){}

typedef void (*ftype)(const char**);

int main() {
  ftype f1 = reinterpret_cast(foo);
  ftype f2 = 条形;
  返回0;
}
于 2012-09-26T11:59:50.737 回答