Случай
WGL описан в ответе eugensk00 .
Для CGL (MacOSX) см. этот ответ на другой вопрос SO.
Для EGL есть eglSwapInterval () функция, но, по-видимому (см. это и это ) она не гарантирует разрыв свободный результат - только ждет заданный период (возможно, это просто из-за сломанных драйверов).
Для GLX (Linux с X11 и т. Д.) Для этого существует как минимум 3 аналогичных расширения с различной степенью функциональности. OpenGL вики в настоящее время перечисляет только один, который не поддерживается Mesa <= 10.5.9 (и, возможно, выше). Вот список от наиболее полнофункционального расширения (перечисленного в вики OpenGL) до наименее: </p>
GLX_EXT_swap_control
Установить интервал обмена для каждого отображаемого отображения: glXSwapIntervalEXT(dpy, drawable, interval)
Получить текущий интервал обмена: glXQueryDrawable(dpy, drawable, GLX_SWAP_INTERVAL_EXT, &interval)
Получите максимальный интервал обмена: glXQueryDrawable(dpy, drawable, GLX_MAX_SWAP_INTERVAL_EXT, &maxInterval)
Отключить Vsync: установите interval
в 0
GLX_MESA_swap_control
Установить интервал обмена для контекста: glXSwapIntervalMESA(interval)
Получить текущий интервал обмена: glXGetSwapIntervalMESA()
Получите максимальный интервал обмена: не поддерживается
Отключить Vsync: установите interval
в 0
GLX_SGI_swap_control
Установить интервал обмена: glXSwapIntervalSGI(interval)
.
Получить текущий интервал обмена: не поддерживается
Получите максимальный интервал обмена: не поддерживается
Отключить Vsync: не поддерживается (interval==0
- ошибка)
Об адаптивной Vsync см. OpenGL wiki .