有人能说出到底是什么导致多个glDrawArrays调用循环的开销,而在一个glMultiDrawArrays调用上没有状态改变吗?就像为什么
geometry
据说比一个glMultiDrawArrays调用贵吗?
答案 0 :(得分:1)
您可能是因为阅读有关“减少抽奖电话”之类的东西而相信了这一点。的确是这样:从性能的角度来看,更少的绘制调用要比更多的绘制调用好。
但是,当涉及到OpenGL时,并不是真正的“绘制调用”是问题所在。在两次绘画调用之间进行的是状态更改,这会使绘画调用变慢。如果您实际上没有将任何状态从一次抽签更改为另一次抽签,那么实际上它们很快。
现在,顺序抽奖可能不如多次抽奖快。但这是因为,每次发出绘图调用时,实现都必须问一个问题:“用户是否更改了任何渲染状态?”现在,一个好的实现可能会在每个状态更改函数中的某处设置一些位置,因此此检查可以归结为仅检查布尔值。但是每次抽奖仍然必须这样做。多次绘制只会检查一次。
但这通常是微不足道的性能差异。