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