離屏渲染


一、渲染機制

CPU將計算好的需要顯示的內容提交給GPU,GPU渲染完成后將渲染結果放入幀緩沖區,隨后視頻控制器會按照Vsync(垂直脈沖)信號逐行讀取幀緩沖區的數據,經過可能的數模轉換傳遞給顯示器進行顯示。

 

image.png

 

二、GPU屏幕渲染有兩種方式

離屏渲染Off-Screen Rendering 指的是GPU在當前屏幕緩沖區以外新開辟一個緩沖區進行渲染操作。離屏渲染結束后,再從離屏切到當前屏幕
當前屏幕渲染On-Screen Rendering ,指的是GPU的渲染操作是在當前用於顯示的屏幕緩沖區中進行。

 

三、以下方式會觸發離屏幕渲染

1.使用系統提供的圓角效果也會觸發離屏渲染.

(masksToBounds = true&&cornerRadius>0才會引發離屏渲染)
 
2.重寫drawRect
 
3.layer.shadow
(Shawdow 可以通過指定路徑來取消離屏渲染)
 
4.layer.mask
(Mask 效果無法取消離屏渲染,使用混合圖層的方法來模擬 mask 效果,性能各方面都是和無效果持平。)
 
5.layer.allowsGroupOpacity
(GroupOpacity 是指 CALayer 的allowsGroupOpacity屬性,UIView 的alpha屬性等同於 CALayer opacity屬性,
開啟離屏渲染的條件是:layer.opacity != 1.0並且有子 layer 或者背景圖。)
layer.allowsEdgeAntialiasing
(該屬性用於消除鋸齒,離屏渲染條件旋轉視圖並且設置layer.allowsEdgeAntialiasing = true)
 
 
6.layer.shouldRasterize
(光柵化會觸發離屏渲染,開啟 Rasterization=true 后,GPU 只合成一次內容,然后復用合成的結果;合成的內容超過 100ms 沒有使用會從緩存里移除,在更新內容時還會產生更多的離屏渲染。對於內容不發生變化的視圖,原本拖后腿的離屏渲染就成為了助力)
 

四、如何檢測離屏渲染

1.模擬器

模擬器在工作欄上面的Debug -> Color Off-Screen Rendered

2.真機

真機在工作欄上面的Debug ->  View Debugging -> Rendering -> Color Off-Screen Rendered Yellow




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM