C++ OpenGL单VBO与多VBO
目前,在我的渲染引擎中,每个网格数据都有一个VBO(1个VBO用于顶点,1个VBO用于法线,1个VBO用于纹理坐标,1个VBO用于切线,1个VBO用于双切线),所有这些数据都用VAO绑定在一起C++ OpenGL单VBO与多VBO,c++,opengl,rendering,C++,Opengl,Rendering,目前,在我的渲染引擎中,每个网格数据都有一个VBO(1个VBO用于顶点,1个VBO用于法线,1个VBO用于纹理坐标,1个VBO用于切线,1个VBO用于双切线),所有这些数据都用VAO绑定在一起 我现在正在考虑将系统更改为包含所有网格数据(顶点、法线等)的单个VBO,但我将如何从中获益?说到速度和实用性(因为如果我的网格没有纹理,我可能没有所有的数据,只提供顶点和法线)。您将寻求减少总体内存带宽。如果缓冲区对象包含交织在一起的所有属性,则意味着整个数组对象只引用内存中的一个连续部分。这对于内存子系
我现在正在考虑将系统更改为包含所有网格数据(顶点、法线等)的单个VBO,但我将如何从中获益?说到速度和实用性(因为如果我的网格没有纹理,我可能没有所有的数据,只提供顶点和法线)。您将寻求减少总体内存带宽。如果缓冲区对象包含交织在一起的所有属性,则意味着整个数组对象只引用内存中的一个连续部分。这对于内存子系统来说更容易缓存。这与CPU的原理完全相同——本地连续内存访问越多,访问速度可能越快 还有一个潜在的危害:一般规则是,您应该将元素与元素大小和四个字节中较大的一个对齐。这导致了一些空间的浪费。但好处几乎总是大于坏处
显然,唯一会受到影响的是GPU获取顶点所需的时间。如果您正在进行细分或填充绑定,则不会立即看到任何改进。好的。现在我正在设置环境来测试它们,我希望使用单个VBO可以看到一些改进,因为现在速度非常慢,我认为原因之一是多个VBO。我看看