2011-09-30 92 views
1

我用VBO做了一些渲染。現在我想添加更復雜的渲染VBO。我現在只是創建一個VBO,保持原來的渲染狀態,而現在我不向VBO渲染任何內容。這裏是代碼:使用VBO時EXC_BAD_ACCESS

GLuint bufId; 
glGenBuffers(1, &bufId); 
glBindBuffer(type, bufId); 
glBufferData(type, size, 0, GL_STATIC_DRAW); 
//size = 100000; 

這是關於VBO的唯一代碼。但是如果最後一筆沒有註釋,那麼在繪製GL_TRIANGLE_STRIP時,我會在舊渲染中獲得EXC_BAD_ACCESS。在這次訪問不良之前,我已經輸入了glGetError(),並返回0.問題是什麼?謝謝

回答

1

我發現這個問題。你必須取消綁定VBO,如果你想用出它來繪製:在那之後一切工作

+0

我有同樣的崩潰,在我的情況下,解決了它與'glBindVertexArray(0)'解綁定VAO' –

2

EXC_BAD_ACCESS表示您已嘗試讀取或寫入尚未映射到您的進程的內存。

有很多方法可能發生,並且glGetError()無法知道它。

我寫了這個博客,試圖幫助你調試它。它適用於iPhone,但其中的所有內容也適用於Mac應用程序。

http://loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html

的一個關鍵點是,EXC_BAD_ACCESS沒有在錯誤的點發生 - 導致它可能已經運行的bug,和壞的接入響應發生的事情 - 在碰撞點可能根本不相關。我的博客通過一些調試技巧來找出問題的真相。例如,它可能與GL無關。

在您的代碼中,sizetype的值是多少?這可能與此無關。

有些事情要檢查所有代碼已經運行到這一點。

  1. 的雙自由
  2. 出界外讀/陣列上寫
  3. 壞蒙上
+0

感謝你回答

glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 

。 size = 100000. type = GL_ARRAY_BUFFER – Andrew

+0

順便說一句:如果使用GL_ELEMENT_ARRAY_BUFFER – Andrew

+0

沒有問題glBufferData的文檔說大小是32的倍數。(可能不是問題,但可能導致另一個) –