替换现有VAO中的VBO

时间:2012-08-30 14:21:05

标签: performance opengl vbo opengl-3

我有一个带有VBO的VAO用于各种顶点属性:顶点位置,顶点法线和元素数组VBO(所有STATIC_DRAW),这样渲染实例只需要:

glBindVertexArray(vao);
glDrawElements(GL_TRIANGLES, <count>, <type>, 0);

但是,我想绘制一个对象的多个实例(我仅限于OS X GL 3.2核心配置文件BTW),每个实例具有不同的顶点纹理(s,t)坐标。 texcoord VBO使用STREAM_DRAW提示(尽管我可能会使用DYNAMIC_DRAW)。

绑定VAO,绑定当前的texcoord VBO,并通过glVertexAttribPointer设置属性指针,用glBindVertexArray(0)完成VAO并用不同的纹理坐标绘制新实例是否更有效?或者更新VAO的成本是否会使这种方法变得糟糕?如何在绑定的VAO中使用glBufferSubData更新texcoord VBO?

在对单独的方法进行基准测试之前,我真的很感激一些反馈,因为错误的选择将导致重大的重构。

1 个答案:

答案 0 :(得分:3)

只需创建多个VAO。顶点数组对象是轻量级的,它们用于一次设置顶点数组......

VBO可以绑定到多个VAO,让您的生活更轻松,更快捷。

如果您希望在某个时候使用另一个属性配置,请丢弃旧的VAO并创建一个新的VAO。