Список отображения - Display list

А список отображения (или же файл отображения) - это серия графических команд, которые определяют выходное изображение. Изображение создано (оказано ), выполняя команды для объединения различных примитивы. Эта деятельность чаще всего выполняется специализированным дисплеем или аппаратным обеспечением обработки, частично или полностью независимым от ЦП системы, с целью освобождения ЦП от накладных расходов на обслуживание дисплея и может обеспечивать функции вывода или скорость, превышающие возможности ЦП.[1][2]

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

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

Одной из первых популярных систем с истинным списком отображения была Семейство 8-битных Atari. Список отображения (фактически так называемый в терминологии Atari) представляет собой серию инструкций для АНТИК, сопроцессор видео, используемый в этих машинах. Эта программа, хранящаяся в памяти компьютера и выполняемая ANTIC в реальном времени, может указывать пустые строки, любой из шести текстовых режимов и восьми графических режимов, какие разделы экрана можно прокручивать по горизонтали или вертикали, а также запускать прерывания списка отображения ( называется Растровые прерывания или же ГБЖ в других системах).

В Семейство Amstrad PCW содержит функцию списка отображения, называемую «Roller RAM». Это 512-байтовая область RAM, состоящая из 256 16-битных векторов в RAM, по одному на каждую строку дисплея 720 × 256 пикселей. Каждый вектор определяет расположение 90 байтов монохромных пикселей, которые содержат 720 состояний пикселей линии. 90 байтов из 8 состояний пикселей фактически разнесены с 8-байтовыми интервалами, поэтому между каждым байтом данных пикселей имеется 7 неиспользуемых байтов. Это соответствует тому, как ориентированный на текст PCW создает типичный экранный буфер в ОЗУ, где 8 строк первого символа хранятся в первых 8 байтах, строки второго символа - в следующих 8 байтах и ​​так далее. Оперативная память Roller RAM была реализована для ускорения прокрутки дисплея, поскольку для Z80 с частотой 3,4 МГц было бы неприемлемо медленно перемещать буфер дисплея размером 23 КБ «вручную», то есть программно. Начальная запись Roller RAM, используемая в начале обновления экрана, контролируется записываемым регистром ввода-вывода Z80. Следовательно, экран можно прокручивать, просто изменяя этот регистр ввода / вывода.

Другой системой, использующей аппаратную функцию, подобную списку отображения, является Amiga, который, не случайно, также был разработан некоторыми из тех же людей, которые сделали Atari 8-битный нестандартное оборудование. Аппаратное обеспечение дисплея Amiga было чрезвычайно сложным для своего времени и, будучи однажды направленным на создание режима отображения, оно продолжало делать это автоматически для каждой следующей строки развертки. Компьютер также имел специальный сопроцессор, называемый "Медь ", который запускал простую программу или 'Copper List', предназначенную для изменения аппаратных регистров синхронно с дисплеем. Инструкции Copper List могут указывать Copper ждать, пока дисплей достигнет определенной позиции на экране, а затем изменять содержимое аппаратных регистров. По сути, это был процессор, предназначенный для обслуживания Растровые прерывания. Медь использовалась Workbench для смешивания нескольких режимов отображения (одновременное отображение нескольких разрешений и цветовых палитр на мониторе), а также для создания эффектов радуги и градиента на экране в многочисленных программах. Amiga Copper также была способна переконфигурировать средний кадр спрайтового движка с задержкой только в одну строку развертки. Это позволяло Amiga рисовать более 8 аппаратных спрайтов при условии, что дополнительные спрайты не разделяют строки развертки (или промежуток в одну строку развертки) с более чем 7 другими спрайтами. то есть, пока хотя бы один спрайт закончил рисование, под ним на экране можно было добавить другой спрайт. Кроме того, более поздний 32-битный набор микросхем AGA позволял рисовать спрайты большего размера (больше пикселей в строке), сохраняя при этом то же мультиплексирование. Обратите внимание, что у Amiga также было специальное аппаратное обеспечение блочного сдвига («блиттер»), которое могло рисовать более крупные объекты во фреймбуфер. Это часто использовалось вместо спрайтов или в дополнение к ним.

В более примитивных системах результаты списка отображения могут быть смоделированы, хотя за счет интенсивной записи ЦП в определенные режимы отображения, управление цветом или другие регистры визуальных эффектов в видеоустройстве, а не серию визуализаций. команды, выполняемые устройством. Таким образом, необходимо создать отображаемое изображение, используя какой-либо другой процесс визуализации, либо до, либо во время генерации дисплея, управляемого ЦП. Во многих случаях изображение также изменяется или повторно визуализируется между кадры. Затем изображение отображается различными способами, в зависимости от точного способа реализации кода отображения, управляемого ЦП.

Примеры возможных результатов на этих старых машинах, требующих видео с процессором, включают такие эффекты, как Commodore 64/128. FLI режим, или Обработка радуги на ZX Spectrum.

Устаревание

Списки отображения в значительной степени устарели в современных графических архитектурах, поскольку они представляют собой набор команд в фиксированной функции. Графический конвейер. Современные архитектуры используют шейдеры и объекты буфера вершин, чтобы не связывать производительность графики с ЦПУ. Однако графические API низкого уровня, такие как Вулкан и DirectX 12 отображать список отображения, например, функциональность в виде буферов команд и списков команд.

Рекомендации

  1. ^ Руководство по программированию OpenGL: официальное руководство по изучению OpenGL, версия 1.1 (2-е изд.). Эддисон Уэсли. ISBN  978-0201461381.
  2. ^ «Глава 7 - Руководство по программированию OpenGL». www.glprogramming.com. Аддисон-Везели. Получено 18 ноября 2018.

Смотрите также