在两个不同的顶点阵列对象中使用顶点缓冲区

时间:2014-05-08 12:54:47

标签: c++ opengl glsl

这是一个理论问题,所以到目前为止我还没有代码。

假设我有一个带有顶点位置数据的VBO,并在VAO中使用它来渲染带有特殊索引数组的三角形的索引(glDrawElements())数字。

现在我想在第二个VAO中重复使用这个数据缓冲区来渲染一些由行组成的其他数字,但是使用不同的索引数组。

如何绑定缓冲区,以便重用第一个VAO的顶点数据?

1 个答案:

答案 0 :(得分:4)

在VAO之间共享缓冲区不需要特殊代码,只需像往常一样绑定它们。

设置:

glBindVertexArray(VAO[0]);
glBindBuffer(GL_ARRAY_BUFFER, locBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, triangleBuffer);
glVertexAttrPointer(...);

glBindVertexArray(VAO[1]);
glBindBuffer(GL_ARRAY_BUFFER, locBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, lineBuffer);
glVertexAttrPointer(...);

并在绘图时:

glBindVertexArray(VAO[0]);
glDrawElements(...);

glBindVertexArray(VAO[1]);
glDrawElements(...);