離屏渲染

1.什么是離屏渲染?

2.離屏渲染會引起什么問題?

3.什么情況下會發(fā)生離屏渲染?



1.什么是離屏渲染

? ? ? ? 離屏渲染是GPU在當前幀緩沖(frame buffer)區(qū)之外新開辟了一塊內存區(qū),將渲染結果先暫存到此區(qū)域內,渲染完成后在寫入當前的frame buffer。

2.離屏渲染會引起什么問題?

? ? ? ? 離屏渲染會降低App的性能,蘋果手機屏幕刷新率是每秒60次,每一幀渲染的時間是16.67ms,也就是說在這16.67ms內要完成一幀的渲染,如果完不成就會掉幀,我們看到的屏幕的現(xiàn)象就是卡頓,而離屏渲染需要另外開辟內存,并且GPU會從當前frame buffer切換到offscreen buffer,offscreen buffer渲染結束后再切換回來將結果顯示到屏幕上,如果cell上有離屏渲染,那么滑動的時候每一幀都會切換,每秒要切換60次,可想而知內存消耗比正常渲染大多少。

3.什么情況下會發(fā)生離屏渲染?

? ? ? ? 1.設置圓角:這種情況不是必然會發(fā)生離屏渲染的,如果單純的設置UIView的layer.cornerRadius+layer.masksToBounds是不會發(fā)生離屏渲染的,UIImageView如果有image,UIButton有背景圖時,設置圓角并且圖片也需要切圓角時就會發(fā)生離屏渲染。

? ? ? ? 2.設置shadow

? ? ? ? 3.設置group opacity

? ? ? ? 4.mask

? ? ? ? 5.UIBlurEffect

總結:發(fā)生離屏渲染是GPU在當前屏幕無法渲染完成,只能另外開辟緩沖區(qū)來暫存渲染結果,最后在返回frame buffer 顯示。GPU為什么無法在frame buffer 渲染呢?因為GPU渲染類似畫家畫畫,一層一層渲染,先渲染底層,再渲染上層,并且每渲染完一幀,就會把此幀數(shù)據(jù)刪除來減少緩沖區(qū)的占用,這樣如果渲染完上層后需要修改底層的內容,這時就無法獲取數(shù)據(jù),就無法完成渲染,所以才需要額外開辟緩沖區(qū)來進行組合渲染。

參考文章:https://zhuanlan.zhihu.com/p/72653360

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 一、什么是離屏渲染 有一個場景:以 鈦信 的最近聊天會話列表為例:每個cell上的頭像圖片均需要裁剪,使用如下方式...
    葉孤城1993閱讀 1,073評論 0 1
  • 離屏渲染(Offscreen rendering) 離屏渲染的定義 離屏渲染(offscreen-renderin...
    GitArtOS閱讀 762評論 0 4
  • iOS離屏渲染 離屏渲染的定義 如果要在顯示屏上顯示內容,我們至少需要一塊與屏幕像素數(shù)據(jù)量一樣大的frame bu...
    漢包包閱讀 313評論 0 0
  • 哪些操作會觸發(fā)離屏渲染? 1、光柵化,layer.shouldRasterize = YES2、遮罩,layer....
    zhouluyao閱讀 522評論 0 0
  • 一、首先讓我們什么是離屏渲染 離屏渲染就是在當前屏幕緩沖區(qū)以外,新開辟一個緩沖區(qū)進行操作。 離屏渲染出發(fā)的場景有以...
    致青春_bf42閱讀 897評論 2 8

友情鏈接更多精彩內容