最近学习了图像渲染方面的知识,写一下自己对于离屏渲染的理解。
造成离屏渲染的原因有很多:
设置CALayer的cornerRadius,edgeAntialiasingMask,allowsEdgeAntialiasing属性
把CALayer的maskToBounds设为YES
设置CALayer的shadow属性
设置CALayer的mask属性
把CALayer的allowsGroupOpacity属性设为YES而且opacity小于1
…...等
我们接触到最多需要离屏渲染的地方大都是在处理图片圆角的时候,很多人都知道使用maskToBounds会造成离屏渲染。但是并没要告诉我们为什么会造成离屏渲染,离屏渲染为什么会影响性能。
1.离屏渲染是什么
我们看到的屏幕中的图像都是由GPU(Core Animation)和CPU(Core Graphics)渲染出来了,GPU主要负责图像渲染操作;CPU负责对象创建布局,然后读取渲染数据显示在屏幕上。
在我们看到到图像之前,系统首先会在当前的上下文(context)中创建一个缓冲区:帧缓冲区。在帧缓冲区中经过一系列渲染操作,最后将渲染后的结果交给CPU显示在当前屏幕上。
当我们想创建一个新的帧缓冲区进行图形渲染时,需要在屏幕之外的帧缓冲区中进行操作,这就形成了离屏渲染。所以离屏渲染的核心原因其实是为了创建新帧缓冲区进行图形绘制。
2.离屏渲为什么会影响性能
当需要离屏渲染时,系统首先要它分配一个内存空间,创建一个新的上下文。系统需要从当前的屏幕的上下文切换到我们新建的上下文,然后在创建的帧缓冲区上来进行绘制,绘制完成以后,为了将帧缓冲区的内容显示到屏幕中,又需要切换到屏幕的上下文中。
造成性能影响的主要原因就是创建帧缓冲区和进行上下文切换。
以上就是我对于造成离屏渲染原因和离屏渲染影响性能的理解。
这里对于什么是上下文切换,上下文切换又是怎么影响性能的,并没详细说明,这里还需要去查阅相关资料来理解。
网友评论