2012-01-07 156 views
1

我不能找到從多個頂點緩衝器繪製是否被支撐在OpenGL ES 2.0的多的信息(即用於正常,顏色位置數據的一個頂點緩衝器和另一等)。這頁http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesforWorkingwithVertexData/TechniquesforWorkingwithVertexData.html和特別列表9.4意味着你應該能夠,但我不能讓它在我的程序上工作。代碼有問題的繪圖調用:的OpenGL ES 2.0,使用多個頂點繪圖緩衝器

glBindBuffer(GL_ARRAY_BUFFER, mPositionBuffer->openglID); 
glVertexAttribPointer(0, 4, GL_FLOAT, 0, 16, NULL); 
glEnableVertexAttribArray(0); 

glBindBuffer(GL_ARRAY_BUFFER, mTexCoordBuffer->openglID); 
glVertexAttribPointer(1, 2, GL_FLOAT, 0, 76, NULL); 
glEnableVertexAttribArray(1); 

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer->openglID); 
glDrawElements(GL_TRIANGLES, 10788, GL_UNSIGNED_SHORT, NULL); 

這場平局通話將模擬器失速或崩潰與EXC_BAD_ACCESS,並給出了設備上的非常怪異的行爲(OpenGL的繪製隨機三角形或呈現先前渲染的幀)。沒有opengl調用會返回一個錯誤,我已經廣泛地檢查了頂點緩衝區,並確信它們具有正確的大小和數據。

有沒有人成功地使用多個頂點緩衝區渲染並可以分享他們爲什麼這可能無法正常工作經驗嗎?任何信息在哪裏開始調試停滯/失敗繪製調用不返回任何錯誤代碼將不勝感激。

回答

1

是的,你可以爲一個平局使用多個頂點緩衝對象(維也納組織)。 OpenGL ES 2.0 spec在第2.9.1節中如此說明。

你真的在你的代碼中的所有硬編碼的常量? 76從哪裏來?

如果您需要幫助調試,您需要發佈初始化緩衝區的代碼(調用glGenBuffersglBufferData的代碼)。您還應該發佈EXC_BAD_ACCESS的堆棧跟蹤。

這也可能是更容易調試,如果你畫了一個簡單的東西,像一個三角形,而不是3596點的三角形。

2

訪問衝突通常意味着你正在試圖吸引更多的三角形比你在緩衝區已經分配。你設置了緩衝區的方式是完全正常的,應該工作,如果你的參數設置是否正確,我將檢查:

http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribPointer.xml http://www.opengl.org/sdk/docs/man/xhtml/glDrawElements.xml

我覺得您的問題或者是你已經切換偏移和邁向你的glVertexAttribPointer電話,或者你誤算了你正在繪製的指數的數量