美文网首页
离屏渲染原理剖析

离屏渲染原理剖析

作者: 冼同学 | 来源:发表于2021-03-20 15:00 被阅读0次

GPU屏幕渲染方式:

1.On-Screen Rending

意为当前屏幕渲染,指的是GPU的渲染操作实在当前用于显示的屏幕缓冲区只能给进行,并没有开辟新的缓冲区。

2.Off-Screen Rending

意为离屏渲染,指的是GPU在渲染操作的时候,在当前屏幕缓冲区以为开辟一个新的缓冲区进行渲染操作。

注意:1.离屏渲染的内容是有时间限制的,缓存内容100ms内没有被使用,它就会被丢弃,无法进行复用。2.离屏渲染的缓存空间是有限的,超过2.5倍屏幕像素大小的话也会失效,且无法进行复用了。

离屏渲染的触发方式

· shouldRasterize(光栅化)

· masks(遮罩)

· shadows(阴影)

· edge antialiasing(抗锯齿)

· group opacity(不透明)

· 复杂形状设置圆角等

· 渐变

离屏渲染检测

用模拟器时候,Debug->Color Off-screen Render 就会检测触发生离屏渲染的部分(黄色阴影)。

Instruments的Core Animation工具中有几个和离屏渲染相关的检查选项:

Color Offscreen-Rendered Yellow

开启后会把那些需要离屏渲染的图层高亮成黄色,这就意味着黄色图层可能存在性能问题。

Color Hits Green and Misses Red

如果shouldRasterize被设置成YES,对应的渲染结果会被缓存,如果图层是绿色,就表示这些缓存被复用;如果是红色就表示缓存会被重复创建,这就表示该处存在性能问题了。

案例分析

由以上案例可知,第1与第3个控件渲染时发生了离屏渲染。在渲染有背景图的button时候,由于设置了圆角,GPU先渲染出背景的数据存放在新开辟的offscreen  buffer里面,然后继续渲染背景的layer,继续存放在offscreen  buffer里面。然后从offscreen buffer里面copy出来进行圆角的处理放在frame  buffter 上。最后显示在屏幕上。如果不设置圆角的话,GPU计算好数据的话直接放在frame buffter然后显示就行了,显示完就丢弃了,正因为这样子,多个图层的话无法对数据进行圆角操作,需要将数据缓存起来。所以并不是所有的圆角设置都会出现离屏渲染的。

然后苹果的官方文档还说到

圆角触发离屏渲染

离屏渲染的逻辑

如果渲染一张有三个layer的图。没有触发离屏渲染如下所示:

没有离屏渲染

当sublayer绘制到屏幕之后,就会讲sublayer从帧缓冲区(frame buffer)中移除,从而达到了节省空间的目的。

如果将这张图加上圆角,就会发生离屏渲染,如图所示:

渲染之后放在离屏冲区 帧缓冲区得到有圆角的layer,然后显示

总结:

其实离屏渲染在iOS系统中也会经常发生,例如下拉时候的毛玻璃效果。众而周知离屏渲染会特别的消耗性能,因为除了要创建一个屏幕外的缓冲区,然后在帧缓冲区跟离屏缓冲区之间的切换完成渲染操作。其中缓冲区的创建以及上下文的切换是非常耗性能的,而绘制并不是性能耗损的主要原因。

难道离屏渲染就没好处了吗?当然不是了!好明显对于数据的复用离屏缓冲区也是能做到的,避免了重复渲染layer。

相关文章

  • 离屏渲染原理剖析

    GPU屏幕渲染方式: 1.On-Screen Rending 意为当前屏幕渲染,指的是GPU的渲染操作实在当前用于...

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

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

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

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

  • iOS深入剖析【离屏渲染】原理

    离屏渲染与正常渲染 屏幕上最终显示的数据有两种加载流程 正常渲染加载流程 离屏渲染加载流程 从图上看,他们之间的区...

  • 剖析离屏渲染

    面试中是否遇到过这样的问题,了解离屏渲染吗?什么时候会触发离屏渲染? 我们都会答出:当绘制圆角(cornerRad...

  • 离屏渲染的理解

    圆角不一定会离屏渲染 离屏渲染的原理 当页面需要进行额外的渲染和合并,需要将layer分次渲染,存到离屏缓冲区(o...

  • iOS开发进阶:性能优化与稳定性优化实践

    页面卡顿原理与优化 离屏渲染原理与优化 复杂视图的渲染优化 崩溃监控方案

  • iOS 圆角阴影优化

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

  • 离屏渲染

    离屏渲染原理 App进行额外的渲染和合并 —> offscreen Buffer 组合 —> FrameBuffe...

  • iOS--离屏渲染

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

网友评论

      本文标题:离屏渲染原理剖析

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