替换现有VAO中的VBO

Bre*_*ale 8 opengl performance vbo opengl-3

我有关于各种顶点属性维也纳组织一个VAO:顶点位置,顶点法线,和元件阵列VBO(所有STATIC_DRAW),从而呈现一个实例只要求:

glBindVertexArray(vao);
glDrawElements(GL_TRIANGLES, <count>, <type>, 0);
Run Code Online (Sandbox Code Playgroud)

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

它是更有效地结合VAO,结合当前texcoord VBO,并通过设置属性指针glVertexAttribPointer,最终确定与VAO glBindVertexArray(0)并画出一个带有不同纹理坐标的新实例?或者更新VAO的成本是否会使这种方法变得糟糕?如何glBufferSubData在绑定的VAO中更新texcoord VBO ?

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

Luc*_*uca 3

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

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

如果您在某个时候想要另一种属性配置,请丢弃旧的 VAO 并创建一个新的。