c++ - 有没有办法取消 GLFW 中的 60 fps 上限?

标签 c++ opengl frame-rate glfw vsync

我正在用 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/

相关文章:

c++ - 如何在 C++ 中将键发送到最小化窗口

c++ - 命名空间菜鸟问题 : two cpp files sharing the same namespace have the same variable

android - Android SurfaceView 的低 FPS

c++ - 此 makefile 不更新目标文件

c++ - 为了什么目的可能需要来自 Boost 库的同步原语和容器?

c++ - "Click-through"GLFW窗口?

opengl - 阴影映射多纹理

c++ - 在 OpenGL 中使用自定义顶点数的几何着色器输入?

encoding - 使用 FFMPEG 和可变每个图像时间戳从 PNG 创建视频

xna - 来自少数 Draw() 调用的 Monogame XNA 低帧率