美文网首页
屏幕撕裂掉帧以及解决办法

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

作者: 浪呀么浪打浪 | 来源:发表于2020-07-23 15:13 被阅读0次

    掉帧、二级缓存三级缓存

    撕裂的原因

    屏幕撕裂

    撕裂(ScreenTearing)是指显示器把两个或更多的影格(frame)显示在同一画面上。屏幕的更新频率是固定的,通常是60Hz。显卡效能大幅提高,输出的帧率可以非常高,如果显卡的输出高于60fps,两者不同步,画面便会撕裂。

    GPU进行渲染-帧缓存处理-视频控制器-读取帧缓存信息(位图)-数模转换-逐行显示。当第一帧图像在扫描过程中,GPU拿到新的数据并存储到帧缓存区,这时视频控制器读取帧缓存信息时拿到了新的一帧的图像,这样就造成了撕裂现象。

    撕裂解决办法:

    苹果推出了垂直同步Vsync和双缓存区。

    垂直同步Vsync:帧缓存区加锁,防止出现撕裂情况

    双缓存区DoubleBuffer:GPU开辟出两个缓存区

    执行的时候,当视频控制器从第一个缓存区读取缓存信息时,给它加上一把锁,当逐行扫描完成时,第一个缓存区解锁。并且视频控制器指向第二个缓存区,当第二个缓存区加锁并且逐行扫描时,第一个缓存区拿到GPU传过来的新的一帧数据。这样能够解决撕裂问题。

    掉帧:

    掉帧一般是指由于硬件不足以负荷显示器画面动态显示刷新的频率,从而帧率过低所造成的画面出现停滞(或短时间或长时间)现象。帧数就是在1秒钟时间里传输的图片的量,也可以理解为图形处理器每秒钟能够刷新几次,通常用fps(Frames Per Second)表示。每一帧都是静止的图象,快速连续地显示帧便形成了运动的假象。高的帧率可以得到更流畅、更逼真的动画。每秒钟帧数 (fps) 愈多,所显示的动作就会愈流畅。

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

    相关文章

      网友评论

          本文标题:屏幕撕裂掉帧以及解决办法

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