有没有办法在GLFW中删除60 fps的上限?

时间:2018-05-18 13:37:19

标签: c++ opengl frame-rate glfw vsync

我在c ++中用OGL / GLFW写游戏。

我的游戏总是以60 fps运行,没有任何屏幕撕裂。在做了一些研究之后,似乎glfwSwapInterval()函数应该能够启用/禁用V-sync或60fps上限。

然而,无论我传递给函数的值如何,帧速率都保持锁定在60并且没有任何撕裂。我还检查了linux和nvidia面板上的compositor设置,它们没有任何效果。

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

1 个答案:

答案 0 :(得分:6)

  

有没有办法在GLFW中删除60 fps上限?

最简单的方法是使用单缓冲而不是双缓冲。因为在单缓冲时始终使用相同的缓冲区,所以没有缓冲区交换,也没有“vsync”。

使用glfwWindowHint禁用双缓冲:

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

注意,当你使用singel缓冲时,你必须通过(glFlush)明确强制执行GL命令,而不是缓冲交换(glfwSwapBuffers)。

另一种可能性是将屏幕更新的数量设置为在将缓冲区交换为0之前从glfwSwapBuffers调用的时间开始等待。在使OpenGL上下文变为当前之后,可以通过glfwSwapInterval完成此操作( glfwMakeContextCurrent):

glfwMakeContextCurrent( wnd );
glfwSwapInterval( 0 );

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