垂直同步方式
如果将其打开,则在完成渲染后
调用交换缓冲区函数后,您开始阻塞并等待
等待直到显示器完全刷新屏幕上的前一个缓冲区的内容,并向您发出可以下次刷新的信号,然后实际缓冲区交换swapBuffer函数将阻塞,直到完成实际交换为止,您可以到目前为止开始刷新
每次看到这种方式时,它都必须是完整的图像
如果关闭
然后您可以随时交换前后缓冲区
那么也许屏幕的一半是前一帧的图像,屏幕的一半是下一帧的图像
您怎么说61FPS
首先,我们必须深入研究您所谈论的FPS是指实际的渲染FPS还是显示刷新帧速率

显示刷新帧速率始终是显示器的刷新速率,因为显示器以该频率刷新屏幕
无论渲染速度有多快,他都会在不关心GPU是否准备好接收下一帧数据时刷新
无论如何,他都会将当前的前缓冲区刷新到屏幕上
FPS的实际呈现方式取决于程序的设计方式
如果很简单,那就是
while (true)
{
render();
swapBuffer();
}
因为swapBuffer被阻塞
因此,显示屏的刷新率必须为瞬时(强调瞬时),以FPS为倍数
由于超时到期,显示器可以继续扫描而无需等待您
您至少要等到下一个显示刷新信号

对于60hz的显示器,实际渲染帧速率可能一直为60、30、20、15、12、10、9.8、7.5 ... ....直到无限小
但是另一个复杂的设计是
由于在交换缓冲区时被阻塞,因此实际上仍然可以绘制后缓冲区.
所以您可以打开两个线程
一个线程负责交换缓冲区
一个线程负责连续使用后台缓冲区(实际上,这里的后台缓冲区是一个双缓冲区,而前台缓冲区一起形成了传奇的三重缓冲区)
这里的同步和细节更加复杂(至于为什么要进行三重缓冲,因为必须确保当垂直同步信号到来时,在后备缓冲区中必须有一个可以交换的缓冲区,否则,GPU将继续占用后缓冲区. 错过和前缓冲区交换会议)
好处是它不会浪费阻塞时间
但这对一般情况不利
通常,这意味着您的实际渲染帧速率远高于刷新帧速率

实际上,如果继续执行此操作,则许多继续在后缓冲区上绘制的东西都是废帧,因为它们最终不会被刷新到监视器上
仅当您的实际渲染帧频低于显示刷新率时
然后执行此操作以防止瞬时实际渲染帧速率直接减半
换句话说,当渲染压力很高时,这样做将获得更有效的渲染帧
渲染帧速率将不受刷新速率的限制
但是这种设计将导致GPU一直渲染,从而导致更多的功耗
(实际上,该方案同时包括垂直同步和非垂直同步的优缺点)
但是,选项2也是利弊. 尽管它可以获得更有效的渲染帧,但它是不稳定的,也就是说,可能会有三个刷新帧和一个有效渲染帧,然后有两个刷新帧和一个有效渲染帧. 比较第一个计划
直观的描述是
当绘制压力突然增加时,似乎有突然的变化. 您显然会发现该渲染已跳过帧,但这是稳定的跳帧

当渲染压力突然增加时,似乎并没有太大的变化,总体流程会稍微平滑一些,但是会有一种波动感,就像它将跳过更多的帧而跳过更少的帧.
最后,您提到了显示器是否现在可以24hz运行
这取决于您的显示器是否支持. 很容易检查.
直接检查显示设置的分辨率和刷新率,以查看是否存在24hz模式(尽管通常不存在)
如果有,可以. 如果没有,那就没有. 就这么简单.
最后,我将为您澄清概念
GPU渲染帧速率和显示刷新速率完全不同
根据程序设计,GPU渲染帧速率可能受到刷新速率的限制,也可能不受刷新速率的限制
反过来,刷新率永远不会受到任何因素的控制,所以雷鸣般
这意味着游戏的FPS太不准确
游戏的FPS过多,渲染逻辑,物理等都可以具有独立的FPS
所以这种事情是对特定游戏的特定分析,与游戏引擎的设计有很大关系
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-306598-1.html
中国几十年前就打过3--4次好不好
看哭了
我们这些老家伙积累点钱防老