2012-09-25 37 views
1

我注意到openGLShaderSource的簽名已經改變:簽名差異

如果你看一下gl2.h從http://www.khronos.org/registry/gles/(對我來說,在轉16803),簽名上寫着:

現在
GL_APICALL void   GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length); 

,在該文件的舊版本(修訂版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函數指針與新gl2.h版本glShaderSourceType變量分配到編譯...

+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; 
}