什么叫做离屏渲染
正常情况下,渲染数据存放在帧缓冲区(Frame Buffer)中,但是在特定条件下,需要先将渲染数据先放在离屏缓冲区(Offscreen Buffer)中,在将多个图层的渲染数据叠加计算后,再传入帧缓冲区进行渲染,这种情况就叫做离屏渲染。

正常渲染流程
APP中的数据经过CPU计算和GPU渲染后,将结果存放在帧缓冲区,利用视频控制器从帧缓冲区中取出,并显示到屏幕上。
- 在GPU的渲染流程中,显示到屏幕上的图像是遵循大画家算法按照由远及近的顺序,依次将结果存储到帧缓冲区
- 视屏控制器从帧缓冲区中读取一帧数据,将其显示到屏幕上后,会立即丢弃这帧数据,不会做任何保留,这样做的目的是可以节省空间,且在屏幕上是各自显示各自的,互相不影响。
离屏渲染流程
当App需要进行额外的渲染和合并时,例如按钮设置圆角,我们是需要对UIButton这个控件中的所有图层都进行圆角+裁剪,然后再将合并后的结果存入帧缓存区,再从帧缓存中取出交由屏幕显示,这时,在正常的渲染流程中,我们是无法做到对所有图层进行圆角裁剪的,因为它是用一个丢一个。所以我们需要提前将处理好的结果放入离屏缓冲区,最后将几个图层进行叠加合并,存放到帧缓冲区,最后屏幕上就是我们想实现的效果。
优点:实现某些特殊的渲染效果;某些情境中可以节省性能。
缺点:需要专门开辟一块离屏缓冲区造成存储量开销,在离屏缓冲区和帧缓冲区中切换上下文造成性能开销。
什么情况会触发离屏渲染
-
遮罩(masks)
- mask是覆盖在所有layer及其子layer之上的,可能还带有一定

5880

被折叠的 条评论
为什么被折叠?



