美文网首页
关于离屏渲染

关于离屏渲染

作者: 深海时代 | 来源:发表于2020-02-17 09:51 被阅读0次

1.什么是离屏渲染

2.离屏渲染的触发方式

3.离屏渲染的意义

4.离屏渲染的不足

1.什么是离屏渲染

要了解离屏渲染,先来了解一下iPhone的帧缓存机制。当屏幕显示内容的时候,要使用到当前屏幕渲染,由GPU渲染完成后放入当前屏幕的帧缓存区等待使用,iPhone的刷新频率为60HZ,每隔16.67ms,视频控制器就会读取一次缓存用于显示。

假如页面情况比较复杂,GPU无法在规定的时间内完成渲染,则缓存区只能读到上一帧的渲染内容,由此引发卡顿。

为了合理使用GPU,优化界面流畅度,苹果引入了离屏渲染的机制。

离屏渲染的特点是屏幕外渲染,渲染将开辟额外的内存空间,使用CPU进行渲染,渲染结果不会直接呈现在屏幕上。

2.离屏渲染的触发方式

离屏渲染分主动触发方式与被动触发方式

圆角、阴影、模糊、遮罩,当使用到masksToBounds切割子视图时会被动触发离屏渲染,手动重写drawRect:方法,视图只要设置背景颜色,也会触发被动的离屏渲染。被动的离屏渲染的特点是使用到了透明度,在屏幕上需要进行图层合成,而不透明视图则不需要。视图的合成会大量消耗GPU性能,通常我们可以通过CALayer 的 opaque 属性打开来关闭图层合成,但是当视图透明度小于1时,最好还是打开,否则会不符合用户的视觉逻辑,也有可能造成其他不可预知的显示效果。

主动触发离屏渲染的方式是CALayer.shouldRasterize开启光栅化,光栅化会强制CALayer以位图形式进行缓存,相当于就是离屏渲染。这个缓存的时效是 100ms,也就是刷新 6 帧的时间,如果视图更新过于频繁,6帧之内用不到这个缓存,那他相当于是没有用的。

3.离屏渲染的意义

离屏渲染的性能并不好,他本质上是让空闲的CPU去做GPU的事情,但是这也是一个基本资源分配策略。从手机本身出发,他可以一定程度的优化显示流畅性。从开发者角度出发,可以手动进行一些更为合理(减少透明视图的使用,合理利用光栅化)或者更为激进(在drawRect中单独处理视图)的优化。

4.离屏渲染的不足

离屏渲染将开辟新的内存空间,而且CPU在处理图像上远没有GPU高效,属于用空间来换取时间的策略。

视频控制器在读取离屏渲染时需要把渲染上下文切到屏幕外缓存区,使用完再切回来,这个来回切换的过程是需要消耗非常大资源的。

相关文章

  • iOS离屏渲染

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

  • iOS--离屏渲染

    离屏渲染(Offscreen rendering) 离屏渲染的定义 离屏渲染(offscreen-renderin...

  • 图层性能-离屏渲染、光栅化等

    一.离屏渲染 1.在屏渲染、离屏渲染: On-Screen Rendering/在屏渲染:在屏渲染:指的是GPU的...

  • 关于离屏渲染

    1.什么是离屏渲染 2.离屏渲染的触发方式 3.离屏渲染的意义 4.离屏渲染的不足 1.什么是离屏渲染 要了解离屏...

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

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

  • 四、iOS离屏渲染

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

  • 我对离屏渲染的理解

    关于离屏渲染 一直觉得很多离屏渲染的文章说得不明不白。 问题1:离屏渲染是时刻存在着,还是页面滚动的时候才存在着。...

  • UI视图及UITableView流畅性优化

    一.离屏渲染 1. 在屏渲染和离屏渲染 在屏渲染是指在当前用于显示的屏幕缓冲区进行GPU渲染操作 离屏渲染是指在当...

  • 关于离屏渲染

    最近听到面试经常会提到离屏渲染,也听说过。于是总结一下,和大家一起探讨! 一.离屏渲染过程 离屏渲染(offscr...

  • 关于离屏渲染

    最近学习了图像渲染方面的知识,写一下自己对于离屏渲染的理解。 造成离屏渲染的原因有很多: 设置CALayer的co...

网友评论

      本文标题:关于离屏渲染

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