目前,在我的渲染引擎中,每个网格数据都有一个VBO (1个VBO用于顶点,1个VBO用于法线,1个VBO用于纹理坐标,1个VBO用于切线,1个VBO用于双切线),所有这些数据都与VAO绑定在一起。
我现在正在考虑更改系统,以保存包含所有网格数据(顶点、法线等)的单个VBO。但是我能从中得到多大的好处呢?说到速度和效用(因为如果我的网格没有纹理,我可能没有所有的数据,只提供顶点和法线)。
发布于 2016-05-17 20:40:20
您将寻求减少整体内存带宽。如果buffer对象包含交错在一起的所有属性,则意味着整个数组对象只引用内存的一个连续部分。这对于存储器子系统来说更容易高速缓存。这与CPU的原理完全相同--本地连续内存访问越多,速度就可能越快。
还有一个潜在的缺点:一般规则是,您应该将元素与元素大小和四个字节中较大的那个对齐。这导致了一些浪费的空间。但好处几乎总是大于坏处。
显然,唯一会受到影响的是GPU获取顶点所花费的时间。如果你是镶嵌或填充绑定,你不会立即看到任何改进。
https://stackoverflow.com/questions/37276090
复制相似问题