may 6th, 2015
opengl中,gpu螢幕渲染有以下兩種方式:
意為當前螢幕渲染,指的是gpu的渲染操作是在當前用於顯示的螢幕緩衝區中進行。
意為離屏渲染,指的是gpu在當前螢幕緩衝區以外新開闢乙個緩衝區進行渲染操作。
相比於當前螢幕渲染,離屏渲染的代價是很高的,主要體現在兩個方面:
要想進行離屏渲染,首先要建立乙個新的緩衝區。
離屏渲染的整個過程,需要多次切換上下文環境:先是從當前螢幕(on-screen)切換到離屏(off-screen);等到離屏渲染結束以後,將離屏緩衝區的渲染結果顯示到螢幕上有需要將上下文環境從離屏切換到當前螢幕。而上下文環境的切換是要付出很大代價的。
設定了以下屬性時,都會觸發離屏繪製:
需要注意的是,如果shouldrasterize被設定成yes,在觸發離屏繪製的同時,會將光柵化後的內容快取起來,如果對應的layer及其sublayers沒有發生改變,在下一幀的時候可以直接復用。這將在很大程度上提公升渲染效能。
而其它屬性如果是開啟的,就不會有快取,離屏繪製會在每一幀都發生。
按照之前的說法,如果將不在gpu的當前螢幕緩衝區中進行的渲染都稱為離屏渲染,那麼就還有另一種特殊的「離屏渲染」方式:cpu渲染
。
instruments的core animation工具中有幾個和離屏渲染相關的檢查選項:
開啟後會把那些需要離屏渲染的圖層高亮成黃色,這就意味著黃色圖層可能存在效能問題。
如果shouldrasterize被設定成yes,對應的渲染結果會被快取,如果圖層是綠色,就表示這些快取被復用;如果是紅色就表示快取會被重複建立,這就表示該處存在效能問題了。
現在擺在我們面前得有三個選擇:當前螢幕渲染、離屏渲染、cpu渲染,該用哪個呢?這需要根據具體的使用場景來決定。
鑑於離屏渲染、cpu渲染可能帶來的效能問題,一般情況下,我們要盡量使用當前螢幕渲染。
由於gpu的浮點運算能力比cpu強,cpu渲染的效率可能不如離屏渲染;但如果僅僅是實現乙個簡單的效果,直接使用cpu渲染的效率又可能比離屏渲染好,畢竟離屏渲染要涉及到緩衝區建立和上下文切換等耗時操作。
總之,具體的選擇應該由效能測試結果來決定。
在趙岩同學的點撥下才理解了離屏渲染的概念,在此表示感謝!
如理解有誤還請大家指出。
離屏渲染學習筆記
opengl中,gpu螢幕渲染有以下兩種方式 意為當前螢幕渲染,指的是gpu的渲染操作是在當前用於顯示的螢幕緩衝區中進行。意為離屏渲染,指的是gpu在當前螢幕緩衝區以外新開闢乙個緩衝區進行渲染操作。相比於當前螢幕渲染,離屏渲染的代價是很高的,主要體現在兩個方面 要想進行離屏渲染,首先要建立乙個新的緩...
iOS 筆記 離屏渲染
gpu渲染機制 特殊的離屏渲染 如果將不在gpu的當前螢幕緩衝區中進行的渲染都稱為離屏渲染,那麼就還有另一種特殊的 離屏渲染 方式 cpu渲染。完成,渲染得到的bitmap最後再交由gpu用於顯示。備註 coregraphic通常是執行緒安全的,所以可以進行非同步繪製,顯示的時候再放回主線程,乙個簡...
iOS之離屏渲染
on screen rendering 意為當前螢幕渲染,指的是gpu的渲染操作是在當前用於顯示的螢幕緩衝區中進行。off screen rendering 意為離屏渲染,指的是gpu在當前螢幕緩衝區以外新開闢乙個緩衝區進行渲染操作。特殊的離屏渲染 如果將不在gpu的當前螢幕緩衝區中進行的渲染都稱為...