glfwSwapInterval(1)
似乎对我不起作用。如果我在CCC中强制VSync或在SFML中强制setVerticalSyncEnabled(true)
我的fps下降到60,但GLFW只是以9000 fps运行。我是以错误的方式解决这个问题还是GLFW被窃听?
答案 0 :(得分:7)
看起来GLFW不希望在启用桌面合成时打开VSync。如果你想要VSync,这将适用于Windows:
#ifdef _WIN32
// Turn on vertical screen sync under Windows.
// (I.e. it uses the WGL_EXT_swap_control extension)
typedef BOOL (WINAPI *PFNWGLSWAPINTERVALEXTPROC)(int interval);
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT = NULL;
wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT");
if(wglSwapIntervalEXT)
wglSwapIntervalEXT(1);
#endif
对于其他操作系统,谷歌会帮助您。
答案 1 :(得分:3)
使用GLFW_USE_DWM_SWAP_INTERVAL选项重建GLFW3。
请参阅glfw/src/config.h
GLFW文档警告抖动问题,但我自己也没有看到。
答案 2 :(得分:1)
发现glfwSwapInterval在窗口和全屏模式之间切换后需要再次调用,否则帧速率将很大。
if (fullScreen)
{
glfwSetWindowMonitor(window, monitor, 0, 0, monitorMode->width, monitorMode->height, monitorMode->refreshRate);
// Added to fix framerate to vertical refresh //
glfwSwapInterval(1);
}
else
{
glfwSetWindowMonitor(window, NULL, 0, 0, monitorMode->width, monitorMode->height, monitorMode->refreshRate);
}
答案 3 :(得分:0)
调用glfwSwapInterval(1); 就在glfwSwapBuffers(window);
之前它应该很烦