清除OpenGL中的颜色缓冲区

时间:2013-03-25 14:08:44

标签: iphone opengl-es opengl-es-2.0

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

请原谅我,如果这是一个非常幼稚的问题,因为我对这个主题有一些菜鸟。提前谢谢。

3 个答案:

答案 0 :(得分:1)

理论上你可以把它留下来。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

来自Khronos OpenGL ES docs

  

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

     

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

     

GL_COLOR_BUFFER_BIT 表示当前为彩色书写启用的缓冲区。