從OpenGL的角度來剖析iOS的離屏渲染

什么是離屏渲染?

? ? ? 首先,相信做iOS的,對離屏渲染都不會陌生,是個老生常談的東西,那么就簡單說一下得什么是離屏渲染。要清楚的解釋離屏渲染,就得知道蘋果手機的渲染過程。簡單的描述就是,GPU通過運算,形成一幀一幀的畫面,放在幀緩沖區(qū)(FrameBuffer)中,然后,屏幕從幀緩沖器中拿到畫面,進行顯示。而離屏渲染,顧名思義,就是在內(nèi)存中另外生成了一個離屏渲染緩沖區(qū)(OffScreenBuffer),進行一系列的操作后,形成最終的畫面,再轉(zhuǎn)到幀緩沖區(qū)中,屏幕從幀緩沖器中拿到畫面,進行顯示。那為什么需要額外使用一個離屏渲染緩沖區(qū)呢?在離屏渲染緩沖區(qū)中進行的一系列的操作又是什么呢?讓我們從OpenGL的角度來回答這兩個問題。

為啥會產(chǎn)生離屏渲染?

? ? 我們先可以給出答案:就是需要離屏渲染的某一幀畫面,不能一次性的渲染成功,需要渲染2次或多次,就是觸發(fā)離屏渲染。以下面的圖為例


在屏幕上展示上述效果(在一個圖層上)

? ? ? ?在上圖中,需要在一個圖層上,顯示3個矩形的疊加效果,GPU在渲染時,是無法將成像效果一次性渲染成功的,需要先渲染最底層的橘色矩形,產(chǎn)生的中間幀就放入了離屏渲染緩沖區(qū),再渲染藍色矩形,產(chǎn)生的中間幀也放入了離屏渲染緩沖區(qū),再渲染綠色的矩形,同上,產(chǎn)生的中間幀也放入了離屏渲染緩沖區(qū),這就產(chǎn)生了離屏渲染。上文中描述的一些操作,就是將產(chǎn)生的這幾個中間幀,合成計算,形成最終成像的幀,先放進離屏渲染緩沖區(qū),再放入幀緩沖區(qū),然后展示。那跟OpenGL有啥關(guān)系呢?

OpenGL,只是一個通用的名稱,事實上,蘋果基于OpenGL,先是做了OpenGL ES,然后又開發(fā)了metal,都是渲染的框架。上述產(chǎn)生幀的過程,實際上就是OpenGL的工作。他給我們提供了一個平臺,可以通過ELSL語言,來調(diào)度GPU,繪制我們想要的畫面。如果想看OpenGL的知識,可以看我OpenGL的其他文章。

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

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