本帖最后由 Ivanonline 于 2021-2-24 17:57 编辑
说是在的,你这张图我真的看的不是太明白。
这边儿有个资料你看一下。
缓冲区:来源:https://zhuanlan.zhihu.com/p/127974083
还是红字比较重要
-------------------------------------------
缓冲区
显卡渲染好一张画面之后,就会把这张画面储存在显存中的特定位置,这个位置就是“缓冲区”,储存之后显卡才会去渲染下一张画面。
如果显卡每秒钟可以产生120张画面是怎么样的情形呢?很显然,就是每1/120 秒就会有一张画面被存入缓冲区中,下一个1/120 秒,新的画面就会把上一张给取代掉,而这个过程,就是我们玩家都很熟悉的“帧数”概念。
那么现在问题就来了,如果显卡每秒可以产生120 张(即120帧)画面,但显示器每秒只能读取60 张(即60Hz),这会出现什么问题呢?
答案就是:画面撕裂。
2
当今显卡的缓冲区分为两个:前缓冲区和后缓冲区。显卡只会将绘制完的图像写入后缓冲区,与此同时只有前缓冲区中的图像会被发送给显示器。
当后缓冲区中的“新鲜”图像写入完成后,程序不会将后缓冲区的画面传输到前缓冲区,而是会进行缓冲区的交换——将前缓冲区和后缓冲区的名字对调,即前缓冲区成了后缓冲区,后缓冲区成了前缓冲区。这样一来,刚刚绘制在后缓冲区的图像就能顺利地传给显示器了。经过这么一折腾,程序就可以在往后缓冲区写入图像的同时,不影响显卡将前缓冲区中的画面传给显示器,然后进行下一次“缓冲区交换”。
这个过程就是显卡设置中常见的“双重缓冲”。
但是双重缓冲有个问题,两个缓冲区随时都可能发生交换,所以就会出现这种情况:前缓冲区中的画面刚传输了一半给显示器,两个缓冲区就发生交换了,后面传输的都是原来后缓冲区中的画面(即下一帧画面)。于是,显示器上的一幅画面成了前后两帧的结合,这就是画面撕裂产生的原因。这种问题在高帧率情况下尤为显著,因为帧率越高,前后缓冲区的交换就越为频繁,这种撕裂感自然很招人烦,尤其是在玩游戏的时候。那么有什么解决方式吗?
这就是“垂直同步”的作用了。打开垂直同步选项后,当显示器尚未完成一帧画面的刷新时,两个缓冲区就不允许交换;只有当显示器刷新完一帧画面时,缓冲区才可以进行交换,这样就杜绝了“在进行数据传输的过程中交换缓冲区“的可能,自然也就解决了画面撕裂的问题。
.......... 虽然整篇文章讲的是垂直同步啊,画面撕裂啊。但是他提到了缓冲区。 我感觉这篇文章挺有价值的。。
|