При включенном Windows Aero разрывов изображения на экране не наблюдается, в отличие от использования базовой темы без Aero.
Но почему игры с вертикальной синхронизацией, похоже, имеют гораздо большую задержку ввода, чем при выполнении чего-либо на рабочем столе? Кажется, что даже оконные игры с выключенной вертикальной синхронизацией синхронизируются лучше, чем если бы они использовали какой-либо встроенный в игру метод.
Почему и как это происходит или кажется происходящим?
решение1
На самом деле, причина, по которой Aero может предотвратить разрывы без принудительного включения VSYNC в приложении, заключается в том, что это композитный оконный менеджер. Он рисует рабочий стол и все окна асинхронно по отношению к любому запущенному приложению.
То есть, когда вы включаете композицию в Windows Vista / 7 (этовсегдавключено в Windows 8), он будет рисовать все окна, используя копию последнего изображения, которое было переставлено с заднего плана на передний. Компоновщик (Microsoft называет его DWM,Менеджер окон рабочего стола) компонует все с включенной VSYNC, и поскольку он рисует, используя копию последнегополностью замененизображение переднего буфера для каждого окна, оно никогда не отображает частично нарисованные кадры. Однако, у него есть неприятный побочный эффект, который не позволяет действительно старому программному обеспечению, разработанному исключительно для рисования в переднем буфере, работать правильно, но современное программное обеспечение этого не делает.
В двух словах, DWM добавляет дополнительный уровень защиты от разрывов. Такой, который позволит любому приложению, работающему в системе, рисовать со скоростью, независимой от частоты обновления дисплея, и при этом предотвращать разрывы. В такой системе в оконном режиме единственное, для чего полезно включение VSYNC в OpenGL или Direct3D, — это на самом деле снижение загрузки CPU/GPU.
Вот почему была создана адаптивная VSYNC. Идея заключается не в том, чтобы наказывать приложения, которые не могут поддерживать частоту обновления дисплея, принудительно снижая множитель частоты обновления (например, 60 Гц --> 30, 20, 15, 10, 12, 6, 5, 4, 3, 2, 1), а в том, чтобы ограничить использование чрезмерной мощности центрального/графического процессора приложениями, которые отрисовывают изображение быстрее, чем монитор может его отображать.
решение2
При включенном Aero диспетчер окон рабочего стола используетдвойная буферизация:
Функция Windows Aero широко использует двойную буферизацию для рисования на экране.
Википедиявот что он говорит о том, как это используется с вертикальной синхронизацией для предотвращения разрывов экрана:
Во время интервала вертикального гашения драйвер отдает команду видеокарте либо быстро копировать область внеэкранной графики в активную область отображения (двойная буферизация), либо рассматривать обе области памяти как отображаемые и просто переключаться между ними вперед и назад (перелистывание страниц).
решение3
Двойная буферизация + V-sync вкл. не дают разрывов. Aero как раз использует эту конфигурацию.
решение4
DWM (технология, которая обеспечивает эффект Aero) визуализирует все на вашем экране как поверхность D3D (что позволяет видео продолжать воспроизводиться на Flip). Эта техника визуализации автоматически предотвращаетразрывая, хотя игровой метод должен быть лучше, чем общий метод DWM (это их собственный движок, в конце концов). Так что, скорее всего, игровой метод либо изначально не так уж хорош, либо не был оптимизирован для вашей конфигурации.