美文网首页
面试题:什么是离屏渲染?什么情况下会触发?

面试题:什么是离屏渲染?什么情况下会触发?

作者: 常在士心 | 来源:发表于2021-09-07 09:01 被阅读0次

离屏渲染就是在当前屏幕缓冲区以外,新开辟一个缓冲区进行操作。

离屏渲染触发的场景有以下:

1、圆角 (maskToBounds并用才会触发)
2、图层蒙版
3、阴影
4、光栅化
为什么要有离屏渲染?

大家高中物理应该学过显示器是如何显示图像的:需要显示的图像经过CRT电子枪以极快的速度一行一行的扫描,扫描出来就呈现了一帧画面,随后电子枪又会回到初始位置循环扫描,形成了我们看到的图片或视频。

为了让显示器的显示跟视频控制器同步,当电子枪新扫描一行的时候,准备扫描的时发送一个水平同步信号(HSync信号),显示器的刷新频率就是HSync信号产生的频率。然后CPU计算好frame等属性,将计算好的内容交给GPU去渲染,GPU渲染好之后就会放入帧缓冲区。然后视频控制器会按照HSync信号逐行读取帧缓冲区的数据,经过可能的数模转换传递给显示器,就显示出来了。具体的大家自行查找资料或询问相关专业人士,这里只参考网上资料做一个简单的描述。

离屏渲染的代价很高,想要进行离屏渲染,首选要创建一个新的缓冲区,屏幕渲染会有一个上下文环境的一个概念,离屏渲染的整个过程需要切换上下文环境,先从当前屏幕切换到离屏,等结束后,又要将上下文环境切换回来。这也是为什么会消耗性能的原因了。

由于垂直同步的机制,如果在一个 HSync 时间内,CPU 或者 GPU 没有完成内容提交,则那一帧就会被丢弃,等待下一次机会再显示,而这时显示屏会保留之前的内容不变。这就是界面卡顿的原因。

为什么要避免离屏渲染?

CPU GPU 在绘制渲染视图时做了大量的工作。离屏渲染发生在 GPU 层面上,会创建新的渲染缓冲区,会触发 OpenGL 的多通道渲染管线,图形上下文的切换会造成额外的开销,增加 GPU 工作量。如果 CPU GPU 累计耗时 16.67 毫秒还没有完成,就会造成卡顿掉帧。

圆角属性、蒙层遮罩 都会触发离屏渲染。指定了以上属性,标记了它在新的图形上下文中,在未愈合之前,不可以用于显示的时候就出发了离屏渲染。

在OpenGL中,GPU有2种渲染方式

On-Screen Rendering:当前屏幕渲染,在当前用于显示的屏幕缓冲区进行渲染操作
Off-Screen Rendering:离屏渲染,在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作
离屏渲染消耗性能的原因

需要创建新的缓冲区
离屏渲染的整个过程,需要多次切换上下文环境,先是从当前屏幕(On-Screen)切换到离屏(Off-Screen);等到离屏渲染结束以后,将离屏缓冲区的渲染结果显示到屏幕上,又需要将上下文环境从离屏切换到当前屏幕
哪些操作会触发离屏渲染?

光栅化,layer.shouldRasterize = YES
遮罩,layer.mask
圆角,同时设置 layer.masksToBounds = YES、layer.cornerRadius大于0
考虑通过 CoreGraphics 绘制裁剪圆角,或者叫美工提供圆角图片
阴影,layer.shadowXXX,如果设置了 layer.shadowPath 就不会产生离屏渲染
————————————————

iOS版本上的优化
iOS 9.0 之前UIimageView跟UIButton设置圆角都会触发离屏渲染
iOS 9.0 之后UIButton设置圆角会触发离屏渲染,而UIImageView里png图片设置圆角不会触发离屏渲染了,如果设置其他阴影效果之类的还是会触发离屏渲染的。
这可能是苹果也意识到离屏渲染会产生性能问题,所以能不产生离屏渲染的地方苹果也就不用离屏渲染了。

版权声明:本文为CSDN博主「D_猿员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42792413/article/details/89245548

相关文章

  • iOS 性能优化面试题(什么是 离屏渲染?什么情况下会触发?该如

    什么是 离屏渲染?什么情况下会触发?该如何应对? 离屏渲染就是在当前屏幕缓冲区以外,新开辟一个缓冲区进行操作。 离...

  • 关于离屏渲染

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

  • iOS总结

    一、什么是离屏渲染?什么情况下会导致离屏渲染?为什么要尽量避免离屏渲染? 如果要在显示屏上显示内容,我们至少需要一...

  • 离屏渲染

    1.什么是离屏渲染? 2.离屏渲染会引起什么问题? 3.什么情况下会发生离屏渲染? 1.什么是离屏渲染 离...

  • iOS离屏渲染解析

    离屏渲染 我们都知道一般情况下离屏渲染是犹豫设置了圆角触发的。触发离屏渲染真的只需要设置圆角么?下来我们通过案例分...

  • 面试题:什么是离屏渲染?什么情况下会触发?

    离屏渲染就是在当前屏幕缓冲区以外,新开辟一个缓冲区进行操作。 离屏渲染触发的场景有以下: 1、圆角 (maskTo...

  • iOS 设置圆角会造成离屏渲染,你真的弄明白了吗?

    1. 如何设置圆角才会触发离屏渲染 我们经常看到,圆角会触发离屏渲染。但其实这个说法是不准确的,因为圆角触发离屏渲...

  • 离屏渲染,OpenGL的三种渲染方式

    一. 离屏渲染触发的原理:APP在对图片进行渲染,合并的时候会触发离屏渲染,离屏渲染流程先把图层保存在帧缓冲区(o...

  • 四、iOS离屏渲染

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

  • 离屏渲染

    离屏渲染检测 为什么1、3会触发离屏渲染?1 设置layer的圆角,设置了背景图片,存在两个layer ,并且进行...

网友评论

      本文标题:面试题:什么是离屏渲染?什么情况下会触发?

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