美文网首页
离屏渲染触发原理简述

离屏渲染触发原理简述

作者: ChenL | 来源:发表于2020-07-18 09:24 被阅读0次
    1.png

    数据的加载渲染流程有两种:
    1、正常渲染加载
    2、离屏渲染加载
    图1 可得:离屏渲染比正常渲染多一个离屏缓存区

    一、正常渲染加载

    APP中的数据经过CPU计算和GPU渲染后,将结果存放在帧缓冲区,利用视频控制器从帧缓冲区中取出,并显示到屏幕上。

    在GPU的渲染流程中,显示到屏幕上的图像是遵循大画家算法按照由远及近的顺序,依次将结果存储到帧缓冲区
    视屏控制器从帧缓冲区中读取一帧数据,将其显示到屏幕上后,会立即丢弃这帧数据,不会做任何保留,这样做的目的是可以节省空间,且在屏幕上是各自显示各自的,互相不影响。

    二、离屏渲染加载

    当App需要进行额外的渲染和合并时,例如按钮设置圆角,我们是需要对UIButton这个控件中的所有图层都进行圆角+裁剪,然后再将合并后的结果存入帧缓存区,再从帧缓存中取出交由屏幕显示,这时,在正常的渲染流程中,我们是无法做到对所有图层进行圆角裁剪的,因为它是用一个丢一个。所以我们需要提前将处理好的结果放入离屏缓冲区,最后将几个图层进行叠加合并,存放到站缓冲区,最后屏幕上就是我们想实现的效果。

    离屏渲染再给我们带来方便的同时,也带来了严重的性能问题。由于离屏渲染中的离屏缓冲区,是额外开辟的一个存储空间,当它将数据转存到Frame Buffer时,也是需要耗费时间的,所以在转存的过程中,仍有掉帧的可能。
    离屏缓冲区的空间并不是无限大的, 它是又上限的,最大只能是屏幕的2.5倍。

    那为什么我们明知有性能问题时,还是要使用离屏渲染呢?

    1、可以处理一些特殊的效果,这种效果并不能一次就完成,需要使用离屏缓冲区来保存中间状态,不得不使用离屏渲染,这种情况下的离屏渲染是系统自动触发的,例如经常使用的圆角、阴影、高斯模糊、光栅化等
    2、可以提升渲染的效率,如果一个效果是多次实现的,可以提前渲染,保存到离屏缓冲区,以达到复用的目的。这种情况是需要开发者手动触发的。

    离屏渲染的另一个原因:光栅化
    当我们开启光栅化时,会将layer渲染成位图保存在缓存中,这样在下次使用时,就可以直接复用,提高效率。

    相关文章

      网友评论

          本文标题:离屏渲染触发原理简述

          本文链接:https://www.haomeiwen.com/subject/udsncktx.html