Список отображения
![]() | В этом разделе могут содержаться материалы, не относящиеся к теме статьи . ( январь 2024 г. ) |
Список отображения , также называемый списком команд в Direct3D 12 и буфером команд в Vulkan , представляет собой серию графических команд, которые могут быть запущены позже при выполнении списка. [1] Системы, в которых используется функциональность списка отображения, называются системами с сохраненным режимом , а системы, которые этого не делают, называются системами с немедленным режимом . В OpenGL списки отображения полезны для перерисовки одной и той же геометрии или многократного применения набора изменений состояния. [2] [3] Это преимущество также используется со списками команд пакета Direct3D 12. В Direct3D 12 и Vulkan списки отображения регулярно используются для покадровой записи и выполнения.
Появления в списке отображения функций [ править ]
Одной из первых систем с настоящим списком отображения были 8-битные компьютеры Atari . Список отображения (на самом деле так называемый в терминологии Atari) представляет собой серию инструкций для ANTIC , видеосопроцессора, используемого в этих машинах. Эта программа, хранящаяся в памяти компьютера и выполняемая ANTIC в режиме реального времени, может указывать пустые строки, любой из шести текстовых режимов и восьми графических режимов, какие части экрана можно прокручивать с тонкой прокруткой по горизонтали или вертикали, а также запускать список отображения. Прерывания (называемые растровыми прерываниями или HBI в других системах). [4]
Семейство Amstrad PCW содержит функцию списка отображения, называемую «Roller RAM». Это 512-байтовая область ОЗУ, состоящая из 256 16-битных векторов в ОЗУ, по одному на каждую строку дисплея разрешением 720×256 пикселей. Каждый вектор определяет расположение 90 байт монохромных пикселей, которые содержат 720 состояний пикселей строки. 90 байтов 8 состояний пикселей расположены с интервалом в 8 байт, поэтому между каждым байтом данных пикселей имеется 7 неиспользуемых байтов. Это соответствует тому, как текстово-ориентированный PCW создает типичный экранный буфер в оперативной памяти, где 8 строк первого символа хранятся в первых 8 байтах, строки второго символа - в следующих 8 байтах и так далее. Roller RAM был реализован для ускорения прокрутки дисплея, поскольку для Z80 с частотой 3,4 МГц было бы неприемлемо медленно перемещать буфер дисплея размером 23 КБ «вручную», то есть программно. Стартовая запись Roller RAM, используемая в начале обновления экрана, управляется записываемым регистром ввода-вывода Z80. Следовательно, экран можно прокручивать, просто изменяя этот регистр ввода-вывода. [ нужна ссылка ]
Другая система, использующая аппаратную функцию, подобную списку отображения, — это Amiga , которая, не случайно, также была разработана теми же людьми, которые разработали специальное оборудование для 8-битных компьютеров Atari. Получив указание создать режим отображения, он будет продолжать делать это автоматически для каждой следующей строки сканирования. Компьютер также включал специальный сопроцессор под названием « Copper », который запускал простую программу или «Copper List», предназначенную для изменения аппаратных регистров синхронно с дисплеем. Инструкции Copper List могут предписать Copper ждать, пока дисплей достигнет определенной позиции на экране, а затем изменить содержимое аппаратных регистров. По сути, это был процессор, предназначенный для обслуживания растровых прерываний . Copper использовался Workbench для смешивания нескольких режимов отображения (несколько разрешений и цветовых палитр на мониторе одновременно), а также в многочисленных программах для создания эффектов радуги и градиента на экране. Amiga Copper также была способна перенастраивать средний кадр движка спрайтов с задержкой всего в одну строку сканирования. Это позволяло Amiga рисовать более 8 своих аппаратных спрайтов, при условии, что дополнительные спрайты не имели общих строк развертки (или одного разрыва в строке развертки) с более чем 7 другими спрайтами. то есть, пока хотя бы один спрайт закончил отрисовку, под ним на экране можно было добавить другой спрайт. Кроме того, более поздний 32-битный набор микросхем AGA позволял рисовать спрайты большего размера (больше пикселей в строке), сохраняя при этом то же мультиплексирование. У Amiga также было специальное оборудование для сдвига блоков («блиттер»), которое могло помещать более крупные объекты в кадровый буфер. Это часто использовалось вместо спрайтов или в дополнение к ним. [ нужна ссылка ]
В более примитивных системах результаты списка отображения могут быть смоделированы, хотя и за счет интенсивной записи ЦП в определенные режимы отображения, управления цветом или других регистров визуальных эффектов в видеоустройстве, а не за серию выполняемых команд рендеринга. устройством. Таким образом, необходимо создать отображаемое изображение, используя какой-либо другой процесс рендеринга, либо до, либо во время выполнения генерации дисплея, управляемой ЦП. Во многих случаях изображение также модифицируется или перерисовывается между кадрами . Затем изображение отображается различными способами, в зависимости от того, каким именно образом реализован код отображения, управляемый ЦП. [ нужна ссылка ]
Commodore 64/128 Примеры результатов, возможных на этих старых машинах, требующих видео, управляемого ЦП, включают такие эффекты, как режим FLI или обработка Rainbow на ZX Spectrum. [ нужна ссылка ]
Использование в OpenGL [ править ]
Чтобы разграничить список отображения, glNewList
и glEndList
используются функции, а для выполнения списка используется glCallList
используется функция. Почти все команды рендеринга, возникающие между вызовами функций, сохраняются в списке отображения. Команды, влияющие на состояние клиента, не сохраняются в списках отображения. [5] Списки отображения называются целочисленными значениями, и создание списка отображения с тем же именем, что и уже созданный, переопределяет первый. [6]
The glNewList
Функция ожидает два аргумента: целое число, представляющее имя списка, и перечисление для режима компиляции. Два режима включают в себя GL_COMPILE_AND_EXECUTE
, который компилируется и немедленно выполняется, и GL_COMPILE
, который только компилирует список. [7]
Списки отображения позволяют использовать шаблон рендеринга в режиме сохранения , который представляет собой систему, в которой графические команды записываются (сохраняются) для последовательного выполнения в более позднее время. Это противоречит немедленному режиму , в котором графические команды немедленно выполняются при вызове клиента. [8]
Использование в Direct3D 12 [ править ]
Списки команд создаются с помощью ID3D12Device::CreateCommandList
или ID3D12Device4::CreateCommandList1
функции. [9] Списки команд могут быть созданы в нескольких типах: прямые, групповые, вычислительные, копирующие, декодирование видео, обработка видео и кодирование видео. Списки прямых команд указывают, что список команд может выполнять графический процессор и не наследует никакого состояния графического процессора. [10] Пакеты лучше всего использовать для хранения и выполнения небольших наборов команд любое количество раз. Это используется иначе, чем обычные списки команд, где команды, хранящиеся в списке команд, обычно выполняются только один раз. [9] Списки команд вычислений используются для общих вычислений, обычно для расчета MIP-карт . [11] Список команд копирования предназначен исключительно для копирования, а списки команд декодирования видео и обработки видео предназначены для декодирования и обработки видео соответственно. [10]
После создания списки команд находятся в состоянии записи. Списки команд можно использовать повторно, вызвав ID3D12GraphicsCommandList::Reset
функция. После записи команд список команд необходимо вывести из состояния записи, вызвав ID3D12GraphicsCommandList::Close
. Список команд затем выполняется путем вызова ID3D12CommandQueue::ExecuteCommandLists
. [9]
Устаревание [ править ]
Списки отображения в значительной степени устарели в современных графических архитектурах, поскольку они представляют собой набор команд в графическом конвейере с фиксированными функциями . Современные архитектуры используют шейдеры и объекты буфера вершин , чтобы избежать привязки производительности графики к процессору. Из-за особенностей списка отображения он должен копировать каждую команду и ее данные, что может быть проблемой для определенных сред, где не хватает памяти, и в целом может быть неэффективно. [5] Однако в Vulkan и Direct3D 12 по-прежнему практикуются функции отображения списков в виде буферов команд и списков команд.
См. также [ править ]
Ссылки [ править ]
- ^ «Глава 7 — Руководство по программированию OpenGL» . www.glprogramming.com . Аддисон-Везели . Проверено 18 ноября 2018 г.
- ^ Руководство по программированию OpenGL: официальное руководство по изучению OpenGL, версия 1.1 (2-е изд.). Эддисон Уэсли. 1997. ISBN 978-0201461381 .
- ^ Марк Сигал, Курт Экли, Дизайн графического интерфейса OpenGL. http://www.graphics.stanford.edu/courses/cs448a-01-fall/design_opengl.pdf
- ^ Смолл, Дэвид; Маленький, Сэнди; Бланк, Джордж (1983). Креативная Атари . ISBN 978-0-916688-34-9 .
- ↑ Перейти обратно: Перейти обратно: а б Марц, Пол (2006). OpenGL Distilled (1-е изд.). Аддисон-Уэсли Профессиональный PTG. ISBN 9780132701785 . Проверено 28 декабря 2023 г.
- ^ Райт, Ричард С.; Хаемель, Николас; Селлерс, Грэм; Липчак, Бенджамин (2010). OpenGL SuperBible: комплексное руководство и справочник (5-е изд.). Аддисон-Уэсли Профессионал. ISBN 978-0-321-71261-5 .
- ^ Уайт, Стив (09 марта 2021 г.). «функция glNewList (Gl.h) — приложения Win32» . Learn.microsoft.com . Проверено 28 декабря 2023 г.
- ^ Куинн Радич (30 мая 2018 г.). «Сохраненный режим и немедленный режим» . Win32-приложения . Майкрософт . Проверено 21 декабря 2019 г.
- ↑ Перейти обратно: Перейти обратно: а б с Уайт, Стивен; Дженкс, Альма; бадасахог; Коултер, Дэвид; Келли, Джон; Кинросс, Остин; Венцель, Майра; Джейкобс, Майк; Сатран, Майкл (30 декабря 2021 г.). «Создание и запись списков команд и пакетов — приложения Win32» . Learn.microsoft.com . Проверено 5 января 2024 г.
- ↑ Перейти обратно: Перейти обратно: а б Уайт, Стив (14 февраля 2023 г.). «D3D12_COMMAND_LIST_TYPE (d3d12.h) — приложения Win32» . Learn.microsoft.com . Проверено 6 января 2024 г.
- ^ Логджини, Риккардо (31 октября 2020 г.). «Вычислительные шейдеры в D3D12» . Риккардо Логджини . Проверено 6 января 2024 г.
Дальнейшее чтение [ править ]
- Уайт, Стивен; Дэниэлссон, Дэвид; Дженкс, Альма; Сатран, Майкл (08 марта 2023 г.). «Философия проектирования очередей команд и списков команд — приложений Win32». Learn.microsoft.com . Проверено 26 января 2024 г.