是的,它的優良和用於交織的存儲的基礎。每個緩衝區只是其他命令可以指向的一部分內存。設置數據時甚至不需要將其綁定到GL_ELEMENT_ARRAY_BUFFER
。
你必須確保數據不重疊:
GLuint buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
//allocate the buffer, passing in null just allocates
glBufferData(GL_ARRAY_BUFFER, vertexSize+indexSize*sizeof(int), 0, GL_STATIC_DRAW);
// Buffer the Index Data at the start of the buffer
glBufferSubData(GL_ARRAY_BUFFER, 0, indexSize*sizeof(int), indexData);
// Buffer the Vertex Data right after that
glBufferSubData(GL_ARRAY_BUFFER, indexSize*sizeof(int), vertexSize, vertexData);
你需要抵消glVertexAttribPointer指針參數,以表示它開始的地方。
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer);
glVertexAttribPointer(0, 3, GL_FLOAT, false, sizeof(vertex), (void*)(indexSize*sizeof(int)));
glVertexAttribPointer(1, 3, GL_FLOAT, false, sizeof(vertex), (void*)(indexSize*sizeof(int) + 3*sizeof(float)));
//...
和繪圖時,你需要在相應的位置通過繪製(0,如果你把它首先你在相應的glBufferSubData
呼叫另有規定的偏移量)
glDrawElements(GL_TRIANGLES, indexSize, GL_UNSIGNED_INT, 0);
https://www.opengl.org/wiki/Vertex_Specification_Best_Practices – 2014-10-31 10:05:29