参考:【硬件茶谈】全网最详细易懂的G-sync Freesync 垂直同步工作原理科普
每一副静态画面。
一秒钟闪过去的图片数量(FPS)。
显卡一秒钟渲染好并发送给显示器多少张画面。
目前显示器显示动态画面都是利用逐行扫描完成的。
显示器在收到一个完整的帧以后,会从屏幕的左上角开始一行一行地进行绘制,一直绘制到屏幕的右下角。
显示器重置扫描点(把扫描点从右下角挪到左上角)的过程
屏幕刷新率:逐行扫描的速度,144Hz的显示器可以在1秒钟之内进行完整的144次全画幅的逐行扫描。刷新率越高画面延迟越低画面越流畅。
显卡在不同画面的运算压力不同,帧数会一直变化,显示器刷新率是固定的,为了让一个波动的输出帧能匹配固定的刷新率,就引出了帧缓存这个东西。默认是有两个帧缓存:FrontBuffer(前缓存)和BackBuffer(后缓存)。
显卡在渲染完画面后不会直接交给显示器显示而是先写入BackBuffer,BackBuffer写入完毕之后前后缓存会发生交换,这个交换的过程称为BufferSwap。
显卡在显示器逐行扫描完画面之前就提前绘制好了后缓存,此时发生了BufferSwap,显示器接着去绘制帧传递之后的前缓存,导致了画面的撕裂。
显示器在BufferSwap之前完成了对前缓存的逐行扫描。这时只能继续逐行扫描前缓存,然后在第二次逐行扫描中途后缓存绘制完毕发生了BufferSwap,显示器又开始画帧传递后的前缓存。第一帧是完整的B,而第二帧上半幅是B,下半幅是C。
显示器未完成Vblank之前显卡完成即使绘制完后缓存也强制地空载等待显示器扫描完毕。
为了规避垂直同步掉帧的缺点,在高于显示器刷新率的时候打开垂直同步,而帧率低于60帧以后直接关闭掉垂直同步,立刻交替前后缓存的画面,这样就可以缓解因显卡性能不能满足垂直同步的需要而带来的刷新率变化带来的卡顿。
增加中缓存。
缓解垂直同步带来的部分延迟,当显卡性能显著低于显卡的输出帧,中缓存和后缓存都被显卡画完,显卡还是需要停止工作等待显示器逐行扫描。
解决垂直同步和三重缓冲导致的延迟。
普通的垂直三缓是在显示器完成扫描后交换中缓存和前缓存再将交 换后的中缓存与后缓存交换。这时显卡再去写入后缓存。
而快速垂直同步是打开三缓的基础上允许中缓和后缓交替,显卡不会出现空载的情况,无限制地绘制后缓存。
显示器中永远有一张完整的中缓存可以用来交替前缓存,画面永远不会发生撕裂。显卡不需要等待显示器,可以无限制的更新新的画面,所以快速垂直同步也被称为无阻塞垂直同步。
很多过往帧被显卡复写后抛弃,导致帧与帧之间间隔与运动差异巨大,出现非常明显的帧生成时间不均匀导致的卡顿。
达到解决画面撕裂的同时还不会产生延迟。
显卡输出帧低于刷新率时强制延长Vblank的时间让显示器持续显示上一帧画面,发生帧传递后再刷新显示器。让显卡刷新率动态匹配显卡输出帧。
帧率高于刷新率时由于显示器进行一次逐行扫描的时间不变,当未开启垂直同步时前后缓存交替导致画面撕裂。所以同时要锁帧低于显示器2-4帧或开启垂直同步
让刷新率变为帧率的整数倍,进行两次或三次四次刷新显示一帧去模拟刷新率等于帧率。