Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Входной сборщик (IA) вводит треугольники, линии или точки в конвейер отрисовки путем извлечения исходных данных геометрии из 1D-буферов.
Данные вершин могут поступать из нескольких буферов, и к ним можно обращаться в виде структурированных массивов из каждого буфера. Буферы привязаны к отдельному слоту ввода и имеют шаг структуры. Макет данных во всех буферах задается в объявлении входных данных, в котором каждая запись определяет элемент. Элемент содержит входной слот, смещение структуры, тип данных и целевой регистр (для первого активного шейдера в конвейере).
Определенная последовательность вершин создается из данных, извлекаемых из буферов. Данные извлекаются во время обхода, который направляется комбинацией фиксированного состояния функции и различных вызовов Draw*() DDI. Различные примитивные топологии (например, список точек, список линий, список треугольников и полоса треугольников) доступны для того, чтобы последовательность данных вершин представляла собой последовательность примитивов.
Данные вершин можно создать одним из двух способов. Первый способ создания данных вершин — неиндексированная отрисовка, которая является последовательным обходом буферов, содержащих данные вершин. Данные вершин начинаются со смещения начала при каждой привязке буфера. Второй способ создания данных вершин — это индексированная отрисовка, которая представляет собой последовательный обход одного буфера, содержащего скалярные целые индексы. Индексы начинаются с начального смещения в буфере. Каждый индекс указывает, где извлекать данные из буфера, содержащего данные вершины. Значения индекса не зависят от характеристик буферов, к которым они относятся. Буферы описываются объявлениями. Неиндексированные и индексированные отрисовки, каждая по-своему, создают адреса для выборки данных вершин из памяти, а затем объединяют результаты в вершины и примитивы.
Отрисовка инстанцированной геометрии обеспечивается последовательным обходом, который в неиндексированной или индексированной отрисовке проходит по диапазону каждого буфера вершин (в случае неиндексирования) или буфера индексов (в случае индексирования). Буферные привязки можно определить как данные экземпляра или данные вершин. Эта идентификация указывает, как использовать привязанный буфер при выполнении экземплярной отрисовки. Адрес, созданный неиндексированной или индексированной отрисовкой, используется для получения данных вершин, а также для учёта циклов при выполнении экземплярной отрисовки в процессе выполнения. С другой стороны, данные экземпляра всегда последовательно обходятся начиная с смещения для каждого буфера с частотой один шаг на экземпляр (например, один шаг вперед после обхода числа вершин в экземпляре). Частоту шагов для данных экземпляра можно также выбрать как субгармонику частоты экземпляра (т. е. один шаг вперед через один экземпляр, через два экземпляра и так далее).
Еще одним особым случаем IA является возможность считывания буферов, в которые этап вывода потока произвел запись. Такой сценарий обеспечивает новый тип операции рисования, DrawAuto. DrawAuto позволяет использовать динамический объем выходных данных, записанных в буферы потокового вывода, без участия ЦП, чтобы определить, сколько данных было записано на самом деле.
Помимо создания данных вершин из буферов, IA может автоматически создавать три скалярных счетчика значений: VertexID, PrimitiveID и InstanceID для ввода в этапы шейдера в конвейере отрисовки.
В индексированном отображении топологий полос, таких как треугольные полоски, предусмотрен механизм для рисования нескольких полос с помощью одного вызова *Draw*(), т. е. команда *cut для разделения полос.
Среда выполнения Direct3D вызывает следующие функции драйвера для создания, настройки и уничтожения IA: