iOS開發,初探離屏渲染

2021-08-10 19:28:48 字數 1140 閱讀 7239

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渲染的效率又可能比離屏渲染好,畢竟離屏渲染要涉及到緩衝區建立和上下文切換等耗時操作。

總之,具體的選擇應該由效能測試結果來決定。

參考推酷上的一篇文章:

iOS開發,初探離屏渲染

opengl中,gpu螢幕渲染有以下兩種方式 意為當前螢幕渲染,指的是gpu的渲染操作是在當前用於顯示的螢幕緩衝區中進行。意為離屏渲染,指的是gpu在當前螢幕緩衝區以外新開闢乙個緩衝區進行渲染操作。相比於當前螢幕渲染,離屏渲染的代價是很高的,主要體現在兩個方面 要想進行離屏渲染,首先要建立乙個新的緩...

iOS之離屏渲染

on screen rendering 意為當前螢幕渲染,指的是gpu的渲染操作是在當前用於顯示的螢幕緩衝區中進行。off screen rendering 意為離屏渲染,指的是gpu在當前螢幕緩衝區以外新開闢乙個緩衝區進行渲染操作。特殊的離屏渲染 如果將不在gpu的當前螢幕緩衝區中進行的渲染都稱為...

iOS 離屏渲染研究

gpu渲染機制 gpu螢幕渲染有以下兩種方式 離屏渲染的觸發方式 設定了以下屬性時,都會觸發離屏繪製 其中shouldrasterize 光柵化 是比較特別的一種 光柵化概念 將圖轉化為乙個個柵格組成的圖象。光柵化特點 每個元素對應幀緩衝區中的一畫素。shouldrasterize yes在其他屬性...