美文网首页
iOS图像撕裂及解决方法

iOS图像撕裂及解决方法

作者: AcmenL | 来源:发表于2020-07-11 01:42 被阅读0次

    一、什么是图像撕裂?

    就是一张图片在显示的时候出现断层情况,如图所示

    图片断层

    二、为什么会出现图像撕裂?

    屏幕成像过程

    GPU进⾏渲染->帧缓存区⾥ ->视频控制器->读取帧缓存区信息(位图) -> 数模转化(数字信号处->模 拟型号) ->(逐⾏扫描)显示。

    • 将需要显示的图像,经由GPU渲染
    • 将渲染后的结果,存储到帧缓存区,帧缓存区中存储的格式是位图
    • 由视屏控制器从帧缓存区中读取位图,交由显示器,从左上角逐行扫描进行显示

    图像撕裂的前提

    CPU以及GPU计算能力跟不上你的帧率(60FPS);才有可能发生撕裂。

    原因

    当第一帧图像扫描到某个位置时,GPU拿到新的数据并存到帧缓冲区,这个时候视频控制器从帧缓冲区扫描的是新拿到的一帧的图像,最后就形成了在我们肉眼看到的断层现象,究其原因就是视频控制器显示速度大于了GPU处理图形的速度

    三、怎么解决图像撕裂

    苹果官方针对屏幕撕裂现象,目前一直采用的是 垂直同步+双缓存,只能治标不能之本,而且会带来掉帧问题。

    1.垂直同步
    垂直同步:垂直同步就是加锁,在当前读取的帧数据结束之前,不会读取下一帧的数据

    2.双缓冲区
    双缓冲区:采用两个帧缓冲区用途GPU处理结果的存储,当屏幕显示其中一个缓存区内容时,另一个缓冲区继续等待下一个缓冲结果,两个缓冲区依次进行交替

    掉帧/卡顿是如何生成的

    什么是掉帧?简单来说就是 屏幕重复显示同一帧数据的情况就是掉帧

    2.png

    当前屏幕显示的是A,在收到垂直信号后,CPU和GPU处理的B还没有准备好,此时,屏幕显示的仍然是A

    解决办法:
    在双缓冲区的基础上再加一个缓冲区,即三缓冲区。

    相关文章

      网友评论

          本文标题:iOS图像撕裂及解决方法

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