大話iOS之“離屏渲染”

假設(shè)一個(gè)開(kāi)發(fā)需求,需要你把頭像圖片設(shè)置成圓形,可能你會(huì)毫不猶豫的在鍵盤(pán)上啪啪啪的敲出下面的代碼:

self.iconView.layer.cornerRadius = self.iconView.height;
self.iconView.layer.masksToBounds = YES;

告訴你很不幸的是,此時(shí)你已經(jīng)觸發(fā)了離屏渲染

GPU屏幕渲染的方式有兩種

  1. <a name="fenced-code-block"> On-Screen Rendering(當(dāng)前屏幕的渲染)</a>

    GPU的渲染操作是在當(dāng)前用于顯示的屏幕緩沖區(qū)進(jìn)行。

  2. <a name="fenced-code-block"> Off-Screen Rendering(離屏渲染)</a>

    當(dāng)使用到圓角,陰影,遮罩的時(shí)候,圖層屬性的混合體被指定為在沒(méi)有預(yù)合成之前不能直接在屏幕中繪制,GPU在當(dāng)前的屏幕緩沖區(qū)之外開(kāi)辟一個(gè)緩沖區(qū),渲染到紋理,最后將結(jié)果渲染到幀緩沖區(qū)。這會(huì)導(dǎo)致在兩個(gè)緩沖區(qū)之間進(jìn)行切換,由于離屏渲染在每一幀都會(huì)發(fā)生,所以在滾動(dòng)界面的時(shí)候,如果有大量的離屏渲染就會(huì)嚴(yán)重影響幀率。

不要小看這個(gè)上下文的切換,它對(duì)性能的影響是挺大的,所有的內(nèi)存訪問(wèn)都是比較慢的,CPU/GPU可以很輕松的完成每秒以?xún)|為單位的運(yùn)算,但是內(nèi)存只能以百萬(wàn)為單位。

還有一種比較特殊的渲染,就是CPU渲染,如果我們重寫(xiě)了drawRect方法,并且使用任何的Core Graphics的技術(shù)進(jìn)行繪制,就涉及到了CPU渲染,整個(gè)渲染過(guò)程同步完成,渲染結(jié)束得到的bitmap給GPU用來(lái)顯示。注意的是,Core Graphics通常是線程安全的,可以異步繪制,然后放到主線程進(jìn)行顯示

在蘋(píng)果公開(kāi)的資料中提到,涉及到離屏渲染的操作有:mask, shadow, cornerRadius

Instrument中的Core Animation工具有一個(gè)Color Offscreen-Rendered Yellow的選項(xiàng),它會(huì)將已經(jīng)被渲染到屏幕外緩沖區(qū)的區(qū)域標(biāo)記為黃色

Instrument 的 Color Offscreen-Rendered Yellow選項(xiàng).png
被標(biāo)記出來(lái)的離屏渲染的黃色部分.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 相比于當(dāng)前屏幕渲染,離屏渲染的代價(jià)是很高的,這也是iOS移動(dòng)端優(yōu)化的必要部分。 OpenGL中,GPU屏幕渲染有以...
    一個(gè)人在路上走下去閱讀 9,120評(píng)論 0 74
  • 繪制像素到屏幕上 answer-huang22 Mar 2014 分享文章 一個(gè)像素是如何繪制到屏幕上去的?有很多...
    阿貍旅途T恤閱讀 1,766評(píng)論 0 7
  • 卷首語(yǔ) 歡迎來(lái)到 objc.io 的第三期! 這一期都是關(guān)于視圖層的。當(dāng)然視圖層有很多方面,我們需要把它們縮小到幾...
    評(píng)評(píng)分分閱讀 1,932評(píng)論 0 18
  • 春來(lái)秋去復(fù)幾時(shí), 不覺(jué)日夜逝去多。 繁花落盡人已去, 卻道別離徒嘆息。 又是一年花開(kāi)日, 舊識(shí)相逢憶往昔。
    文慶Writer閱讀 223評(píng)論 0 1
  • 在我的筆下,那些消失的終將復(fù)活 張曉勇 許多人問(wèn)我,你為什么老是畫(huà)瀘州的老街古鎮(zhèn)?而且是殘破與廢棄了的。不好解釋?zhuān)?..
    雨人幽玄閱讀 651評(píng)論 7 20

友情鏈接更多精彩內(nèi)容