iOS离屏渲染知识总结

2017-11-06  本文已影响0人  辣条少年J

离屏渲染是之在非当前屏幕缓冲区进行渲染,如果重写了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为什么会导致离屏渲染?

上一篇下一篇

猜你喜欢

热点阅读