在OpenGL中为顶点、uvs和法线使用一个缓冲区是否比使用三个缓冲区性能更好

Does using one buffer for vertices, uvs and normals in OpenGL perform better than using three?

本文关键字:缓冲区 是否 OpenGL 一个 更好 性能 三个 顶点 uvs      更新时间:2023-10-16

我发现将这些元素保存在单独的缓冲区中更干净、更容易,但我想知道将它们全部保存在一个大缓冲区中是否会更好。

使用多个缓冲区的优点是,可以很容易地为某些特殊渲染禁用一个缓冲区(例如,仅深度不需要法线或纹理坐标)。

但是,将所有属性交错存储在一个数组中可以在渲染时提供更好的缓存位置。

我们谈论的是数组结构或结构数组及其效率。在大多数情况下,结构数组效率更高,因为它可以更好地利用处理器缓存,但这是假设您将按数据在内存中的顺序访问数据。

但是,如果某些数据以与另一个不同的速率刷新,那么将它们放在不同的缓冲区中会有好处,这样您就可以只更新需要更新的数据。

根据OpenGL wiki,

如果使用单独的VBO,您不会损失太多性能。会的大约5%,但您的测试可能会显示出其他情况。

我不知道这个语句是否只用于动态数据,但在我的引擎中,我使用了单独的VBO。