2009-09-04 6 views
2

OpenGL ES 1.1では、何か問題が起こったときに私のiPhoneプログラムがクラッシュするのが好きです。OpenGL ESのクラッシュをデバッグするには?

通常、glDrawArraysのどこかで発生し、スタック上にいくつかのglDestroyContextが呼び出されます。

通常、私はすべての場所で

{ 
    GLint iErr = glGetError(); 
    if (iErr != GL_NO_ERROR) 
    { 
    NSLog(@"GL error: %d (0x%x)", iErr, iErr); 
    } 
} 

を挿入することで、問題を二分しています。

ただし、時にはそれでは不十分です。クラッシュの理由で有用な診断を得る他の方法はありますか?

答えて

0

コンソール出力にエラーメッセージが表示されますか。説明からちょうど、BAD_ACCESS例外が発生しているのだろうかと思います。私の仮定が正しい場合は、おそらく、glVertexPointerglColorPointer、または他の関連する関数の1つに不良配列を渡している可能性があります。

glDrawArraysで死亡し、戻ってこないと仮定して正しいですか?つまり、プログラムが既にクラッシュしているため、glDrawArraysの後にglGetErrorに電話する方法はありません。

+0

追加のコンソールメッセージはありません(クラッシュタイプとは別に、通常は不正なアクセスです)。通常は、入力データの一部が無効であるか、何らかの状態を有効にするのを忘れています。しかし、何が間違っているのかを見つけるまでには時間がかかります。私は通常、バイナリ検索に頼る必要があります。 :( –

+0

私はあなたのバッファよりも多くの三角形を描画しようとしていないことを確認するでしょう。OpenGLがそうしてはならないメモリに入っているように聞こえます。あなたは本当にバッファーにいます。 –