所以我最近了解了VAO(顶点阵列对象),到目前为止它们看起来非常棒,但我有一个问题似乎无法解决。我有一堆模型,它们的顶点状态存储在单独的VAO中,所以一次调用
glBindVertexArray(VAO);
是开始绘制此实例所需的全部内容。问题在于我必须绑定一个额外的VAO,一个包含
的数据 glDrawElementsInstanced();
呼叫。因此它包含偏移,UV偏移,颜色叠加等数据。当我绑定它时,前一个似乎解除了绑定,这在OpenGL中是有道理的,我想,但我不知道如何做到这两个都有效?
这个想法是绘制共享相同模型的所有静态对象,而不是每帧上传任何数据。这完全是错误的做法吗?
答案 0 :(得分:3)
当我绑定它时,前一个似乎解除了绑定,这在OpenGL中是有道理的,我想,但我不知道该怎么办才能让它们都活跃?
当然它解开了。这就是OpenGL的工作原理。它是一个状态机,你想要同时激活两个状态。
这个想法是绘制共享相同模型的所有静态对象,而不是每帧上传任何数据。
如果他们没有改变,那么不要改变它们。您只需绑定并激活顶点组件(如here所述)。