2016-05-17 150 views
1

目前,在我的渲染引擎中,每个网格数据都有一个VBO(1个VBO用于顶点,1个VBO用于法线,1个VBO用于纹理坐标,1个VBO用于切线,1个VBO用于bitangents )并且所有这些都与VAO绑定在一起。OpenGL单个VBO vs多个VBO

我现在想改变系统来保存包含所有网格数据(顶点,法线等)的单个VBO,但是我会从中获得多少糊涂?谈到速度和效用(因为如果我的网格没有纹理,我可能没有所有的数据并且只提供顶点和法线)。

回答

0

您将寻求减少整体内存带宽。如果您的缓冲区对象包含交错在一起的所有属性,那么这意味着您的整个数组对象只引用一个连续的内存部分。内存子系统缓存起来要容易得多。这与CPU的原理完全相同 - 更多的本地连续内存访问,它们可能会更快。

还有一个潜在的不利因素:一般规则是您应该将元素与元素大小和四个字节中的较大者对齐。这导致了一些浪费的空间。但好处几乎总是超过损害。

显然唯一会受到影响的是GPU花费顶点的时间。如果你镶嵌或填充边界,你不会立即看到任何改进。

+0

好的。现在我正在设置环境来测试他们两个,我希望我会看到使用一个VBO的一些改进,因为现在它很慢,而我认为的一件事是因为是多个VBO。我会明白的 – zeb