2014-09-29 165 views
0

我一直在阅读一些关于OpenGL-ES 2.0的教程,我注意到他们设置了每个60Hz帧的视口(glViewport)。设置视口每一帧都是一个好主意吗?

这样做还是仅仅是为了简化例子而做的一个好主意?

如果你这样做会有性能处罚吗?

这是针对iOS的,但其目标是可移植到其他平台。

+2

性能影响可以忽略不计。我不打算进一步检查:与glDrawArrays()相比,'glViewport()'是一个桶。 – 2014-09-29 05:14:10

回答

3

只要相对容易,我会避免任何形式的多余呼叫。在glViewport()的情况下,应该很容易只在视口的大小实际发生变化时才调用它,这通常是窗口大小的调整。

事实上,在这种情况下,它不太可能会产生可测量的差异。设置视口很可能相当便宜,所以每帧一次不应该造成伤害。无论如何,司机可能会消除多余的电话。

某些状态更改的成本高昂与平台高度相关。在特定的平台上,您可能会预计某些非常便宜的通话可能会非常昂贵。例如,有些平台将混合作为片段着色器的一部分,所以更改混合状态会导致着色器变化,这可能比您预期的要昂贵得多。

关于驾驶员是否应该检查冗余状态变化,部分哲学讨论。有些人会认为他们不应该这样做,因为额外的测试会对写好的应用程序产生一些负面的性能影响,从而避免多余的调用。但通常没有多少选择,因为有很多用作基准的写作不佳的应用程序/游戏,并且在驱动程序中检测到多余的调用可以为这些提供显着的性能提升。

相关问题