Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Буферный ресурс — это коллекция полностью типизированных данных, сгруппированных в элементы. Буферы хранят данные, такие как координаты текстуры в буфере вершины, индексы в буфере индекса, константы шейдеров в буфере констант, векторы позиции, обычные векторы или состояние устройства.
Элемент буфера состоит из 1 до 4 компонентов. Элементы буфера могут включать упакованные значения данных (например, R8G8B8A8 значения поверхности), однобитовые целые числа или четыре 32-разрядных значения с плавающей запятой.
Буфер создается как неструктурированный ресурс. Так как буфер неструктурирован, он не может содержать уровни mip-карты, его нельзя фильтровать при чтении и он не может быть мультисэмплирован.
Типы буферов
Ниже приведены типы ресурсов буфера, поддерживаемые Direct3D 11.
буфер вершин
Буфер вершин содержит данные вершин, используемые для определения геометрии. Данные вершин включают координаты положения, цветовые данные, данные координат текстуры, обычные данные и т. д.
Самый простой пример буфера вершин — это тот, который содержит только данные о положении. Его можно визуализировать, как показано на следующем рисунке.
Чаще всего буфер вершин содержит все данные, необходимые для полного указания трехмерных вершин. Примером этого может быть буфер вершин, содержащий позицию вершины, обычные и текстурные координаты. Обычно эти данные упорядочены в виде наборов поэлементных данных для каждой вершины, как показано на следующем рисунке.
Этот буфер вершин содержит данные по вершинам; каждая вершина хранит три элемента (координаты положения, нормальной и текстуры). Позиция и нормаль обычно задаются тремя 32-разрядными числами с плавающей запятой, а координаты текстуры — двумя 32-разрядными числами с плавающей запятой.
Чтобы получить доступ к данным из буфера вершин, необходимо знать, к какой вершине требуется получить доступ, а также следующие дополнительные параметры буфера:
- Смещение — число байтов с начала буфера до данных для первой вершины.
- BaseVertexLocation — количество байтов от смещения до первой вершины, которую использует соответствующий вызов отрисовки.
Перед созданием буфера вершин необходимо определить его макет. После создания объекта входного макета привяжите его к этапу конвейера сборки входных данных (IA).
Буфер индексов
Индексные буферы содержат целые числа, указывающие смещения в буферах вершин, и используются для более эффективной отрисовки примитивов. Буфер индекса содержит последовательный набор 16-разрядных или 32-разрядных индексов; каждый индекс используется для идентификации вершины в буфере вершин. Буфер индекса можно визуализировать, как показано на следующем рисунке.
Последовательные индексы, хранящиеся в буфере индекса, находятся со следующими параметрами:
- Смещение — это количество байтов относительно базового адреса индексного буфера.
- StartIndexLocation — указывает начальный элемент буфера индекса, отталкиваясь от базового адреса и смещения. Начальная позиция представляет первый индекс для отрисовки.
- IndexCount — количество индексов для рендеринга.
Начало буфера индекса = базовый адрес буфера индекса + смещение (байт) + StartIndexLocation * ElementSize (байт);
В этом вычислении ElementSize — это размер каждого элемента буфера индекса, который равен двум или четырем байтам.
Буфер констант
Буфер констант позволяет эффективно предоставлять константы шейдеров в конвейер. Вы можете использовать буфер константы для хранения результатов этапа потокового вывода. Концептуально буфер констант выглядит так же, как и буфер вершин с одним элементом, как показано на следующем рисунке.
Каждый элемент хранит константу компонента 1–4, определяемую форматом хранимых данных.
Буфер констант может использовать только один флаг привязки, который нельзя объединить с любым другим флагом привязки.
Чтобы считывать константный буфер шейдера из шейдера, используйте функцию загрузки HLSL. Каждый шейдерный этап поддерживает до 15 буферов шейдерных констант; каждый буфер может содержать до 4096 констант.
Связанные разделы