图像撕裂和堵塞的原因及解决方法
理想情况下,当显示前一帧的数据时,下一帧的数据已经存储在帧缓冲器中。这种循环完美地显示图像。
但是现实中经常会出现前一帧的数据已经显示,下一帧的数据还没有处理的情况。这将导致撕裂。如下图所示:
为了解决撕裂问题,采用了垂直同步技术。这种技术是在两帧之间增加一个垂直同步脉冲,表示前一帧的结束和新帧的开始。这样就可以避免游戏画面在高速移动时撕裂的现象。
然而,这引入了新的问题。有时候帧缓存长时间得不到新的帧数据,显示器会一直显示同一帧的数据,导致画面卡顿(掉帧),如下图。为了解决这个问题,引入了双缓冲/三缓冲的概念。
如果机器入口处的进料速度跟不上机器的加工速度,机器就会空转。为了解决这个问题,我们可以增加一个进料口。当一个进料口的物料用完时,我们会切换到另一个进料口,同事会在空的进料口补充物料。这样来回切换,解决了机器空转的问题。
同样,双缓冲/三缓冲是一种用来解决画面卡顿问题的技术。双缓冲/三缓冲不能完全解决画面卡顿的问题,但相对于撕裂问题,小概率的画面卡顿还是可以接受的。
采用双缓冲/三缓冲技术的图像显示过程;
1.在单缓冲模式下,高速刷新的画面会被撕裂。
2.使用垂直同步技术可以解决画面撕裂的问题。
3.垂直同步技术引入了一个新问题:图像干扰。
4.双缓冲/三缓冲技术可以有效缓解画面堵塞问题,但双缓冲/三缓冲技术并不能完美解决画面堵塞问题。
5.什么情况下画面会卡顿:
1)CPU/GPU渲染流水线耗时太长。
2)强制同步。以丢帧为代价解决撕裂问题。
3)使用双缓冲/三缓冲技术也可能导致堵塞。