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

pkln4tw6  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(107)

我正在用C++编写一个OGL / GLFW游戏。
我的游戏总是以60 fps的速度运行,没有任何屏幕撕裂。在做了一些研究之后,似乎glfwSwapInterval()功能应该能够启用/禁用V同步或60 fps上限。
然而,无论我传递给函数的值是多少,帧速率都保持在60,没有任何撕裂。我也检查了Linux和nvidia面板上的合成器设置,它们没有任何效果。
这是一个常见的事情,我假设,有没有办法绕过这个fps上限?

xnifntxz

xnifntxz1#

有没有办法在GLFW中删除60 fps的上限?
最简单的方法是使用单缓冲而不是双缓冲。因为单缓冲总是使用相同的缓冲区,所以没有缓冲区交换和“vsync”。
使用glfwWindowHint禁用双缓冲:

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

字符串
注意,当你使用singel缓冲时,你必须通过(glFlush)而不是缓冲区交换(glfwSwapBuffers)来显式强制执行GL命令。
另一种可能性是将从交换缓冲区之前调用glfwSwapBuffers的时间开始等待的屏幕更新次数设置为0。这可以通过glfwSwapInterval来完成,在使OpenGL上下文成为当前(glfwMakeContextCurrent)之后:

glfwMakeContextCurrent(wnd);
glfwSwapInterval(0);


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

ghhaqwfi

ghhaqwfi2#

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

相关问题