Что происходит при смене режима отображения? - PullRequest
14 голосов
/ 10 июня 2011

Что происходит при изменении режима отображения (разрешение, глубина) на обычном компьютере?(классические стационарные и ноутбуки)

Это может быть не так тривиально, поскольку видеокарты такие разные, но для них всех одно:

  • Экран становится черным (понятно)так как сигнал выключен)
  • Требуется много секунд, чтобы сигнал вернулся в новом режиме

и если он находится под D3D или GL:

  • Графическое устройство потеряно, и все объекты VRAM должны быть перезагружены, что делает изменение режима еще более длительным.

Может кто-то объяснить основную природу этого и, в частности, почему изменение режима отображения нетривиальное перераспределение backbuffer (s) и занимает такое "долгое" время?

1 Ответ

13 голосов
/ 10 июня 2011

Единственное, что на самом деле меняется, - это настройки так называемого RAMDAC (цифрового аналогового преобразователя, напрямую подключенного к видеопамяти), а сегодня с цифровыми соединениями это больше похоже на RAMTX (передатчик DVI / HDMI / DisplayPort, подключенный квидео RAM).Ветераны-программисты DOS-графики, вероятно, помнят битвы между RAMDAC, спецификацией и бедами собственного кода.

На самом деле, до возвращения сигнала не требуется секунд.Это довольно быстрый процесс, но большинство устройств отображения не торопятся с синхронизацией с новыми параметрами сигнала.На самом деле с хорошо написанными драйверами изменение происходит почти сразу, между вертикальными пробелами.Несколько лет назад, когда дисплеи были, ошибочно, глупее и аналоговыми, после изменения настроек режима видео можно было на короткое время увидеть изображение, сходящее с ума, до тех пор, пока дисплей не будет синхронизирован (возможно, я должен снять видео об этом, покаУ меня все еще есть оборудование, способное на это).

Поскольку на самом деле происходит просто изменение настроек RAMDAC, также не теряются необходимые данные, если основные параметры остаются неизменными: количество бит на пиксель,количество компонентов на пиксель и шаг пикселя.И на самом деле контексты OpenGL обычно не теряют свои данные при изменении режима видео.Конечно, видимые макеты кадрового буфера меняются, но это происходит и при перемещении окна.

Графика DirectX - это немного другая история.Существует эксклюзивный доступ к устройству, и всякий раз при переключении между полноэкранным режимом Direct3D и обычным режимом рабочего стола все графические объекты меняются местами, поэтому графика DirectX настолько запаздывает при переключении с игры на рабочий стол Windows.

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

...