2014-08-31 49 views

回答

3

:通常,您应该总是尽可能减少CPU与GPU之间传输的数据量,以最大限度地保持性能。

因此,应该避免使用glBufferSubData()更新整个顶点缓冲区,并尽可能使用glTranslate()和glLoadMatrix()(不推荐使用)或着色器等变换。

但是,既然您已经在使用VBOs,我会推荐使用着色器使用着色器统一变量和glUniformMatrix()进行转换。

:分离顶点,法线和纹理坐标或将它们组合在一个VBO中取决于您。在大多数情况下,我将它们合并在一起,因为它只生成一个句柄,而我只需要一次glBufferData()调用。但是如果只有一个部分像纹理坐标更新并且其他部分保持原样,那么分离会更好,因为您也可以单独更新它们。

更高级: 如果您使用的是缓冲隔行扫描,那么显然必须将它们组合起来。 有时使用缓冲隔行扫描可能会比没有隔行扫描更快,因为单个顶点所需的数据可以保持在一起,并且可以使用缓存。但是你必须尝试一下对性能有什么影响(如果有的话),因为它很大程度上取决于你使用的硬件。

+0

谢谢。我将学习如何使用着色器,而不是使用已弃用的函数和'glBufferSubData',因为无论如何我都需要它。另外分隔VBO可能是最好的想法,因为有时只有顶点或纹理坐标需要更新。 – user2513924 2014-08-31 16:29:59

+0

我会首先探讨在着色器中是否可以这样做,或者先在内存中准备好变体缓冲区:) – Grimmy 2014-09-01 13:35:52

相关问题