从OpenGL的角度来剖析iOS的离屏渲染

什么是离屏渲染?

      首先,相信做iOS的,对离屏渲染都不会陌生,是个老生常谈的东西,那么就简单说一下得什么是离屏渲染。要清楚的解释离屏渲染,就得知道苹果手机的渲染过程。简单的描述就是,GPU通过运算,形成一帧一帧的画面,放在帧缓冲区(FrameBuffer)中,然后,屏幕从帧缓冲器中拿到画面,进行显示。而离屏渲染,顾名思义,就是在内存中另外生成了一个离屏渲染缓冲区(OffScreenBuffer),进行一系列的操作后,形成最终的画面,再转到帧缓冲区中,屏幕从帧缓冲器中拿到画面,进行显示。那为什么需要额外使用一个离屏渲染缓冲区呢?在离屏渲染缓冲区中进行的一系列的操作又是什么呢?让我们从OpenGL的角度来回答这两个问题。

为啥会产生离屏渲染?

    我们先可以给出答案:就是需要离屏渲染的某一帧画面,不能一次性的渲染成功,需要渲染2次或多次,就是触发离屏渲染。以下面的图为例


在屏幕上展示上述效果(在一个图层上)

       在上图中,需要在一个图层上,显示3个矩形的叠加效果,GPU在渲染时,是无法将成像效果一次性渲染成功的,需要先渲染最底层的橘色矩形,产生的中间帧就放入了离屏渲染缓冲区,再渲染蓝色矩形,产生的中间帧也放入了离屏渲染缓冲区,再渲染绿色的矩形,同上,产生的中间帧也放入了离屏渲染缓冲区,这就产生了离屏渲染。上文中描述的一些操作,就是将产生的这几个中间帧,合成计算,形成最终成像的帧,先放进离屏渲染缓冲区,再放入帧缓冲区,然后展示。那跟OpenGL有啥关系呢?

OpenGL,只是一个通用的名称,事实上,苹果基于OpenGL,先是做了OpenGL ES,然后又开发了metal,都是渲染的框架。上述产生帧的过程,实际上就是OpenGL的工作。他给我们提供了一个平台,可以通过ELSL语言,来调度GPU,绘制我们想要的画面。如果想看OpenGL的知识,可以看我OpenGL的其他文章。

你可能感兴趣的:(从OpenGL的角度来剖析iOS的离屏渲染)