美文网首页
关于离屏渲染

关于离屏渲染

作者: 深海时代 | 来源:发表于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高效,属于用空间来换取时间的策略。

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

    相关文章

      网友评论

          本文标题:关于离屏渲染

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