2009-09-04 86 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。如果我的假設是正確的,那麼您可能會將錯誤的數組傳遞給glVertexPointer,glColorPointer或其他相關函數之一。

我正確地認爲它在glDrawArrays中死亡,永遠不會回來嗎?換句話說,glDrawArrays之後沒有辦法調用glGetError,因爲程序已經崩潰了?

+0

沒有額外的控制檯消息(也就是說,除了崩潰類型 - 確實通常是不好的訪問)。通常它可能是一些不好的輸入數據,或者我忘記啓用某些狀態。但需要時間才能找到具體的問題。通常我不得不求助於二分查找。 :( – 2009-10-01 16:16:55

+0

我會檢查以確保你沒有試圖繪製比你的緩衝區包含更多的三角形,這聽起來像OpenGL進入它不應該的內存,這可能意味着你告訴它,你有更多的頂點你真的在緩衝區中。 – 2009-10-03 06:04:02