我有一个带有 VBO 的 VAO,用于各种顶点属性:顶点位置、顶点法线和元素数组 VBO(所有 STATIC_DRAW),这样渲染一个实例只需要:
glBindVertexArray(vao);
glDrawElements(GL_TRIANGLES, <count>, <type>, 0);
但是,我想为每个实例绘制具有不同顶点纹理(s,t)坐标的对象的多个实例(我仅限于 OS X GL 3.2 核心配置文件 BTW)。texcoord VBO 使用 STREAM_DRAW 提示(尽管我可能会使用 DYNAMIC_DRAW)。
绑定VAO,绑定当前的texcoord VBO,通过设置属性指针glVertexAttribPointer
,用不同的纹理坐标完成VAOglBindVertexArray(0)
并绘制新实例是否更有效?或者更新 VAO 的成本是否使这成为一种糟糕的方法?glBufferSubData
在绑定的 VAO 中更新 texcoord VBO 怎么样?
在对单独的方法进行基准测试之前,我真的很感激一些反馈,因为错误的选择会导致重大的重构。