我正在开发一款使用OpenGL ES在屏幕上绘制图形的iPhone应用程序。随着每个新框架我绘制到整个屏幕,这带给我我的问题。是否有必要调用glClear来清除每帧的颜色缓冲区,或者我可以用新数据覆盖它? glClear函数目前占帧时间的9.9%,所以如果我能摆脱它,它将提供一个很好的提升。
请原谅我,如果这是一个非常幼稚的问题,因为我对这个主题有一些菜鸟。提前谢谢。
答案 0 :(得分:1)
理论上你可以把它留下来。
但是如果你没有清除颜色缓冲区,之前绘制的数据将保留在屏幕上。 这限制了使用非修改数据的应用程序。
答案 1 :(得分:1)
通常(制作3D游戏时)你不仅仅清除颜色缓冲区,而是清除深度缓冲区,并使用深度测试来确保绘制最接近相机的东西。因此,清除深度缓冲区很重要,否则只会重绘Z值低于前一帧的像素。在绘制透明的东西时,不清除颜色缓冲区也会有问题。
如果您正在制作2D应用程序并自己管理绘图顺序(首先绘制距离相机最远的东西,然后是更接近a.k.a. painters算法)那么您可以省略清晰的调用。有一点需要注意的是,使用这样的算法你会遇到另一个问题 - 透支,即比必要时更频繁地绘制相同的像素。
答案 2 :(得分:1)
如果你有一个不需要重新绘制的静态场景,那么你可以跳过调用glClear()
颜色缓冲区。
glClear 将窗口的位平面区域设置为先前由 glClearColor 选择的值。
glClear 采用一个参数来指示要清除哪个缓冲区。
GL_COLOR_BUFFER_BIT 表示当前为彩色书写启用的缓冲区。