我有兩個地方調用glVertexAttribPointer()的一些示例代碼。這是必要的嗎?它可以只做一次嗎?glVertexAttribPointer() - 何時應該調用?
第一次 - 頂點緩衝數據關聯: - :
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vboQuad);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(COLVERTEX), 0);
glDrawArrays(GL_QUADS, 0, 4);
glDisableVertexAttribArray(0);
真的有必要來描述頂點屬性兩次渲染回調函數
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(COLVERTEX), 0);
glBufferData(GL_ARRAY_BUFFER, sizeof(v), v, GL_STATIC_DRAW);
第二次?
'glVertexAttribPointer'將當前綁定的緩衝區關聯到當前綁定的頂點數組對象。您可以綁定/解除綁定屬性緩衝區的VAO。 –
@ColonelThirtyTwo,謝謝 - 這是否意味着沒有必要在glBufferData之前調用它? ..我應該只在glBindBuffer之後調用它? – SparkyNZ
@SparkyNZ'BufferData'用原始數據填充VBO。在這一點上,繪圖時應該如何解釋數據並不重要(例如,同一數據可能被解釋爲一次平局中的頂點位置,而是另一次平局中的法線)。所以是的,你可以刪除這個第一個電話。 – keltar