美文网首页
图像撕裂,掉帧以及二级缓存三级缓存的由来

图像撕裂,掉帧以及二级缓存三级缓存的由来

作者: 枫紫_6174 | 来源:发表于2020-07-04 16:27 被阅读0次

一.什么是撕裂

图像撕裂是我们肉眼看到的一张图片上下发生错位,即断层,如下图:

其本质是拿到图像后,GPU进⾏渲染->帧缓存区⾥ ->视频控制器->读取帧缓存区信息(位图) -> 数模转化(数字信号处->模 拟型号) ->(逐⾏扫描)显示,当第一帧图像扫描到某个位置时,GPU拿到新的数据并存到帧缓冲区,这个时候视频控制器从帧缓冲区扫描的是新拿到的一帧的图像,最后就形成了在我们肉眼看到的断层现象,即我们看到的一张图片其本质是两张图片组合而来,究其原因就是视频控制器显示速度小于了GPU处理图形的速度

二.解决撕裂

为了解决撕裂,苹果爸爸引入了: 垂直同步Vsync + 双缓存区 DoubleBuffering 

(1)垂直同步Vsync:帧缓存区加锁 防⽌出现撕裂情况 

(2)双缓存区 DoubleBuffering :就是GPU开辟AB两个帧缓冲区

执行流程就是当A帧缓冲区拿到第一帧数据,给A缓冲区加上一把锁,屏幕控制器从A拿到数据并逐行扫描完成,A帧缓冲区解锁,并且屏幕控制器指向B帧缓冲区,B帧缓冲区加锁并逐行扫描显示,在屏幕控制器扫描B帧缓冲区的时候,A帧缓冲区拿到GPU传过来的新一帧数据,以此类推,解决撕裂问题

三.掉帧

在引入二级缓冲区机制后,出现了一个新的问题--->掉帧

特别说明:掉帧不是因为丢失了一帧的数据就叫掉帧!!!!!!!!!!!

每帧画面的处理时间大概在16.7ms(1s/60 ≈16.7ms),当超过这个时间就会出现掉帧,如上图:当接收接收Vsync ,由于cpu/gpu图⽚数据(速度大于了16.7ms) -> 拿不到FrameBuffer ->这个时候屏幕控制器只能显示同一帧的数据,即: 掉帧(重复渲染同⼀帧数据)

为了减少掉帧(注意不是解决,掉帧问题只能尽量的减少,而不是解决,三级缓冲区也有可能出现掉帧),引入三级缓存区,三级缓冲区是为了充分利用CPU/GPU的空余时间,开辟ABC三个帧缓冲区,A显示屏幕, B也渲染好,C再从GPU拿取渲染数据,当屏幕缓冲区和帧缓冲区都弄好了,然后视频控制器再指向帧缓冲区的另外一个,再显示,这样交替,达到减少掉帧的情况,这样做就比二级缓冲区多了一个确认的操作

总结:屏幕卡顿原因: 

1. CPU/GPU 渲染流⽔线耗时过⻓->掉帧 

2. 垂直同步Vsync + 双缓存区 DoubleBuffering 以掉帧作为代价=>屏幕撕裂 

3. 三缓存区: 合理使⽤CPU/GPU 减少掉帧次数; 

相关文章

  • 屏幕撕裂掉帧以及解决办法

    掉帧、二级缓存三级缓存 撕裂的原因 撕裂(ScreenTearing)是指显示器把两个或更多的影格(frame)显...

  • 图像撕裂,掉帧以及二级缓存三级缓存的由来

    一.什么是撕裂 图像撕裂是我们肉眼看到的一张图片上下发生错位,即断层,如下图: 其本质是拿到图像后,GPU进⾏渲染...

  • 图像撕裂、掉帧及三级缓存

    图像撕裂 图像撕裂就像图中所示,同一副画面显示的内容无法上下对齐 屏幕的更新频率是固定的,通常是60Hz。显卡效能...

  • 图像撕裂、掉帧

    1 图像撕裂 图像撕裂就是一张图片显示的时候,出现了上下断层,如下图: 1.1 出现撕裂的原因 首先我们来看图像显...

  • N0.5 - 图像撕裂 、掉帧、 iOS中的渲染流程

    1、撕裂 撕裂原因:其本质是拿到图像后,GPU进⾏渲染->帧缓存区⾥ ->视频控制器->读取帧缓存区信息(位图) ...

  • OpenGL之 图片撕裂、掉帧及二三级缓存

    一、图片撕裂 如图,很多人在游戏中应该都见过这种情况,在某个界面,出现上下两部分断层的情况,这个就是图片撕裂。 1...

  • RecyclerView缓存机制

    RecyclerView四级缓存 一级缓存mAttachedScrap,二级缓存mCachedViews,三级缓存...

  • 撕裂/掉帧

    图像显示大致过程: CPU/GPU处理 → 存放到帧缓存区 → 视频控制器去帧缓存区中读取 → 其他一些列的处理 ...

  • 内存屏障和CPU缓存

    CPU缓存 CPU高速缓存类型有一级缓存,二级缓存,三级缓存。在读取数据时会先从一级缓存查找,再找二级缓存,再找三...

  • 深入理解IOS离屏渲染

    目录:图像显示原理1.1 将图像显示到屏幕的流程1.2 显示器显示流程UI卡顿、掉帧2.1 屏幕撕裂 Screen...

网友评论

      本文标题:图像撕裂,掉帧以及二级缓存三级缓存的由来

      本文链接:https://www.haomeiwen.com/subject/uqyuqktx.html