glfwSwapInterval(1)无法启用vsync?

时间:2013-04-29 18:18:42

标签: c++ windows opengl glfw

glfwSwapInterval(1)似乎对我不起作用。如果我在CCC中强制VSync或在SFML中强制setVerticalSyncEnabled(true)我的fps下降到60,但GLFW只是以9000 fps运行。我是以错误的方式解决这个问题还是GLFW被窃听?

4 个答案:

答案 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);

之前

它应该很烦