Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL单VBO与多VBO_C++_Opengl_Rendering - Fatal编程技术网

C++ OpenGL单VBO与多VBO

C++ OpenGL单VBO与多VBO,c++,opengl,rendering,C++,Opengl,Rendering,目前,在我的渲染引擎中,每个网格数据都有一个VBO(1个VBO用于顶点,1个VBO用于法线,1个VBO用于纹理坐标,1个VBO用于切线,1个VBO用于双切线),所有这些数据都用VAO绑定在一起 我现在正在考虑将系统更改为包含所有网格数据(顶点、法线等)的单个VBO,但我将如何从中获益?说到速度和实用性(因为如果我的网格没有纹理,我可能没有所有的数据,只提供顶点和法线)。您将寻求减少总体内存带宽。如果缓冲区对象包含交织在一起的所有属性,则意味着整个数组对象只引用内存中的一个连续部分。这对于内存子系

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


我现在正在考虑将系统更改为包含所有网格数据(顶点、法线等)的单个VBO,但我将如何从中获益?说到速度和实用性(因为如果我的网格没有纹理,我可能没有所有的数据,只提供顶点和法线)。

您将寻求减少总体内存带宽。如果缓冲区对象包含交织在一起的所有属性,则意味着整个数组对象只引用内存中的一个连续部分。这对于内存子系统来说更容易缓存。这与CPU的原理完全相同——本地连续内存访问越多,访问速度可能越快

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


显然,唯一会受到影响的是GPU获取顶点所需的时间。如果您正在进行细分或填充绑定,则不会立即看到任何改进。

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