2013-03-25 239 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