iOS 离屏渲染分析

On-Screen Rendering:当前屏幕渲染,CPU、GPU 不停地将内容渲染完成放入frame buffer帧缓冲区中,显示屏幕从 frame buffer中获取内容显示。

iOS 离屏渲染分析_第1张图片

Off-Screen Rendering:离屏渲染,先创建离屏渲染帧缓冲区offscreen frame buffer,然后逐一将内容渲染放入其中,完成后对离屏渲染缓冲区做阴影叠加、裁剪等操作,最后将结果拷贝或切换到帧缓冲区frame buffer中,显示屏幕从 frame buffer中获取内容显示。

iOS 离屏渲染分析_第2张图片

为什么需要

那么为什么需要离屏渲染帧缓冲区offscreen frame buffer呢?我们先来了解下“画家算法”。

画家算法,也叫作优先填充,它是三维计算机图形学中处理可见性问题的一种解决方法(三维场景投影到二维平面)。如下图,画家算法首先将场景中的多边形根据深度进行排序,然后按照由远到近的顺序进行描绘,这种方法通常会将不可见的部分覆盖,这样就可以解决可见性问题。

iOS 离屏渲染分析_第3张图片

对于有前后依赖的图层(如阴影叠加、裁剪等),通过由远到近的图层叠加算法是无法实现的,我们需要先申请一个临时缓冲区,所有图层按照画家算法,由远到近在临时缓冲区渲染,渲染完成后,再对这个临时缓冲区做最后的全局操作(如阴影叠加、裁剪等),最后再把临时缓冲区拷贝或切换到当前的缓冲区上,交给显示器显示。

总结一下,使用离屏渲染大概是因为以下原因:

  1. 需要实现特殊的效果,比如说全局叠加、裁剪等等,需要用额外的帧缓冲区offscreen frame buffer保存中间状态。

  2. 出于效率目的,针对不会经常变更的图层,可以缓存到offscreen frame buffer,供下次刷新使用。

什么时候出现

Masking

最常见的情形就是使用了Masking

你可能感兴趣的:(iOS,ios,objective-c)