Iphone OpenGL中颜色缓冲区的清除

Iphone OpenGL中颜色缓冲区的清除,iphone,opengl-es,opengl-es-2.0,Iphone,Opengl Es,Opengl Es 2.0,我正在开发一个iPhone应用程序,它使用OpenGL ES在屏幕上绘制图形。随着每一个新的画面我都会画到整个屏幕,这就引出了我的问题。是否需要调用glClear来清除每个帧的颜色缓冲区,或者我可以用新数据覆盖它?glClear函数目前占帧时间的9.9%,因此如果我能去掉它,它将提供一个很好的提升 如果这是一个非常幼稚的问题,请原谅我,因为我在这个话题上有点像个傻瓜。提前谢谢。理论上你可以省去它 但如果不清除颜色缓冲区,先前绘制的数据将保留在屏幕上。 这将应用程序限制在不修改数据的情况下。理论上

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


如果这是一个非常幼稚的问题,请原谅我,因为我在这个话题上有点像个傻瓜。提前谢谢。

理论上你可以省去它

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

理论上,您可以忽略它

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

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

如果您正在制作2D应用程序并自行管理绘图顺序(首先绘制离相机最远的东西,然后绘制离相机最近的东西,即a.k.a.painters算法),则可以省去清除调用。需要注意的一点是,使用这种算法,您会遇到另一个问题-过度绘制,即绘制相同像素的频率超过了必要的频率。

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


如果您正在制作2D应用程序并自行管理绘图顺序(首先绘制离相机最远的东西,然后绘制离相机最近的东西,即a.k.a.painters算法),则可以省去清除调用。需要注意的一点是,使用这种算法,您还存在另一个问题-过度绘制,即绘制相同像素的频率超过了需要的频率。

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

从:

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

glClear采用单个参数,指示要清除的缓冲区

GL\u COLOR\u BUFFER\u位表示当前为颜色写入启用的缓冲区


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

从:

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

glClear采用单个参数,指示要清除的缓冲区

GL\u COLOR\u BUFFER\u位表示当前为颜色写入启用的缓冲区


当然,在这种情况下,也可以跳过对所有绘图函数的调用。但是,由于这个问题专门询问颜色缓冲区,我不想用太多额外的信息来压倒:)实际上,在这种情况下,也可以跳过对所有绘图函数的调用。当然。但是,由于这个问题专门询问颜色缓冲区,我不想用太多额外的信息来压倒:)我不一定相信9.9%的帧时间测量。由于iOS GPU的延迟特性,很难以合理的方式分析这样的特定调用。很有可能,
glClear()
并没有占用那么多时间。我不一定相信9.9%的帧时间测量。由于iOS GPU的延迟特性,很难以合理的方式分析这样的特定调用。很有可能,
glClear()
并没有花那么多时间。