2

(非常に) ローエンドのグラフィックス アダプター (インテル g31) を使用しています。

VBO とシェーダー (GLSL 1.2) を使用する OpenGL プログラムを作成しています。プログラムは問題なくコンパイルされますが、 を呼び出すglLinkProgram()と、例外がスローされます。

Unhandled exception at 0x1027101A (ig4icd32.dll) in Test.exe: 0xC0000005: Access violation reading location 0x00000000.

glew の glewinfo.exe と OpenGL Extensions Viewer を使用して、glLinkProgram()存在するかどうかを確認しました。他の密接に関連する機能 ( glCreateProgram()glCreateShader()glCompileShader()など) も意図したとおりに機能します。

問題の実際の原因は何ですか? glewの問題かバグか?それは私のドライバーの問題ですか?

私は他の多くの問題を解決するように設定glewExperimentalしました。GL_TRUE

編集:私も使用glLinkProgramARB()しており、上記と同じエラーが発生します。

4

2 に答える 2

2

ig4icd32.dllが Intel のドライバーであり、そこでクラッシュしていることを考えると、Intel のドライバーがクラッシュしていると推測できます。

そうすべきではありませんが、気を悪くしないでください。Intel は悪い OpenGL ドライバーでよく知られています。可能な限りそれらを避けるのが最善です。

于 2012-10-04T06:30:31.373 に答える
0

Intel モバイル 4 エクスプレス チップセットでも同じ問題が発生しました。シェーダーは正常にコンパイルされましたが、実際のプログラムをリンクするときに例外が発生し、些細な頂点シェーダーやフラグメント シェーダーでも例外がスローされました。私は glew を使用しませんでした。私のプログラムでは、glLinkProgram は次のように呼び出されました。

   ((PFNGLLINKPROGRAMPROC)wglGetProcAddress("glLinkProgram"))(p);

次に、最初にポインターを取得してから実際の関数を呼び出すことで、この問題を解決しました。なぜこのように機能するのかわかりません。

    PFNGLLINKPROGRAMPROC glLinkProgram = ((PFNGLLINKPROGRAMPROC)wglGetProcAddress("glLinkProgram"));
glLinkProgram(p);

プログラムがクラッシュした理由を見つけるために、最初のステートメントをより適切にデバッグしようとします。

于 2012-10-16T08:59:21.843 に答える