iOS离屏渲染知识总结

离屏渲染是之在非当前屏幕缓冲区进行渲染,如果重写了drawRect并使用了Core Graphics进行了绘制操作就涉及到了cpu渲染,渲染得到的bitmap由GPU用于显示。
CoreGraphics通常是线程安全的,所以可以进行异步绘制

通常,GPU 的渲染性能要比 CPU 高效很多,同时对系统的负载和消耗也更低一些。

CPU离屏渲染:core graphics是cpu渲染

GPU离屏渲染:需要开辟新的缓冲区渲染,绘制的时候需要上下文切换。

CALayer直接添加阴影会导致离屏渲染,但是添加阴影路径不会。离屏渲染直接结果有可能导致fps较低(fps越高越会得到流畅逼真的动画)。

GPU渲染机制:

CPU 计算好显示内容提交到 GPU,GPU 渲染完成后将渲染结果放入帧缓冲区,随后视频控制器会按照 VSync 信号逐行读取帧缓冲区的数据,经过可能的数模转换传递给显示器显示。

添加阴影:

方式一:直接添加(导致离屏渲染)

`

imgView.layer.shadowColor = [UIColor blackColor].CGColor;

imgView.layer.shadowOpacity = 0.8f;

imgView.layer.shadowRadius = 4.f;

imgView.layer.shadowOffset = CGSizeMake(4,4);

`

方式二:路径

//路径阴影

UIBezierPath *path = [UIBezierPath bezierPath];

[path moveToPoint:CGPointMake(-5, -5)];

//添加直线

[path addLineToPoint:CGPointMake(paintingWidth /2, -15)];

[path addLineToPoint:CGPointMake(paintingWidth +5, -5)];

[path addLineToPoint:CGPointMake(paintingWidth +15, paintingHeight /2)];

[path addLineToPoint:CGPointMake(paintingWidth +5, paintingHeight +5)];

[path addLineToPoint:CGPointMake(paintingWidth /2, paintingHeight +15)];

[path addLineToPoint:CGPointMake(-5, paintingHeight +5)];

[path addLineToPoint:CGPointMake(-15, paintingHeight /2)];

[path addLineToPoint:CGPointMake(-5, -5)];

//设置阴影路径

imgView.layer.shadowPath = path.CGPath;

设置圆角:

方式一:(直接设置,导致离屏渲染)

aView.layer.cornerRadius=8;

aView.layer.masksToBounds=YES;

方式二:(设置路径,不会导致离屏渲染)

//设置所需的圆角位置以及大小UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:aView.bounds byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii:CGSizeMake(10,10)];

CAShapeLayer*maskLayer =[[CAShapeLayer alloc] init];

maskLayer.frame=aView.bounds;

maskLayer.path=maskPath.CGPath;

aView.layer.mask= maskLayer;


概念:

光栅化概念:将图转为为一个个栅格组成的图像

光栅化特点:每个元素对应帧缓冲区中的一像素

当属性是YES的时候,会生成位图并且和其他内容合成,当为False的时候是直接生成。

shouldRasterize = YES

光栅化会导致离屏渲染,但是同时也会将渲染的图片缓存,提高性能。因为缓存,光栅化对层级复杂的视图或者有复杂特效效果的图层性能提升明显。

如果图层内容经常变化,缓存就会无效,这个时候离屏渲染会降低性能。

相当于光栅化是把GPU的操作转到CPU上了,生成位图缓存,直接读取复用。

问题:

drawrect为什么会导致离屏渲染?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 绘制像素到屏幕上 answer-huang22 Mar 2014 分享文章 一个像素是如何绘制到屏幕上去的?有很多...
    阿狸旅途T恤阅读 5,596评论 0 7
  • Core Animation工具用来监测Core Animation性能。它给我们提供了周期性的FPS,并且考虑到...
    F麦子阅读 4,245评论 0 1
  • 实际开发中,大多会遇到圆角或者圆形的控件的情况。通常,简便的解决方案主要是: 1.让美工做一个圆角的图片...
    LanWor阅读 5,625评论 1 5
  • 初五良夜拥佳人,清风玉露酒盈尊 甘甜香暖送孤戚,虽然是梦也缠绵
    玫瑰圣典CC阅读 1,058评论 0 0
  • 随着互联网技术的革命,加之资本膨胀和工业技术革新,体力劳动的价值走向两个极端,一是普通技能/技术性工作,比如装配工...
    闫海涛老师阅读 1,630评论 0 0

友情链接更多精彩内容