每帧都设置视口是个好主意吗?

时间:2014-09-29 05:09:56

标签: ios opengl-es opengl-es-2.0

我一直在阅读OpenGL-ES 2.0的几个教程,我注意到他们设置了每个60Hz帧的视口(glViewport)。

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

如果你这样做会有性能损失吗?

目前适用于iOS,但目标是可移植到其他平台。

1 个答案:

答案 0 :(得分:4)

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

实际上,在这种情况下,它不可能产生可衡量的差异。设置视口很可能相当便宜,所以每帧执行一次不应该受到伤害。无论如何,驱动程序可能会消除冗余呼叫。

某些状态更改的成本高度依赖于平台。在特定平台上,某些您希望非常便宜的电话可能会非常昂贵。例如,某些平台会混合作为片段着色器的一部分,因此更改混合状态会导致着色器更改,这可能比您预期的要贵得多。

关于驱动程序是否应检查冗余状态更改,还有部分哲学讨论。有些人认为他们不应该,因为额外的测试会对编写良好的应用程序产生一些负面的性能影响,避免冗余调用。但通常没有多少选择,因为有很多编写得不好的应用程序/游戏用作基准测试,并且在驱动程序中检测冗余调用可以大大提高性能。