我有一个带有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?
在对单独的方法进行基准测试之前,我真的很感激一些反馈,因为错误的选择将导致重大的重构。
答案 0 :(得分:3)
只需创建多个VAO。顶点数组对象是轻量级的,它们用于一次设置顶点数组......
VBO可以绑定到多个VAO,让您的生活更轻松,更快捷。
如果您希望在某个时候使用另一个属性配置,请丢弃旧的VAO并创建一个新的VAO。