哪些场景可以触发离屏渲染?

首先我们要知道什么是离屏渲染:
离屏渲染Off-Screen Rendering 指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。
 
离屏渲染会先在屏幕外创建新缓冲区,离屏渲染结束后,再从离屏切到当前屏幕
还有另外一种屏幕渲染方式-当前屏幕渲染On-Screen Rendering ,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行。
 
 
以下方式会触发离屏幕渲染
1:使用系统提供的圆角效果也会触发离屏渲染.
(masksToBounds = true&&cornerRadius>0才会引发离屏渲染)
 
2:重写drawRect
 
3:layer.shadow
(Shawdow 可以通过指定路径来取消离屏渲染)
 
4:layer.mask
(Mask 效果无法取消离屏渲染,使用混合图层的方法来模拟 mask 效果,性能各方面都是和无效果持平。)
 
5:layer.allowsGroupOpacity
(GroupOpacity 是指 CALayer 的allowsGroupOpacity属性,UIView 的alpha属性等同于 CALayer opacity属性,
开启离屏渲染的条件是:layer.opacity != 1.0并且有子 layer 或者背景图。)
layer.allowsEdgeAntialiasing
(该属性用于消除锯齿,离屏渲染条件旋转视图并且设置layer.allowsEdgeAntialiasing = true)
 
 
6:layer.shouldRasterize
(光栅化会触发离屏渲染,开启 Rasterization=true 后,GPU 只合成一次内容,然后复用合成的结果;合成的内容超过 100ms 没有使用会从缓存里移除,在更新内容时还会产生更多的离屏渲染。对于内容不发生变化的视图,原本拖后腿的离屏渲染就成为了助力)



猜你喜欢

转载自www.cnblogs.com/huangzs/p/10250875.html