图像撕裂、卡顿产生的原因以及解决方式

图像显示的流程(单缓冲区)


单缓冲区图像显示流程

理想情况下前一帧数据显示完成时,后一帧数据已经存入帧缓存去。这样循环,完美的显示图像。

但是,现实情况中往往会出现,上一帧数据显示完了,下一帧数据还没处理完成。这样就会造成撕裂现象。如下图:


图像撕裂

垂直同步

为了解决撕裂的问题,采用了垂直同步的技术。这项技术是在两帧之间添加一个垂直同步脉冲,它指示着前一帧的结束,和新一帧的开始。这样就能避免游戏画面高速移动时画面撕裂现象。

但是,这样由引入了新的问题,有时候帧缓冲区长时间得不到新的帧数据,显示器就会一直显示同一帧的数据,造成画面卡顿(掉帧),如下图。为了解决这个问题,引入了双缓冲区/三缓冲区的概念。


卡顿(掉帧)

双缓冲区/三缓冲区

一台机器进料口上料的速度赶不上机器处理的速度就会出现机器的空转。为了应对这样的问题,可以增加一个进料口,当一个进料口的物料用完之后,切换到另外一个进料口,同事补充空进料口的物料。这样来回切换,已解决机器空转的问题。

类似的,双缓冲区/三缓冲区是为了解决画面卡顿问题而采用的技术。双缓冲区/三缓冲区并不能完全解决画面卡顿的问题,但是相对于撕裂问题,小概率的画面卡顿是可以接受的。

采用双缓冲区/三缓冲区技术的图像显示流程:


多缓冲区图像显示流程

总结

1.在单缓冲区模式下,高速刷新的画面会出现画面撕裂的现象.

2.利用垂直同步技术可以解决画面撕裂的问题

3.采用垂直同步技术引入了新的问题:画面卡顿

4.采用双缓冲区/三缓冲区技术可以有效地缓解画面卡顿问题,采用双缓冲区/三缓冲区技术并不能完美的解决卡顿的问题。

5.什么情况下回发生画面卡顿:

    1)CPU/GPU 渲染流水线耗时过长

    2)强制进行同步。已掉帧为代价解决撕裂问题

    3)采用双缓冲区/三缓冲区技术也有可能出现卡顿现象。

你可能感兴趣的:(图像撕裂、卡顿产生的原因以及解决方式)