关于离屏渲染

1、当前屏幕渲染

        一般情况下界面的呈现是在当前屏幕渲染,首先CPU计算好frame等属性,将计算好的内容提交给GPU去渲染,GPU渲染完成之后就会放入屏幕帧缓冲区,然后控制器每隔一段时间会去屏幕缓存区读取渲染好的内容,从而显示出来。iphone手机的屏幕刷新率是60Hz,刷新一帧大概需要16.67毫秒左右,也就是每隔16.67毫秒左右控制器就会去屏幕缓存区读取一次GPU渲染的内容,假如GPU性能出现问题,如果 CPU GPU 累计耗时 16.67 毫秒还没有完成渲染,就会造成卡顿掉帧。

2、离屏渲染

      (offscreen-rendering)顾名思义为屏幕外的渲染,即在当前屏幕缓冲区以外,新开辟一个新缓冲区进行操作。离屏渲染发生在 GPU 层面上,会创建新的渲染缓冲区,会触发 OpenGL 的多通道渲染管线,图形上下文的切换会造成额外的开销,增加 GPU 工作量。

离屏渲染消耗性能的的主要原因:

(1)需要创建新的缓存区。

(2)离屏渲染的整个过程,需要多次切换上下文环境,当前屏幕—》离屏,渲染结束后将离屏缓冲区内容显示到当前屏幕,上下文切换回当前环境。

3、触发离屏渲染操作

(1) shouldRasterize(光栅化)

(2) masks(遮罩)

(3)shadows(阴影)

(4)edge antialiasing(抗锯齿)

(5)group opacity(不透明)

(6)复杂形状设置圆角等

        UIButton 的 masksToBounds = YES下发生离屏渲染与 背景图存不存在有关系, 如果没有给按钮设置 btn.image = [UIImage imageName:@"xxxxx"]; 是不会产生离屏渲染的

        给UIImageView设置圆角是不会触发离屏渲染的,但是同时给UIImageView设置背景色则肯定会触发

(7) 渐变

(8)Text(UILabel, CATextLayer, Core Text, etc)...

你可能感兴趣的:(移动开发,ios)