我在c ++中用OGL / GLFW写游戏。
我的游戏总是以60 fps运行,没有任何屏幕撕裂。在做了一些研究之后,似乎glfwSwapInterval()
函数应该能够启用/禁用V-sync或60fps上限。
然而,无论我传递给函数的值如何,帧速率都保持锁定在60并且没有任何撕裂。我还检查了linux和nvidia面板上的compositor设置,它们没有任何效果。
这是我认为常见的事情,有没有办法绕过这个fps上限?
答案 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 );
但请注意,此解决方案是否有效,可能取决于硬件和驱动程序。