我正在用 C++ 中的 OGL/GLFW 编写游戏。
我的游戏始终以 60 fps 的速度运行,并且没有任何画面撕裂。经过一些研究,似乎 glfwSwapInterval()
函数应该能够启用/禁用 V-sync 或 60fps 上限。
但是,无论我传递给函数的值是多少,帧率都保持锁定在 60,并且没有任何撕裂现象。我还检查了 linux 和 nvidia 面板上的合成器设置,但它们没有效果。
我认为这是一个常见的事情,有没有办法绕过这个 fps 上限?
最佳答案
Is there a way to remove 60 fps cap in GLFW?
最简单的方法是使用单缓冲而不是双缓冲。由于单缓冲始终使用相同的缓冲区,因此没有缓冲区交换,也没有“vsync”。
使用 glfwWindowHint
禁用双缓冲:
glfwWindowHint(GLFW_DOUBLEBUFFER, GLFW_FALSE);
GLFWwindow *wnd = glfwCreateWindow(w, h, "OGL window", nullptr, nullptr);
请注意,当您使用单缓冲时,您必须明确强制执行 GL 命令(glFlush
),而不是缓冲区交换(glfwSwapBuffers
)。
另一种可能性是设置从glfwSwapBuffers
开始等待的屏幕更新次数。在将缓冲区交换为 0 之前被调用。这可以通过 glfwSwapInterval
来完成,在使 OpenGL 上下文成为当前上下文(glfwMakeContextCurrent
)之后:
glfwMakeContextCurrent(wnd);
glfwSwapInterval(0);
但请注意,此解决方案是否有效,可能取决于硬件和驱动程序。
关于c++ - 有没有办法取消 GLFW 中的 60 fps 上限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50412575/