有没有办法取消 GLFW 中 60 fps 的上限?

问题描述 投票:0回答:2

我正在用 C++ 编写 OGL / GLFW 游戏。

我的游戏始终以 60 fps 运行,没有任何屏幕撕裂。经过一些研究,似乎

glfwSwapInterval()
功能应该能够启用/禁用 V-sync 或 60fps 上限。

但是,无论我传递给函数的值是什么,帧率都保持锁定在 60,并且没有任何撕裂现象。我还检查了 linux 和 nvidia 面板上的合成器设置,它们没有效果。

这是我认为很常见的事情,有没有办法绕过这个 fps 上限?

c++ opengl frame-rate glfw vsync
2个回答
17
投票

有没有办法取消 GLFW 中 60 fps 的上限?

最简单的方法是使用单缓冲而不是双缓冲。由于单缓冲始终使用相同的缓冲区,因此没有缓冲区交换,也没有“垂直同步”。

使用

glfwWindowHint
禁用双缓冲:

glfwWindowHint(GLFW_DOUBLEBUFFER, GLFW_FALSE);
GLFWwindow *wnd = glfwCreateWindow(w, h, "OGL window", nullptr, nullptr);

注意,当您使用单缓冲时,您必须通过 (

glFlush
) 来明确强制执行 GL 命令,而不是缓冲区交换 (
glfwSwapBuffers
)。


另一种可能性是设置从调用

glfwSwapBuffers
到将缓冲区交换为 0 之前等待的屏幕更新次数。这可以通过
glfwSwapInterval
来完成,在将 OpenGL 上下文设置为当前上下文之后 (
 glfwMakeContextCurrent
):

glfwMakeContextCurrent(wnd);
glfwSwapInterval(0);

但请注意,此解决方案是否有效,可能取决于硬件和驱动程序。


0
投票

我用的是这个:

glfwSwapInterval(0); // 禁用垂直同步,因此 fps 不限于 60

© www.soinside.com 2019 - 2024. All rights reserved.