离屏渲染

1.什么是离屏渲染?

2.离屏渲染会引起什么问题?

3.什么情况下会发生离屏渲染?



1.什么是离屏渲染

        离屏渲染是GPU在当前帧缓冲(frame buffer)区之外新开辟了一块内存区,将渲染结果先暂存到此区域内,渲染完成后在写入当前的frame buffer。

2.离屏渲染会引起什么问题?

        离屏渲染会降低App的性能,苹果手机屏幕刷新率是每秒60次,每一帧渲染的时间是16.67ms,也就是说在这16.67ms内要完成一帧的渲染,如果完不成就会掉帧,我们看到的屏幕的现象就是卡顿,而离屏渲染需要另外开辟内存,并且GPU会从当前frame buffer切换到offscreen buffer,offscreen buffer渲染结束后再切换回来将结果显示到屏幕上,如果cell上有离屏渲染,那么滑动的时候每一帧都会切换,每秒要切换60次,可想而知内存消耗比正常渲染大多少。

3.什么情况下会发生离屏渲染?

        1.设置圆角:这种情况不是必然会发生离屏渲染的,如果单纯的设置UIView的layer.cornerRadius+layer.masksToBounds是不会发生离屏渲染的,UIImageView如果有image,UIButton有背景图时,设置圆角并且图片也需要切圆角时就会发生离屏渲染。

        2.设置shadow

        3.设置group opacity

        4.mask

        5.UIBlurEffect

总结:发生离屏渲染是GPU在当前屏幕无法渲染完成,只能另外开辟缓冲区来暂存渲染结果,最后在返回frame buffer 显示。GPU为什么无法在frame buffer 渲染呢?因为GPU渲染类似画家画画,一层一层渲染,先渲染底层,再渲染上层,并且每渲染完一帧,就会把此帧数据删除来减少缓冲区的占用,这样如果渲染完上层后需要修改底层的内容,这时就无法获取数据,就无法完成渲染,所以才需要额外开辟缓冲区来进行组合渲染。

参考文章:https://zhuanlan.zhihu.com/p/72653360

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、什么是离屏渲染 有一个场景:以 钛信 的最近聊天会话列表为例:每个cell上的头像图片均需要裁剪,使用如下方式...
    叶孤城1993阅读 974评论 0 1
  • 离屏渲染(Offscreen rendering) 离屏渲染的定义 离屏渲染(offscreen-renderin...
    GitArtOS阅读 691评论 0 4
  • iOS离屏渲染 离屏渲染的定义 如果要在显示屏上显示内容,我们至少需要一块与屏幕像素数据量一样大的frame bu...
    汉包包阅读 302评论 0 0
  • 哪些操作会触发离屏渲染? 1、光栅化,layer.shouldRasterize = YES2、遮罩,layer....
    zhouluyao阅读 438评论 0 0
  • 一、首先让我们什么是离屏渲染 离屏渲染就是在当前屏幕缓冲区以外,新开辟一个缓冲区进行操作。 离屏渲染出发的场景有以...
    致青春_bf42阅读 835评论 2 8