渲染优化

时间:2011-07-10 05:18:24

标签: optimization opengl rendering vertex-array

我听说减少绘图电话=更快 隐含的教训是将尽可能多的顶点数据打包到尽可能少的数组中,以最大限度地减少绘图调用的数量。

我正在考虑在OpenGL之上编写一个渲染框架,将所有顶点数据打包到少量数组中,并在几个绘图调用中绘制整个场景。

我的问题是,如果在一次调用中进行大量绘制(例如glDrawElements),这实际上是否会更快?

我也听说如果你尝试用一次调用绘制太大的顶点数组,它会溢出缓存而不是真的最快。

1 个答案:

答案 0 :(得分:4)

本文对您有用:http://www.nvidia.de/docs/IO/8230/BatchBatchBatch.pdf

恕我直言,你最好优化状态变化。即最小化您必须切换着色器或纹理等的次数。这些是“真正的”昂贵的操作。

但是关于你的问题。从大的顶点缓冲区渲染一定数量的顶点(根据我的经验)总是比从多个较小的顶点缓冲区渲染更快。

我不确定“溢出缓存”的事情。据我所知,顶点提取单元直接从GPU内存中提取顶点(嗯,有一个顶点缓存,但它只存储16个顶点的数量级)。你可能遇到的唯一溢出就是VRAM耗尽,此时你遇到了更大的问题。

大顶点缓冲区唯一的另一个问题是驱动程序在内存中移动它们会有麻烦。如果顶点缓冲区是静态的,这不是问题,但在“动态”更改数据时可能会看到性能较差。