iOS 离屏渲染

1.什么是离屏渲染

在使用圆角、阴影和遮罩等视图功能的时候,图层属性的混合体被指定为在未预合成之前不能直接在屏幕中绘制,所有就需要在屏幕外的上下文中渲染,即离屏渲染。

2.UIView和CALayer的关系

UIView继承UIResponder,可以处理系统传递过来的事件,每个UIView内部都有一个CALayer提供内容的绘制和显示

CALayer继承NSObject类,负责UIView提供内容的contents。CALayer有三个视图元素:背景色,内容,边框。其中内容的本质就是一个CGImage

3.界面渲染过程

Runloop有一个60fps的回调,即每16.7ms绘制一次屏幕,所以view的绘制必须在这个时间内完成,view内容的绘制是cpu的工作,然后把绘制的内容交给GPU渲染,包括多个view的拼接,纹理的渲染等,最后显示在屏幕上,但是,如果无法在16.7ms内容完成绘制,就会出现丢帧的问题,一般情况下,如果帧率保证在30fps以上,界面卡顿效果不明显。

渲染过程如下:

UIView的layer层有一个content,指向一块缓存

UIView绘制时会调用drawRect方法,通过context将内容写入缓存

在缓存写完后,通过renderserver交给GPU去渲染,将缓存中的bitmap数据显示在屏幕上

4.离屏渲染卡顿的原因:

离屏渲染之所以会特别消耗性能,是因为要创建一个屏幕外的缓存区,然后从当前屏幕缓存区切换到屏幕外的缓存区,然后再完成渲染。其中切换缓存区和切换上下文最消耗性能,而绘制不是性能消耗的主要原因。设置以下属性,就会触发离屏绘制:

光栅化/遮罩/阴影/抗锯齿/不透明/圆角/渐变

5.屏幕渲染类型:

CPU计算好显示内容提交到GPU,GPU渲染完成后将渲染结果放到帧缓存区,随后视频控制器会按照VSync信号逐行读取帧缓存区的数据。

当前屏幕渲染:GPU渲染操作就是在当前用于显示的屏幕缓冲区中

离屏渲染:GPU在当前屏幕缓冲区以外开辟一个新的缓冲区进行渲染操作

CPU的离屏渲染:重写drawrect方法,并且使用任何CoreGraphics的技术进行了绘制操作,就设计到了cpu渲染。

转载于:https://juejin.im/post/5cbb23436fb9a0686c019a6f

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值