- On-Screen Rendering
意為當(dāng)前屏幕渲染哥谷,指的是GPU的渲染操作是在當(dāng)前用于顯示的屏幕緩沖區(qū)中進(jìn)行判沟。
Off-Screen Rendering
離屏渲染蒿辙,指的是GPU在當(dāng)前屏幕緩沖區(qū)以為新開辟一個緩沖區(qū)進(jìn)行渲染操作皱碘。
在使用圓角铣口、陰影和遮罩等視圖功能的時候萎庭,圖層屬性的混合體被指定為在未預(yù)合成之前不能直接在屏幕中繪制,所有就需要在屏幕外的上下文中渲染褪尝,即離屏渲染玖绿。
離屏渲染之所以耗性能亏推,是因為要創(chuàng)建一個屏幕外的緩沖區(qū)学赛,然后再完成渲染。其中創(chuàng)建緩沖區(qū)和切換上下文最消耗性能吞杭,繪制不是消耗性能的主要原因盏浇。
- 界面的渲染過程
RunLoop有一個60fps的回調(diào),即每隔16.7ms繪制一次屏幕芽狗,所以view的繪制必須在這個時間內(nèi)完成绢掰,view內(nèi)容的繪制是cpu的工作,然后把繪制的內(nèi)容交給GPU渲染包括多個view的拼接(Compositing),紋理渲染(Texture)等等,最后顯示在屏幕上滴劲。
但是如果在16.7ms內(nèi)無法完成繪制谊却,就會出現(xiàn)丟幀情況,一般情況下如果幀率保持在30fps以上哑芹,界面的卡頓效果不明顯,那么就需要在33.4ms內(nèi)完成view的繪制捕透,而低于這個幀率就會產(chǎn)生卡頓效果聪姿,影響體驗。
- 渲染過程:
UIView 的layer層有一個content乙嘀,指向一塊緩存末购,即backing store。
UIView 的繪制時會調(diào)用drawRect方法虎谢,通過context將數(shù)據(jù)寫入backing store盟榴。
在 backing store 寫入完成后,通過 rending server 交給GPU 去渲染婴噩,將backing store 中的bitmap數(shù)據(jù)顯示在屏幕上擎场。
- 如何觸發(fā)離屏渲染
- 圓角(maskToBounds = YES)單獨(dú)設(shè)置一項不會觸發(fā)離屏渲染。
- 蒙版
- 陰影
- 光柵化
參考