Opengl es OpenGL ES 2版本之间openGlShaderSource中的签名差异
我注意到openGLShaderSource的签名已更改: 如果您查看gl2.h(我的版本为16803),签名如下:Opengl es OpenGL ES 2版本之间openGlShaderSource中的签名差异,opengl-es,Opengl Es,我注意到openGLShaderSource的签名已更改: 如果您查看gl2.h(我的版本为16803),签名如下: GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length); GL_APICALL void GL_APIENTRY glShaderSource (GLuin
GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length);
GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar** string, const GLint* length);
现在,在该文件的旧版本(版本10602)上,或者在查看该功能的桌面版本时,签名显示:
GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length);
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*);
因此,当它尝试将glShaderSource函数指针分配给具有新gl2.h版本的glShaderSourceType变量时,无法编译…多亏了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; } void foo(常量字符*常量*){} 空条(常量字符**{} typedef void(*ftype)(常量字符**); int main(){ F类型f1=重新解释铸件(foo); F型f2=钢筋; 返回0; }
你不能简单地表演一个演员吗?