Man*_*anu 6 c++ opengl frame-rate vsync glfw
我正在用C++写一个带OGL/GLFW的游戏.
我的游戏总是以60 fps运行,没有任何屏幕撕裂.在做了一些研究之后,似乎该glfwSwapInterval()功能应该能够启用/禁用V-sync或60fps上限.
但是,无论我传递给函数的值如何,帧速率都保持锁定在60并且没有任何撕裂.我还检查了linux和nvidia面板上的compositor设置,它们没有任何效果.
这是我认为常见的事情,有没有办法绕过这个fps上限?
有没有办法消除GLFW中的60 fps上限?
最简单的方法是使用单缓冲而不是双缓冲。由于在单个缓冲中始终使用相同的缓冲区,因此没有缓冲区交换,也没有“ vsync”。
使用glfwWindowHint禁用双重缓冲:
glfwWindowHint( GLFW_DOUBLEBUFFER, GL_FALSE );
GLFWwindow *wnd = glfwCreateWindow( w, h, "OGL window", nullptr, nullptr );
Run Code Online (Sandbox Code Playgroud)
注意,当您使用singel缓冲时,则必须通过(glFlush)而不是缓冲区交换(glfwSwapBuffers)来显式强制执行GL命令。
另一种可能是将屏幕更新的次数设置为从glfwSwapBuffers调用之时开始,直到将缓冲区交换为0为止。这可以通过glfwSwapInterval将OpenGL上下文设置为当前(glfwMakeContextCurrent)后通过来完成:
glfwMakeContextCurrent( wnd );
glfwSwapInterval( 0 );
Run Code Online (Sandbox Code Playgroud)
但是请注意,此解决方案是否有效,可能取决于硬件和驱动程序。
| 归档时间: |
|
| 查看次数: |
4145 次 |
| 最近记录: |