iOS 离屏渲染原因

作者: 木扬音 | 来源:发表于2021-08-30 19:28 被阅读0次

正常渲染流程

  • 在GPU的渲染流程中,根据由远及近的顺序显示图像到屏幕上,依次将结果存储到帧缓冲区
  • 视频控制器从帧缓冲区中读取数据,然后显示到屏幕上后,会立即丢掉改帧数据
    正常渲染流程

离屏渲染

如果我们对视图做了特殊处理:圆角、阴影等。GPU需要对图像进行额外的渲染、合并,然后将每个图层处理结果存入到离屏缓冲区,再将多个图层进行叠加合并,存入帧缓冲区,最后显示到屏幕上

离屏渲染流程

离屏缓冲区

  • 是一个临时缓冲区,用来存放后续操作使用的数据
  • 离屏缓冲区会带来方便的同时,也会带来严重的性能问题。因为需要额外开辟一个缓存区存放数据,并且还需要转存到帧缓冲区也是耗时的
  • 离屏缓冲区最大是屏幕的2.5倍
  • 因为一些特殊效果的处理,并不能一次性完成,需要使用离屏缓冲区来保存中间转态,是系统自动触发的,例如圆角、阴影、高斯模糊、光栅化等
  • 可以提高渲染效率,如果一个效果是多次实现的,可以提前渲染,保存到离屏缓冲区,以达到复用的目的。这种情况是需要开发者手动触发的
光栅化

我们在开启光栅化时,会将layer渲染成位图保存到缓存中,这样在下次使用时,就可以直接复用,提高效率

  • 如果layer不能被复用,没必要开启光栅化
  • 如果layer被频繁修改,此时开启光栅化反而会影响效率
  • 离屏渲染缓存的内容是有时间限制的,如果100ms内没有被使用,则会被丢弃
  • 离屏渲染的缓存空间有限,是屏幕的2.5倍,超过2.5倍屏幕像素大小的话也会被丢弃
圆角触发离屏渲染的时机
  • 当只设置backgroundColor、border,而contents中没有子视图时,无论maskToBounds / clipsToBounds是true还是false,都不会触发离屏渲染
  • 当contents中有子视图时,此时设置 cornerRadius+maskToBounds / clipsToBounds,就会触发离屏渲染
  • UIImageView中只设置图片和maskToBounds / clipsToBounds不会触发离屏渲染,除非再设置背景色

CALayer的构成,如图所示,它是由backgroundColor、contents、borderWidth&borderColor构成的

image.png

苹果官方文档针对圆角设置的一些说明:
官方文档告诉我们,设置cornerRadius只会对CALayer中的backgroundColor 和 boder设置圆角,不会设置contents的圆角,如果contents需要设置圆角,需要同时将maskToBounds / clipsToBounds设置为true。

官方文档针对圆角设置的一些说明

检测离屏渲染

检测离屏渲染

相关文章

  • iOS离屏渲染

    iOS-离屏渲染详解关于iOS离屏渲染的深入研究关于离屏渲染这两片文章分析的很详细。 渲染过程 根据渲染流水线示意...

  • iOS 离屏渲染原因

    正常渲染流程 在GPU的渲染流程中,根据由远及近的顺序显示图像到屏幕上,依次将结果存储到帧缓冲区 视频控制器从帧缓...

  • iOS离屏渲染解析

    iOS离屏渲染解析

  • iOS圆角的离屏渲染,你真的弄明白了吗

    iOS圆角的离屏渲染,你真的弄明白了吗iOS圆角的离屏渲染,你真的弄明白了吗

  • 四、iOS离屏渲染

    一、开启图层是否触发离屏渲染问题 注:离屏渲染的图层会标记为黄色 二、离屏渲染的渲染流程 三、离屏渲染触发的原因 ...

  • iOS-离屏渲染探索

    iOS项目性能优化时,不得不提到离屏渲染,为了提升性能,我们要求尽量减少离屏渲染的发生。 那,什么是离屏渲染?离屏...

  • iOS离屏渲染的检测和优化

    在iOS离屏渲染介绍了离屏渲染的逻辑和原理,我们知道离屏渲染对于性能会有较大的消耗,那么开发中怎么避免产生离屏渲染...

  • iOS离屏渲染相关值得看的博客

    博客链接 iOS离屏渲染优化 绘制像素到屏幕上 关于iOS离屏渲染的深入研究 https://texturegro...

  • iOS离屏渲染

    一.在iOS开发的过程当中或多或少都会碰到离屏渲染那么造成离屏渲染的原因有以下几点 (总结不全望见谅) 1.使用了...

  • 三、iOS离屏渲染

    iOS离屏渲染 圆角不一定会造成离屏渲染 GPU屏幕渲染方式 On-Screen Rendering 当前屏幕渲染...

网友评论

    本文标题:iOS 离屏渲染原因

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