iOS图像撕裂及解决方法

2020-07-11  本文已影响0人  AcmenL

一、什么是图像撕裂?

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

图片断层

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

屏幕成像过程

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

图像撕裂的前提

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

原因

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

三、怎么解决图像撕裂

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

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

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

掉帧/卡顿是如何生成的

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

2.png

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

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

上一篇下一篇

猜你喜欢

热点阅读