Текстуры с несколькими элементами (Direct3D 9)
Традиционные текстуры считаются одноэлементными текстурами. Текстуры с несколькими элементами позволяют приложениям одновременно записывать несколько элементов текстуры из шейдера пикселей. Результатом следующего прохода отрисовки является то, что приложение может использовать один или несколько элементов в качестве одноэлементной текстуры , то есть в качестве входных данных для шейдера пикселей. Эти дополнительные элементы можно считать временным хранилищем промежуточных результатов, которые будут использоваться в последующем передаче приложения.
Первое поколение оборудования, которое предоставляет эту функцию, имеет следующие ограничения:
- Все поверхности текстур с несколькими элементами будут выделены автоматически. Это ограничение рассматривается как новый тип формата поверхности с несколькими каналами RGBA, чередуемыми.
- Все элементы текстуры нескольких элементов могут иметь одну и ту же глубину. Это ограничение выражается именем новых форматов поверхностей.
- Текстура с несколькими элементами не может быть основной или отображаемой. Другими словами, он должен быть только вне экрана. Это ограничение выражается перечислением surface-format.
- Не допускается дитерирование, альфа-тест, туман, смешивание, растр-оп или маскирование. Обработка шейдера после пикселя не выполняется, кроме z-теста и набора элементов.
- Текстура не может быть mipmap. Создание цепочки MIP завершится ошибкой.
- Тот же элемент не может быть задан как текстура одновременно является целевым объектом отрисовки. Однако различные элементы одной и той же поверхности текстуры с несколькими элементами могут одновременно быть текстурами и целевыми объектами отрисовки.
- Не поддерживается защита.
- Поверхности текстур с несколькими элементами, используемые в качестве текстуры, не могут быть отфильтрованы. Это ограничение можно проверить с помощью CheckDeviceFormat.
- Поверхности текстур с несколькими элементами не могут быть заблокированы.
- Несколько поверхностей текстур с несколькими элементами можно использовать одновременно, назначая каждую на различные этапы, как и обычные текстуры.
- Поверхности текстур с несколькими элементами поддерживают преобразование гамма с 2.2 до 1.0 для операции чтения, как и в других форматах текстур.
- Некоторые реализации не применяют маску записи выходных данных (D3DRS_COLORWRITEENABLE). Те, которые могут иметь независимые маски записи цвета. Это выражается с помощью нового бита возможностей. Число доступных независимых масок записи цвета будет равно максимальному количеству элементов, на которых устройство может.
- Clear очищает все элементы текстуры с несколькими элементами, которые задаются в качестве целевого объекта отрисовки.
Использование текстур с несколькими элементами выполняет следующие действия.
- Приложения обнаруживают поддержку этой функции, проверяя доступность форматов текстур с несколькими элементами.
- Приложение создает эти поверхности путем вызова CreateTexture.
- Приложение задает поверхность в качестве целевого объекта отрисовки с помощью вызова SetRenderTarget. Шейдер пикселей предоставляет выходные данные на поверхности с помощью инструкции mov - ps.
- SetTexture вызывается для задания поверхности текстуры с несколькими элементами определенной стадии. Как и в других текстурах, одна и та же поверхность может быть настроена на несколько этапов одновременно.
- SetSamplerState вызывается для задания D3DSAMP_ELEMENTINDEX соответствующего номера элемента в текстуре с несколькими элементами, из которой примеры выборки. Значение по умолчанию для этого состояния равно 0, что означает, что текстуры, отличные от нескольких элементов, будут работать. Если текстура с несколькими элементами имеет недопустимое значение, то если текстура с несколькими элементами имеет ширину только двух элементов, но пример запрашивается, чтобы выборка из четвертого элемента, например.
Поддержка API
Ниже приведена сводка элементов API, поддерживающих текстуры с несколькими элементами:
Формат D3DFMT_MULTI2_ARGB8 поверхности выражает перемешанный характер формата.
Состояние D3DSAMP_ELEMENTINDEX выборки указывает, какой индекс элементов следует использовать.
Следующие состояния отрисовки поддерживают текстуры с несколькими элементами:
- D3DRS_COLORWRITEENABLE1
- D3DRS_COLORWRITEENABLE2
- D3DRS_COLORWRITEENABLE3
D3DRS_COLORWRITEENABLE применяется к нулю целевого объекта отрисовки (или элемента).
Флаг D3DPMISCCAPS_INDEPENDENTWRITEMASKS указывает, что устройство поддерживает независимые маски записи для нескольких текстур элементов или нескольких целевых объектов отрисовки.
Связанные разделы