什么是離屏渲染祝蝠?
? ? ? 首先,相信做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的其他文章短蜕。