美文网首页
屏幕撕裂说明

屏幕撕裂说明

作者: 旅行者_sz | 来源:发表于2020-07-05 16:27 被阅读0次

    一、概念

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


    撕裂效果.jpg

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

    二、解决方式

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

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

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

    (3)掉帧: 启⽤垂直同步Vsync + 双缓存区 DoubleBuffering 解决(屏幕撕裂问题) ->新的问题

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

    屏幕卡顿原因

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

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

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

    相关文章

      网友评论

          本文标题:屏幕撕裂说明

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