2013-04-29 4 views
9

glfwSwapInterval(1), похоже, не работает для меня. Если я принудительно VSync в CCC или setVerticalSyncEnabled(true) в SFML, мои fps упадут до 60, но GLFW просто продолжает работать со скоростью 9000 кадров в секунду. Я иду об этом неправильно или прослушивается GLFW?GLFW VSync не работает

+0

Какой графический процессор вы используете? GLFW FAQ [говорит что-то] (http://www.glfw.org/faq.html#33__why_doesnt_glfwswapinterval_work) о 'glfwSwapInterval' не работает на некоторых драйверах ATI. Я никогда не использовал GLFW, но вы могли бы попробовать напрямую вызвать '(PFNWGLSWAPINTERVALEXTPROC) wglGetProcAddress (" wglSwapIntervalEXT ")'? –

+0

@EdwardA да это ATI. Зачем же тогда работать в SFML? 'wglSwapIntervalEXT' работает по какой-то причине ... Так что GLFW прослушивается? – mwerschy

+0

Я не могу сказать вам точно, хотя, если 'wglSwapIntervalEXT' работает, это означает, что это имеет какое-то отношение к GLFW. Вы можете попробовать загрузить [источник GLFW] (http://www.glfw.org/download.html), скомпилировать свою программу вместе с ней и поставить точку останова @ [строка 831 window.c] (https: // github. com/glfw/glfw-legacy/blob/master/lib/window.C# L831) и [строка 1638 win32_window.c] (https://github.com/glfw/glfw-legacy/blob/master/lib/win32 /win32_window.c#L1638), чтобы увидеть, что происходит на самом деле. Это может быть один из тех, если проверки не выполняются. –

ответ

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 

Для других ОС Google поможет вам.

+2

Это исправление не работало на моем Intel HD 4600, так как адрес proc был 0. Но настройка GLFW3 для использования GLFW_USE_DWM_SWAP_INTERVAL. – Bram

3

Восстановить GLFW3 с опцией GLFW_USE_DWM_SWAP_INTERVAL.

См glfw/src/config.h

Документы GLFW предупредят о проблемах джиттера, но я не вижу тех, кто сам.

+2

С выпуском 3.1.2 этот флаг был удален; однако, исправление также включено, поэтому он больше не нужен :) – legends2k