当前,我有一个RenderObject类的集合,其中包含一个纹理,一个VAO和一个VBO。绘制成千上万个此类对象会因所有状态切换和带有少量三角形的glDrawArrays调用而导致性能下降。

因此,现在我将更改实现,以便创建一系列1MiB VBO(从第一个开始,一旦充满,创建第二个1MiB VBO并继续填充)。每个VBO是否需要单独的VAO? VBO已经使用交织的顶点数据,所以我不是在谈论将多个VBO用于顶点,法线,纹理坐标等。

最佳答案

我认为可能会有些困惑。顶点属性是指您可以通过单个顶点传递的每个顶点元素的数量(法线是一个,UV是另一个,等等)。在您的实现中,该值限制为16,您很可能不会超过。

VAO存储发出一次抽签所需的状态信息。这包括存储需要为该调用绑定(bind)哪些VBO。鉴于每个VBO都必须在其自己的单独绘制调用中绘制,因此我也认为您需要一个VAO来存储每个VBO的设置信息。

这是一个很好的解释:

http://ogldev.atspace.co.uk/www/tutorial32/tutorial32.html

关于opengl - 每个VBO是否需要VAO?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17597159/

10-13 03:35