你是否需要为每个VBO提供VAO?

时间:2013-07-11 15:12:52

标签: opengl opengl-es

目前,我有一个RenderObject类的集合,其中包含纹理,VAO和VBO。由于所有状态切换以及使用少量三角形调用glDrawArrays,因此绘制数千个这些对象会导致性能下降。

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

1 个答案:

答案 0 :(得分:10)

我认为可能会有一些混乱。 Vertex Attribs是指您可以使用单个顶点传递的每个顶点元素的数量(法线将为1,UV为另一个,等等)。在您的实施中,限制为16,您最有可能不会超过。

VAO存储发出单个绘图调用所需的状态信息。这包括存储需要为该调用绑定的VBO。鉴于每个VBO必须在它自己的单独绘制调用中绘制,我还认为你需要一个VAO来存储每个VBO的设置信息。

这是一个很好的解释:

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