VSync: Vertical Synchronization (Вертикальная синхронизация)
Вертикальная синхронизация (VSync: Vertical Synchronization) — это опциональный параметр поведения драйвера видеокарты. Включённая вертикальная синхронизация означает, что после отрисовки очередного кадра, во время переключения буферов (функция SwapBuffers() в OpenGL) драйвер будет ждать начала очередного обратного хода луча монитора, и только потом переключит экранные буферы.
Картинка на мониторах с электронно-лучевой трубкой отрисовывается лучом из электронов, который последовательно отрисовывает строки слева направо, потом возвращается в начало очередной строки (задержка горизонтальной синхронизации), затем отрисовывает следующую строку и т.п. После того, как луч попал в правый нижний угол экрана, он возвращается в левый верхний угол (время, за которое он возвращается, называется задержкой вертикальной синхронизации). (На самом деле, в цветных мониторах три луча — R, G, B, но принцип тот же.)
Зачем нужна вертикальная синхронизация? Дело в том, что время задержки вертикальной синхронизации обратного хода луча является идеальным для переключения экранных буферов. Если переключить буферы в любое другое время, то часть изображения на экране будет принадлежать старому кадру, а часть — новому. Из-за этого появятся артефакты «файтинга» между кадрами — может стать заметным неприятное дрожание, и даже при высоких FPS анимация визуально не будет выглядеть плавной.
Однако, так как при вертикальной синхронизации делается задержка, то FPS неизбежно будет меньше, чем на аналогичной сцене, но с выключенным vsync. Это иногда неприемлемо, например, в разнообразных графических тестах.
Ручное включение или отключение вертикальной синхронизации.
Включить или выключить vsync обычно можно в настройках драйвера видеокарты. Открываете Display Properties (правой кнопкой мыши кликаете по декстопу и выбираете пункт выпадающего меню Properties), выбираете последнюю закладку Settings, нажимаете кнопку Advanced, находите настройки для ожидания вертикальной синхронизации (Wait for Vertical Sync), отключаете или включаете.
Программное включение или отключение вертикальной синхронизации.
Чтобы программно включить или выключить VSync в OpenGL, выполните следующий код: