這個問題是特定於WebGL,並假定VAOs不可用。WebGL - 當我調用bindBuffer和vertexAttribPointer?
我試圖通過限制低層次的狀態變化的數量做出了3D引擎的一些小的改進。但事實證明,我是一個有點困惑使用bindBuffer
和vertexAttribPointer
的正確方法。
比方說,我要畫兩個對象:
- 的第一個對象使用兩個緩衝區一個和ç與元素緩衝è;
- 第二對象使用緩衝器乙和Ç用相同的要素緩衝器ë。
緩衝器甲和乙使用相同的佈局,並且兩者都通過引用的位置0,而Ç由位置引用1.
最初,ARRAY_BUFFER_BINDING
點到零而ELEMENT_ARRAY_BUFFER_BINDING
點E。
冗餘檢驗器輸出具有(甲,乙,Ç,È)=(3,6,5,2)執行以下操作:
這意味着即:
bindBuffer(ELEMENT_ARRAY_BUFFER, [Buffer 2])
是不必要的vertexAttribPointer(1, 2, FLOAT, false, 0, 0)
可能已經避免
由於WebGL的可直接讀ELEMENT_ARRAY_BUFFER_BINDING
知道索引存儲在何處,1。對我來說很有意義。
但是,2.意味着緩衝器佈局存儲內部的VBO,這是錯誤的,因爲緩衝甲和乙不會被視爲冗餘上線15和30(幾個幀被渲染的已,所以他們應該保持自己的狀態)
我覺得我很困惑如何drawElements
知道使用什麼緩衝和何處/何時緩衝佈局存儲。
什麼是bindBuffer
和vertexAttribPointer
這個例子的情況下,爲什麼最佳使用?