Как Windows Aero предотвращает разрыв экрана?

14

Когда Windows Aero включен, экран не разрывается, в отличие от использования темы Basic без Aero.

Почему, однако, игры с вертикальной синхронизацией имеют гораздо большую задержку ввода, чем при работе на рабочем столе? Даже кажется, что синхронизированные оконные игры с отключенной V-синхронизацией лучше, чем если бы они использовали любой встроенный в игру метод.

Почему и как это происходит или кажется?

Джейсон Пауэрс Мюррей
источник

Ответы:

8

Фактически, причина, по которой Aero может предотвратить разрыв, не вызывая VSYNC в приложении, заключается в том, что это менеджер окон композитинга. Он рисует рабочий стол и все окна асинхронно относительно любого работающего приложения.

То есть, когда вы включаете композитинг в Windows Vista / 7 (он всегда включен в Windows 8), он будет рисовать все окна, используя копию последнего изображения, которое было заменено сзади вперед. Композитор (Microsoft называет его DWM, Desktop Window Manager ) комбинирует все с включенным VSYNC, и поскольку он рисует, используя копию последнего полностью замененного изображения переднего буфера для каждого окна, он никогда не отображает частично нарисованные кадры. Однако у него есть неприятный побочный эффект - он не позволяет действительно старому программному обеспечению, предназначенному исключительно для правильной работы в переднем буфере, работать с современным программным обеспечением.

В двух словах, DWM добавляет дополнительный уровень защиты от разрывов. Тот, который позволит любому приложению, работающему в системе, рисовать со скоростью, независимо от частоты обновления дисплея, и при этом предотвращать разрыв. В такой системе, в оконном режиме, единственное, для чего хорошо использовать VSYNC в OpenGL или Direct3D, - это фактически снизить нагрузку на CPU / GPU.

Вот почему был создан адаптивный VSYNC, идея которого состоит не в том, чтобы наказывать приложения, которые не могут поддерживать частоту обновления дисплея, принудительно устанавливая их в более низкий коэффициент частоты обновления (например, 60 Гц -> 30, 20, 15, 10, 12). , 6, 5, 4, 3, 2, 1), но для ограничения приложений, которые рисуют быстрее, чем монитор может отображать изображения из-за чрезмерного использования мощности ЦП / ГП.

Андон М. Коулман
источник
5

При включенном Aero диспетчер окон рабочего стола использует двойную буферизацию :

Функция Windows Aero широко использует двойную буферизацию для рисования на экране.

Источник

В Википедии сказано, как это используется с V-sync для предотвращения разрыва экрана:

В течение интервала вертикального гашения драйвер приказывает видеокарте либо быстро копировать область вне экрана в активную область отображения (двойная буферизация), либо обрабатывать обе области памяти как отображаемые, и просто переключаться между ними (страница). листать).

bwDraco
источник
6
Двойная буферизация не предотвращает разрыв, она препятствует тому, чтобы пользователь видел вещи в процессе рендеринга. Если у вас двойная буферизация и вы переворачиваете страницу в середине обновления экрана, вы все равно будете разрываться.
Wyzard
Конечно, вы все равно можете получить разрыв, если неправильно выполните двойную буферизацию, но дело в том, что DB можно использовать для предотвращения разрывов.
nitro2k01
3

Двойная буферизация + V-синхронизация не приводит к разрыву. Aero использует эту конфигурацию.

DeepSpace101
источник
2

DWM (технология, включающая эффект Aero) отображает все на экране в виде поверхности D3D (что позволяет видео продолжать воспроизводиться на Flip). Эта техника рендеринга автоматически предотвращает разрыв , хотя игровой метод должен быть лучше, чем общий метод DWM (в конце концов, это их собственный движок). Так что, скорее всего, игровой метод либо не очень хорош, либо не оптимизирован для вашей конфигурации.

Мартин Кахья Пауло
источник
2
Само по себе использование Direct3D не предотвращает разрыв экрана. Это двойная буферизация.
bwDraco