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