glfwSwapInterval(1)
, похоже, не работает для меня. Если я принудительно VSync в CCC или setVerticalSyncEnabled(true)
в SFML, мои fps упадут до 60, но GLFW просто продолжает работать со скоростью 9000 кадров в секунду. Я иду об этом неправильно или прослушивается GLFW?GLFW VSync не работает
ответ
Хорошо выглядит, что 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 поможет вам.
Это исправление не работало на моем Intel HD 4600, так как адрес proc был 0. Но настройка GLFW3 для использования GLFW_USE_DWM_SWAP_INTERVAL. – Bram
Восстановить GLFW3 с опцией GLFW_USE_DWM_SWAP_INTERVAL.
См glfw/src/config.h
Документы GLFW предупредят о проблемах джиттера, но я не вижу тех, кто сам.
С выпуском 3.1.2 этот флаг был удален; однако, исправление также включено, поэтому он больше не нужен :) – legends2k
Какой графический процессор вы используете? GLFW FAQ [говорит что-то] (http://www.glfw.org/faq.html#33__why_doesnt_glfwswapinterval_work) о 'glfwSwapInterval' не работает на некоторых драйверах ATI. Я никогда не использовал GLFW, но вы могли бы попробовать напрямую вызвать '(PFNWGLSWAPINTERVALEXTPROC) wglGetProcAddress (" wglSwapIntervalEXT ")'? –
@EdwardA да это ATI. Зачем же тогда работать в SFML? 'wglSwapIntervalEXT' работает по какой-то причине ... Так что GLFW прослушивается? – mwerschy
Я не могу сказать вам точно, хотя, если '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), чтобы увидеть, что происходит на самом деле. Это может быть один из тех, если проверки не выполняются. –