优化交错的VBO

时间:2014-05-28 20:58:16

标签: opengl vbo

我希望了解以下内容:
在OpenGL中为顶点,法线和索引制作不同的VBO:由于重用,我可以使用更少的内存,但它不是有效的。

当使用交错的VBO:s时,正常的例程是相同的顶点和法线将被写多次,对吧?

我的问题是,如果使用更多的内存是人们只是为了获得速度而接受的东西,或者是否值得采取某种方法来重复使用"已经给出了指数或类似的数据?

1 个答案:

答案 0 :(得分:2)

interleaved VBO基本上包含一个结构数组:

struct vertexAttr{
    GLfloat posX, posY, posZ;
    GLfloat normX, normY, normZ;
}

glBindBuffer(GL_ARRAY_BUFFER, vert);
vertexAttr* verts = new vertexAttr[numVerts];
//fill verts
glBuffer(GL_ARRAY_BUFFER, numVerts, verts, GL_STATIC_DRAW​);
delete[] verts;

glBindProgram(prog);
glVertexAttribPointer(posAttr, 3, GL_FLOAT, false, sizeof(vertexAttr), 0);
glVertexAttribPointer(normAttr, 3, GL_FLOAT, false, sizeof(vertexAttr), offsetof(vertexAttr, normX));

您仍然需要为索引使用单独的缓冲区。