我听说更少的绘图调用=更快隐含的教训是将尽可能多的顶点数据打包到尽可能少的数组中,以尽量减少绘图调用的数量。
我正在考虑在OpenGL之上编写一个渲染框架,将所有顶点数据打包成少量数组,并在几个绘图调用中绘制整个场景。
我的问题是,如果在一次调用中做大量的绘图,这实际上会更快?
我也听说过,如果你试图在一次调用中绘制太大的顶点数组,它会溢出缓存,而不是真正更快。
这篇文章对你很有帮助:http://www.nvidia.de/docs/IO/8230/BatchBatchBatch.pdf
恕我直言,你最好针对状态变化进行优化。例如,尽量减少切换着色器或纹理等的次数。这些都是"真正"昂贵的操作。
但是关于你的问题。从一个大的顶点缓冲区中渲染一定数量的顶点(以我的经验)总是比从多个小的顶点缓冲区中渲染更快。
我不确定"溢出缓存"的事情。据我所知,顶点获取单元直接从GPU内存中获取顶点(好吧,有一个顶点缓存,但它只存储16个顶点)。唯一可能出现的溢出是VRAM耗尽,此时您将面临更大的问题。
大顶点缓冲区的唯一另一个问题是,驱动程序在内存中移动它们时会遇到麻烦。如果你的顶点缓冲区是静态的,这不是问题,但是当你"在飞行中"改变数据时,你可能会看到一些较差的性能。