我正在用C++编写一个OGL / GLFW游戏。我的游戏总是以60 fps的速度运行,没有任何屏幕撕裂。在做了一些研究之后,似乎glfwSwapInterval()功能应该能够启用/禁用V同步或60 fps上限。然而,无论我传递给函数的值是多少,帧速率都保持在60,没有任何撕裂。我也检查了Linux和nvidia面板上的合成器设置,它们没有任何效果。这是一个常见的事情,我假设,有没有办法绕过这个fps上限?
glfwSwapInterval()
xnifntxz1#
有没有办法在GLFW中删除60 fps的上限?最简单的方法是使用单缓冲而不是双缓冲。因为单缓冲总是使用相同的缓冲区,所以没有缓冲区交换和“vsync”。使用glfwWindowHint禁用双缓冲:
glfwWindowHint
glfwWindowHint(GLFW_DOUBLEBUFFER, GLFW_FALSE); GLFWwindow *wnd = glfwCreateWindow(w, h, "OGL window", nullptr, nullptr);
字符串注意,当你使用singel缓冲时,你必须通过(glFlush)而不是缓冲区交换(glfwSwapBuffers)来显式强制执行GL命令。另一种可能性是将从交换缓冲区之前调用glfwSwapBuffers的时间开始等待的屏幕更新次数设置为0。这可以通过glfwSwapInterval来完成,在使OpenGL上下文成为当前(glfwMakeContextCurrent)之后:
glFlush
glfwSwapBuffers
glfwSwapInterval
glfwMakeContextCurrent
glfwMakeContextCurrent(wnd); glfwSwapInterval(0);
型但请注意,此解决方案是否有效可能取决于硬件和驱动程序。
ghhaqwfi2#
我用这个:glfwSwapInterval(0); //禁用垂直同步,因此fps不限于60
2条答案
按热度按时间xnifntxz1#
有没有办法在GLFW中删除60 fps的上限?
最简单的方法是使用单缓冲而不是双缓冲。因为单缓冲总是使用相同的缓冲区,所以没有缓冲区交换和“vsync”。
使用
glfwWindowHint
禁用双缓冲:字符串
注意,当你使用singel缓冲时,你必须通过(
glFlush
)而不是缓冲区交换(glfwSwapBuffers
)来显式强制执行GL命令。另一种可能性是将从交换缓冲区之前调用
glfwSwapBuffers
的时间开始等待的屏幕更新次数设置为0。这可以通过glfwSwapInterval
来完成,在使OpenGL上下文成为当前(glfwMakeContextCurrent
)之后:型
但请注意,此解决方案是否有效可能取决于硬件和驱动程序。
ghhaqwfi2#
我用这个:
glfwSwapInterval(0); //禁用垂直同步,因此fps不限于60