2013-03-25 189 views
0

我正在开发一个使用OpenGL ES在屏幕上绘制图形的iPhone应用程序。随着每一个新的画面我画到整个屏幕,这使我想到我的问题。是否有必要调用glClear来清除每帧的颜色缓冲区,或者我可以用新数据覆盖它? glClear函数目前是9.9%的帧时间,所以如果我能摆脱它,它会提供一个很好的提升。在OpenGL中清除颜色缓冲区

原谅我,如果这是一个很幼稚的问题,因为我就这个话题小白的东西。提前致谢。

+0

我不一定会相信,9.9%的帧时间测量。由于iOS GPU的延期性质,以合理的方式分析这类特定的调用非常困难。赔率是,“glClear()”并没有真正花费那么多时间。 – 2013-03-25 15:29:29

回答

1

如果你有一个静态场景,这并不需要重新绘制,那么你可以跳过颜色缓冲调用glClear()

Khronos OpenGL ES docs

glClear设置先前由glClearColor选择的窗口值的位平面区域。

glClear采用一个参数指示要清除哪个缓冲区。

GL_COLOR_BUFFER_BIT指示当前启用彩色写入的缓冲区。

+0

其实,人们可以跳过所有绘图函数的调用以及在这种情况下。 – scones 2013-03-25 14:40:42

+0

当然。但是因为这个问题特别提到了颜色缓冲区,所以我不想用太多额外的信息来压倒:) – 2013-03-25 14:44:30

1

从理论上讲,你可以不用它了。

但是,如果您不清除颜色缓冲区,先前绘制的数据将保留在屏幕上。 这使用非修改的数据限制应用程序。

1

通常你不明确只是颜色缓冲区,但深度缓冲,以及和使用深度测试,以确保这是最接近于相机的东西绘制(制作3D游戏时)。因此,清除深度缓冲区非常重要,否则只有Z值低于前一帧的像素才会重绘。绘制透明的东西时,不清除颜色缓冲区也是有问题的。

如果您正在制作2D应用程序并自己管理绘图顺序(首先绘制距离相机最远的东西,然后更接近a.k.a.画家算法),那么您可以省略清晰的调用。有一件事要注意的是,用这样的算法,你有另一个问题 - 透支即即使绘制相同的像素更多的时候不必要的。

+0

另外检查[这个答案](http://stackoverflow.com/questions/2538662/how-does-glclear-improve-performance) – LukaCiko 2013-03-25 14:36:17