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

ニコル・ボーラスのヒントに感謝!これはコンパイルされるようです:

void foo(const char* const*) {}
ボイドバー(const char**) {}

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

int main() {
  ftype f1 = reinterpret_cast(foo);
  ftype f2 = バー;
  0 を返します。
}
于 2012-09-26T11:59:50.737 に答える