2

頂点、法線、およびカラー バッファー (glBindBufferARB) を格納するために VBO 拡張機能を使用しています。何らかの理由で、バッファーを変更したり、何らかの操作を行ったりすると、アプリケーションがアクセス違反でクラッシュします。デバッガーをアタッチすると、nvidia グラフィックス ドライバーに関連する dll で実行される opengl 呼び出しを実行するメイン スレッドではないスレッドでクラッシュが発生することがわかります。

おそらく発生したのは、一部のバッファー呼び出しに不適切なバッファーまたは間違ったサイズを指定したことです。私の質問は、この状況をどのようにデバッグするのですか? クラッシュは、実際の呼び出しの後、別のスレッドで発生したようです。

4

3 に答える 3

3

これが Windows に関するものであると仮定すると、NVIDIA にはGLExpertツールがあります。さまざまな OpenGL 警告/エラーを出力できます。

その他の場合には、エラー チェックをオンにしてGLIntercept OpenGL コール インターセプタを使用すると便利な場合があります。

ツールが役に立たない場合、それは古き良きデバッグです。問題を絞り込み、クラッシュの正確な原因を特定してください。NVIDIA 固有の問題である場合は、別のドライバーをインストールするか、NVIDIA 開発者フォーラムで質問してみてください。

于 2008-09-16T16:29:36.133 に答える
0

私はあなたがそれを強引に強制しなければならないかもしれないと思います。つまり、プログラムがクラッシュしなくなるまで、一度に数行ずつ vbo をコメントアウトします。そうすれば、どの行に注意を向けるべきかが分かり、渡すパラメーターを実際に精査することができます。

また、glError() 呼び出しをプログラムに散らばってみてください。多くの場合、偽のパラメーターを渡すと、glError はクラッシュする前に何か問題があることを通知します。

于 2008-09-15T19:35:41.217 に答える
-1

最高の OpenGl/D3D デバッグ ツールの 1 つは、nVidia の NvPerfHUD です。正確な問題を見つけるのに役立つわけではありませんが、レンダリング パイプラインに送信しているものの別のビューを提供します。

ただし、D3D アプリケーションでしか使用していないので、OpenGL プログラムでそれほど役立つかどうかはわかりません。

編集:

なぜこれが反対票を投じられたのかわかりません。以前、NvPerfHUD で VB と IB の問題をデバッグしたことがあります。悪いプリミティブ カウントなどの単純なことは、個々の描画呼び出しを調べることで診断できます。

于 2008-09-15T19:37:13.147 に答える