最近學(xué)習(xí)了圖像渲染方面的知識(shí)埂息,寫一下自己對(duì)于離屏渲染的理解版述。
造成離屏渲染的原因有很多:
設(shè)置CALayer的cornerRadius几蜻,edgeAntialiasingMask,allowsEdgeAntialiasing屬性
把CALayer的maskToBounds設(shè)為YES?
設(shè)置CALayer的shadow屬性
設(shè)置CALayer的mask屬性
把CALayer的allowsGroupOpacity屬性設(shè)為YES而且opacity小于1
…...等
我們接觸到最多需要離屏渲染的地方大都是在處理圖片圓角的時(shí)候肮雨,很多人都知道使用maskToBounds會(huì)造成離屏渲染遵堵。但是并沒要告訴我們?yōu)槭裁磿?huì)造成離屏渲染,離屏渲染為什么會(huì)影響性能。
1.離屏渲染是什么
我們看到的屏幕中的圖像都是由GPU(Core Animation)和CPU(Core Graphics)渲染出來(lái)了陌宿,GPU主要負(fù)責(zé)圖像渲染操作锡足;CPU負(fù)責(zé)對(duì)象創(chuàng)建布局,然后讀取渲染數(shù)據(jù)顯示在屏幕上壳坪。
在我們看到到圖像之前舱污,系統(tǒng)首先會(huì)在當(dāng)前的上下文(context)中創(chuàng)建一個(gè)緩沖區(qū):幀緩沖區(qū)。在幀緩沖區(qū)中經(jīng)過(guò)一系列渲染操作弥虐,最后將渲染后的結(jié)果交給CPU顯示在當(dāng)前屏幕上。
當(dāng)我們想創(chuàng)建一個(gè)新的幀緩沖區(qū)進(jìn)行圖形渲染時(shí)媚赖,需要在屏幕之外的幀緩沖區(qū)中進(jìn)行操作霜瘪,這就形成了離屏渲染。所以離屏渲染的核心原因其實(shí)是為了創(chuàng)建新幀緩沖區(qū)進(jìn)行圖形繪制惧磺。
2.離屏渲為什么會(huì)影響性能
當(dāng)需要離屏渲染時(shí)颖对,系統(tǒng)首先要它分配一個(gè)內(nèi)存空間,創(chuàng)建一個(gè)新的上下文磨隘。系統(tǒng)需要從當(dāng)前的屏幕的上下文切換到我們新建的上下文缤底,然后在創(chuàng)建的幀緩沖區(qū)上來(lái)進(jìn)行繪制,繪制完成以后番捂,為了將幀緩沖區(qū)的內(nèi)容顯示到屏幕中个唧,又需要切換到屏幕的上下文中。
造成性能影響的主要原因就是創(chuàng)建幀緩沖區(qū)和進(jìn)行上下文切換设预。
以上就是我對(duì)于造成離屏渲染原因和離屏渲染影響性能的理解徙歼。
這里對(duì)于什么是上下文切換,上下文切換又是怎么影響性能的鳖枕,并沒詳細(xì)說(shuō)明魄梯,這里還需要去查閱相關(guān)資料來(lái)理解。