离屏渲染(offscreen-rendering)是在当前显示屏幕之外开辟另外一个缓冲区进行图形渲染的过程。这个过程首先会创建一个当前屏幕缓冲区以外的新缓存区,屏幕渲染会有一个上下文环境,离屏渲染的过程就是切换上下文环境,从当前屏幕切换到离屏,等结束以后又将上下文切换回来。因此,离屏渲染需要更长的时间来处理,时间一长可能造成掉帧。此外,离屏缓存区本身就需要额外的空间,大量的离屏渲染可能造成内存过大的压力。
离屏渲染可以在GPU中也可以在CPU中进行。在CPU中,通常是通过重写drawRect并使用CoreGraphics进行绘制操作。而在GPU中,离屏渲染主要发生在当各种图层效果(如圆角、阴影、遮罩等)的混合体在未预合成之前不能在屏幕上直接显示时,此时就需要在屏幕外开辟一片缓存区进行渲染。
离屏渲染产生的原因主要有两种:一是系统触发,当图层经过着色管道后产生的结果需要与另一个图层经过管道得到的结果再次进行计算、混合后产生特殊效果才能渲染到屏幕上时,GPU就需要额外开辟一个缓冲区保存这两次中间结果,这个缓冲区就称为离屏缓冲区;二是手动触发,通过设置layer的shouldRasterize为YES来触发离屏渲染,这样可以将一个layer反复利用,从而达到提升效率的优势。
请注意,虽然离屏渲染在某些情况下可以提高渲染效率,但由于其需要额外的内存和计算资源,因此在使用时需要谨慎考虑其对性能的影响。