openGL ES 2修订版中openGlShaderSource的签名差异

时间:2012-09-25 15:56:08

标签: opengl-es

我注意到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版本时无法编译...

1 个答案:

答案 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;
}