美文网首页
iOS下对离屏渲染的理解

iOS下对离屏渲染的理解

作者: DSMars | 来源:发表于2020-07-07 23:08 被阅读0次

离屏渲染定义

离屏渲染的流程如图:


离屏渲染流程.png

GPU把渲染好的的内容存放到离屏渲染缓冲区中,在离屏渲染缓冲区(OffscreenBuffer)中进一步做一些处理后,再提交到帧缓冲区(FrameBuffer)中。

离屏渲染的效率问题( 对性能有什么影响?)

从上面的流程来看,离屏渲染时由于 App 需要提前对部分内容进行额外的渲染并保存到 Offscreen Buffer,以及需要在必要时刻对 Offscreen Buffer 和 Framebuffer 进行内容切换,所以会需要更长的处理时间。
并且 Offscreen Buffer 本身就需要额外的空间,大量的离屏渲染可能早能内存的过大压力。与此同时,Offscreen Buffer 的总大小也有限,不能超过屏幕总像素的 2.5 倍。

使用离屏渲染的原因

情况一:

一般都是系统去触发,例如对layer层相关处理:包括圆角、阴影、mask等等。iOS系统扁平化后出现的高斯模糊也是利用离屏渲染方式。

情况二:
是一种主动行为,是为了提高复用的效率。通常是设置layer的shouldRasterize属性来实现。

shouldRasterize官方文档


shouldRasterize官方文档.png

开启后,会将layer作为位图保存下来,下次直接与其他内容进行混合。这个保存的位置就是OffscreenBuffer中。这样下次需要再次渲染的时候,就可以直接拿来使用了。

shouldRasterize使用建议:

  • layer不复用,没必要使用shouldRasterize
  • layer不是静态的,也就是说要频繁的进行修改,没必要使用shouldRasterize
  • 时间方面:离屏渲染缓存有100ms时间限制,超过该时间的内容会被丢弃,进而不能达到复用的目的
  • 空间方面:离屏渲染空间是屏幕像素的2.5倍,如果超过也无法复用。

常见触发离屏渲染的几种情况:

  • 使用了 mask 的 layer (layer.mask)
  • 需要进行裁剪的 layer (layer.masksToBounds / view.clipsToBounds)
  • 设置了组透明度为 YES,并且透明度不为 1 的 layer (layer.allowsGroupOpacity/ layer.opacity)
  • 添加了投影的 layer (layer.shadow*)
  • 采用了光栅化的 layer (layer.shouldRasterize)
  • 绘制了文字的 layer (UILabel, CATextLayer, Core Text 等)

相关文章

  • iOS下对离屏渲染的理解

    离屏渲染定义 离屏渲染的流程如图: GPU把渲染好的的内容存放到离屏渲染缓冲区中,在离屏渲染缓冲区(Offscre...

  • 离屏渲染

    什么是离屏渲染? 对离屏渲染的理解。 在屏渲染 On-Screen Rendering GPU的渲染操作是在当前用...

  • iOS离屏渲染

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

  • UI离屏渲染

    什么是离屏渲染,你对离屏渲染是怎么理解的? 先看在屏渲染概念: 可以说在屏渲染指的GPU层面的一个概念。那么离屏渲...

  • 离屏渲染

    非作者原著 来自摘抄 参考文献 iOS 关于离屏渲染的理解 以及解决方案 引起离屏渲染 为图层设置遮罩(layer...

  • 从OpenGL的角度来剖析iOS的离屏渲染

    什么是离屏渲染? 首先,相信做iOS的,对离屏渲染都不会陌生,是个老生常谈的东西,那么就简单说一下得什么是离...

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

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

  • iOS 圆角阴影优化

    目录 离屏渲染原理 iOS添加圆角的方法比较 圆角和阴影怎么同时存在 autoLayout下怎么使用 1.离屏渲染...

  • iOS离屏渲染解析

    iOS离屏渲染解析

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

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

网友评论

      本文标题:iOS下对离屏渲染的理解

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