OpenGL单个VBO vs多个VBO的比较

5

目前,在我的渲染引擎中,每个网格数据都有一个VBO(1个VBO用于存储顶点,1个VBO用于存储法线,1个VBO用于存储纹理坐标,1个VBO用于存储切线和1个VBO用于存储副切线),并且它们都与VAO一起绑定。

我现在正在考虑将系统更改为持有包含所有网格数据(顶点,法线等)的单个VBO,但我会从中获得多少利益呢?就速度和效用而言(因为如果我的网格没有纹理,则可能没有所有数据并仅提供顶点和法线)。

1个回答

2
您将寻求降低总内存带宽。如果您的缓冲对象包含所有属性相互交织在一起,那么您的整个数组对象仅引用单个连续的内存部分。这对于内存子系统来说更容易缓存。这与 CPU 完全相同的原理——本地连续访问内存越多,速度就越快。
还有一个潜在的劣势:一般规则是,您应将元素与元素大小和四个字节中较大的对齐。这会导致一些浪费的空间,但好处几乎总是超过劣势。
显然,唯一受影响的是 GPU 获取顶点所需的时间。如果您是镶嵌或填充受限,则不会立即看到任何改进。

好的。现在我正在设置环境来测试它们,希望使用单个VBO能够看到一些改进,因为现在速度相当慢,我认为可能的原因之一是多个VBO。我会看看的。 - zeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接