3、离屏渲染原理
发布网友
发布时间:2023-05-25 10:37
我来回答
共1个回答
热心网友
时间:2024-07-30 11:08
app -> 帧缓冲区(Frame Buffer ) ->Display
APP中的数据经过CPU计算和GPU渲染后,将结果存放在帧缓冲区,利用视频控制器从帧缓冲区中取出,并显示到屏幕上。
app ->离屏缓冲区(OffScreen Buffer)->(图层组合)->帧缓冲区(Frame Buffer )->Display
在图像显示过程中,图像一层一层从帧缓冲区读出,在完成显示后会将其从缓冲区中移除。但是图像往往不是做这么简单的显示,有时还需要对图像进行裁剪等操作。但这些已经从帧缓冲区中移除,再要对其进行操作肯定是无法实现的。所以,为了解决这一问题,添加了离屏缓冲区(offScreen Buffer),每一层图像先分别进行裁剪,存入离屏缓冲区中,然后再将处理好的结果进行合成放入帧缓冲区中。这一操作叫做离屏渲染。
当触发了离屏渲染之后,图像/图形的渲染流程变成了:app进⾏额外的渲染和合并-> offscreen Buffer(离屏缓冲区) 组合. -> FrameBuffer(帧缓冲区) -> 屏幕;特点:(离屏渲染-> 额外的存储空间/offscreen Buffer->FrameBuffer ) offscreenBuffer 空间大小-> 离屏缓冲区的空间最大为屏幕像素点2.5倍
由于离屏渲染中的离屏缓冲区,是额外开辟的一个存储空间,再进行数据转存,所以离屏渲染会影响性能问题
但是一些特殊效果还是要使用离屏渲染
1.按钮设置背景图片 开启clipsToBounds或者layer.masksToBounds 会触发离屏渲染
2.按钮不设置背景图片开启clipsToBounds或者layer.masksToBounds不会触发离屏渲染
4.UIImageView 只设置了图片,无背景色开启clipsToBounds或者layer.masksToBounds 不会触发离屏渲染
这里不得不提一下CALayer,它是由backgroundColor、contents、borderWidth&borderColor构成的
当我们设置了cornerRadius以及masksToBounds进行圆角+裁剪时,masksToBounds裁剪属性会应用到所有的图层上。
正常渲染流程是依次绘制,绘制完一个图层就可以丢弃了。但现在需要依次在 Offscreen Buffer中保存,等待圆角+裁剪处理,即引发了 离屏渲染 。
总结
当我们开启光栅化时,会将layer渲染成位图保存在缓存中,这样在下次使用时,就可以直接复用,提高效率。
光栅化使用建议:
3、离屏渲染原理
正常渲染流程是依次绘制,绘制完一个图层就可以丢弃了。但现在需要依次在 Offscreen Buffer中保存,等待圆角+裁剪处理,即引发了 离屏渲染 。总结 当我们开启光栅化时,会将layer渲染成位图保存在缓存中,这样在下次使用时,就可以直接复用,提高效率。光栅化使用建议:
离屏渲染,OpenGL的三种渲染方式
一. 离屏渲染触发的原理:APP在对图片进行渲染,合并的时候会触发离屏渲染,离屏渲染流程先把图层保存在帧缓冲区(offscreen Buffer)中,如果这个图层需要进行渲染.合并就会把图层存的数据通过顶点着色器.片元着色器,然后放在离屏缓冲区(offscreenBuffer)中,然后把其他的图层也是按照这种形式进行存储,然后...
离屏渲染 问题及原理
首先假设我们app每秒显示60帧,数据会存在于帧缓冲区Frame Buffer当中,然后屏幕不断从帧缓冲区中取数据去显示。与正常流程不同的是,当触发离屏渲染时,数据不会先放到帧缓冲区,而是会先放到离屏缓冲区offscreen Buffer(这个缓冲区是帧缓冲区之外额外开辟的缓冲区)。等到几个结果叠加之后,然后会到帧...
ios 图像显示原理及掉帧卡顿、离屏渲染的原因分析与优化
2.离屏渲染消耗性能的原因 3.何时会触发?4.检测离屏渲染 5.光栅化 光栅化简介:隐式创建一个位图,各种阴影遮罩等效果也会保存到位图中缓存起来,从而减少渲染的频度,把GPU的操作转到CPU上,生成位图缓存,直接读取调用。(注:对于经常变动的内容,不要开启光栅化,防止性能浪费,如Cell的复用)任何...
UI渲染及显示原理
1、离屏渲染(Off-Screen Rendering):就是GPU在当前屏幕以外开辟一个另外的缓冲区进行渲染操作。2、当前屏幕渲染(On-Screen Rendering):指的是GPU是在当前显示的屏幕缓冲区进行的渲染操作。3、CPU的离屏渲染:即非GPU渲染,如果重写了drawReact,并且使用Core Graphics技术进行了绘制操作,就涉及到了...
图像渲染原理
,所以就会出现 掉帧 现象。三缓冲区使用一个前置缓存和两个后置缓存。在着色完第一个后置缓冲区的数据后,立即开始处理第二个后置缓冲区。就是 A数据 显示到屏幕上,两个后置缓冲区会帮我们去渲染 B数据 和 C数据 。但是即便这样,也还是有可能出现掉帧的,不过其掉帧几率会比双缓冲区好很多。
2. 图像显示原理
3、图形生成:尽量避免离屏渲染,尽量采用异步绘制,尽量避免使用圆角、阴影、遮罩等属性。必要时用静态图片实现展示效果,也可尝试光栅化缓存复用属性。4、 比如视图层级十分复杂,那GPU需要合成每一个对应像素点的像素值,做大量的计算,这个合成过程也会变得复杂。减轻视图层级的复杂性,会减轻GPU合成视图...
图形渲染原理
双缓冲区的机制就是,GPU会预先渲染一帧数据放入一个缓冲区中,用于视频控制器的读取。当下一帧渲染完毕后,GPU 会直接把视屏控制器的指针指向第二个缓冲区。但是双缓冲区仍然会产生掉帧的问题。具体掉帧的原因可以参考我写的另一篇文章 【UIView的绘制原理及优化】 。在使用了双缓冲区和垂直同步信号...
Instrument调试界面卡顿
GPU限制—》视图的混合,比如一个界面十几层的视图叠加到一起,GPU不得不计算每个像素点要显示的像素;离屏渲染如视图的Mask,圆角,阴影。半透明,GPU不得不进行数学计算,如果是不透明的,cpu只需取上层的就可以了;浮点数像素 2. 界面显示的原理:iOS设备通常是60fps(每秒60帧),也就是说两帧...
UI卡顿和掉帧原因,及相关优化方案
原因知道了,就可以提出相应的优化方案了。可以从CPU和GPU做以下优化:CPU:1)对象创建、调整、销毁。2)预排版(布局计算、文本计算)。3)预渲染(文本等乙部绘制、图片解码等)。将以上3点操作放到子线程里做。GPU:1.纹理渲染 1)避免离屏渲染。2)依托于CPU的异步绘制机制来减轻GPU的压力。2....