图像显示大致过程:
CPU/GPU处理
→ 存放到帧缓存区
→ 视频控制器去帧缓存区中读取
→ 其他一些列的处理
→ 显示器展示(光栅扫描: 从左上顶点开始从左往右逐行扫描展示, 直至右下顶点)
- 注: 从左上顶点开始从左往右逐行扫描展示, 直至右下顶点. 这个步骤和内容大小无关, 哪怕仅仅展示的只是一个小点. 也是执行该操作.所以屏幕一次渲染的时间是固定的(左上顶点 -> 右下顶点), 和内容多少大小无关.
撕裂:
撕裂指当前屏幕展示的内容不是同一帧的画面.所以不是一个完整的画面.如图:
撕裂
产生此问题的原因: 当一次扫描完成,执行下一次扫描时.CPU/GPU对下一帧需要渲染数据还没有处理完毕.所以此时扫描到的位置展示的还是上一帧的画面.当扫描还未结束,此时下一帧的数据处理完成更新了帧缓存区的数据.那么后面扫描的位置展示出来的就是新的画面.因此便产生了撕裂的现象.
垂直同步:
为了解决上述的撕裂问题
,于是有了垂直同步
的方案
垂直同步: 光栅扫描每从左上顶点到右下顶点完成一次扫描.就发一次垂直同步信号. 只有收到垂直同步信号时,才可以读取下一帧的数据.这样就能保证一次扫描开始到结束的过程中读取的都是同一帧的数据. 保证了图像的完整性, 避免了撕裂问题的产生.
掉帧:
垂直同步很好的解决了撕裂的问题,但是却产生了新的问题,那就是
掉帧
. 也就是我们常说的卡顿现象.
产生原因: 当收到垂直同步信号后, 但是此时下一帧的数据还没有处理准备好. 因此会继续展示上一帧的画面. 这样就造成了屏幕的画面一直没有变.过了好久下一帧的数据才来.这样就给人卡顿的感觉.
喜欢玩单机游戏喜欢看攻略的人肯定看过一些视频在教低配电脑玩家解决游戏卡顿的方法之一就是关掉垂直同步这个选项.
双缓存/三缓存
为了解决掉帧的问题. 于是有了多缓存的方案. 双缓存的机制就是: AB两缓存区, 显示器展示A时, 下一帧处理好的存储在B中. 显示器展示B时,再下一帧存储在A中. 如此轮换交替. 三缓存便是做了进一步优化.
但是多缓存机制并不是说能完全解决掉帧的问题. 只是能减少掉帧发生概率.渲染数据过于复杂,CPU/GPU性能不行.给再多的缓存也没用.
网友评论