0

glGetProgramInfoLog(および一致する関数ポインタ型) が Windows の OpenGL ヘッダーで定義されておらず、関数も DLL から欠落しているようPFNGLGETPROGRAMINFOLOGARBPROCです – opengl32.dll に文字列 "wglGetProgram" が見つかりませんでした。

Windows で同じ機能を得る別の方法はありますか?

glGetInfoLogARBglGetProgramInfoLog代替のようですが、モバイルプラットフォームでは常に空の文字列を返すので、 ?!には違いがあると思います。

4

3 に答える 3

2

グラフィックドライバーが最新であることを再確認します。次に、GL ヘッダーに問題がないことを確認し、コンパイラのインクルード パスを再確認します。

GLEW には、現在の GL バージョンのすべてを一覧表示するツールが付属していると思います。

"depends" と呼ばれるプログラムがあり、実行可能ファイルによってどの DLL がロードされているかを教えてくれます。これは、別の DLL が見つからず、代わりに使用されていないことを再確認するのに役立つ場合があります。

于 2013-08-22T13:56:32.827 に答える
1

Windows に同梱されている OpenGL DLL は、OpenGL 1.1 のみを実装しています。Windows でドライバーの介入なしに呼び出すことができる唯一の関数は、OpenGL 1.1 からのものです。

新しいものを呼び出すにwglGetProcAddress (...)は、ICD (Installable Client Driver) と通信する which を使用して、OpenGL 拡張関数のエントリポイントを取得する必要があります。

GLEW のようなものを使用する場合、これはすべて処理できます。これらのシンボルは、リンク時に完全に解決されるわけではないことに注意してください。GLEW を使用すると、ライブラリを初期化するときに各関数のエントリポイント アドレスに置き換えられる一連の NULL ポインターが効果的に得られます。したがって、GLEW を使用しているときに関数が存在しないとコンパイラ/リンカーが文句を言わないからといって、実行時にその関数を実際に使用できるわけではありません。

于 2013-08-22T19:35:08.923 に答える
0

私が使用しているヘッダー バージョン ("Microsoft SDKs\Windows\v7.0A\Include\gl\GL.h") には、GL_VERSION_1_1 マクロのみが定義されているため、その関数は含まれていません。ヘッダーをいじらず、glGetInfoLogARB代わりに、デスクトップ プラットフォームでも同じように動作し、完全に互換性のある署名を持つ関数を使用することにしました。ES 2.0 プラットフォームでは、シェーダー リンカー エラーの場合にのみ空の文字列が返さglGetProgramInfoLogれるため、直接使用しています。glGetInfoLogARB

于 2013-08-22T15:09:01.227 に答える