- 什么是离屏渲染,你对离屏渲染是怎么理解的?
先看在屏渲染概念:
可以说在屏渲染指的GPU层面的一个概念。那么离屏渲染与之对应:
离屏渲染概念起源于GPU层面上,所以很多人觉得离屏渲染这个概念很陌生,我们可以用一个比较通俗的语言解释离屏渲染:也就是当我们设置某一些UI视图的图层属性,如果说指定成在被未预合成之前,不能用于直接被显示的时候,那么就触发了离屏渲染。典型的比如我们设置视图的圆角属性,包括一些蒙层遮罩。
总结标准回答:
当我们指定了UI视图的某些属性,标记成它在未预合成之前,不能用于当前屏幕上直接显示的时候,就会触发离屏渲染。而离屏渲染的概念起源于GPU层面,指的是在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。
-
什么场景下会触发离屏渲染?
这里列举四点:
第一个就是当设置一个图层的圆角的时候会触发离屏渲染,需要在设置圆角的同时,同时要设置maskToBounds这个属性为YES的时候,才会触发离屏渲染,当设置其中一个是无法触发离屏渲染的。再来看看还有哪些场景可以触发离屏渲染,比如说设置一个视图的图层蒙版,包括阴影的设置以及光栅化的设置,都会触发离屏渲染。
- 为何要避免离屏渲染?
CPU和GPU在进行具体的视图绘制渲染的过程中做了大量的工作。而离屏渲染是发生在GPU层面的,由于离屏渲染使GPU层面上面触发了OpenGL的多通道渲染管件,产生了额外的开销,所以我们需要避免离屏渲染。
对于初中级可以这样回答:离屏渲染会创建新的缓冲区,会有内存上的开销,包括对于上下文的切换,因为有多通道渲染管线,最终需要把多通道的渲染结果做一个最终的合成,那需要涉及到上下文切换。就会有GPU额外的开销。
高级的回答:在触发离屏渲染的时候会增加GPU的工作量,而增加了GPU的工作量很有可能导致CPU和GPU工作耗时加起来的总耗时超出了16.7ms,可能就会导致UI的卡顿和掉帧,所以我们需要避免离屏渲染。