Текстуры из нескольких элементов (Direct3D 9)
Традиционные текстуры считаются одноэлементными. Текстуры из нескольких элементов позволяют приложениям одновременно записывать данные в несколько элементов текстуры из пиксельного шейдера. Результатом следующего прохода отрисовки является то, что приложение может использовать один или несколько элементов в качестве одноэлементной текстуры, то есть в качестве входных данных для пиксельного шейдера. Эти дополнительные элементы можно рассматривать как временное хранилище для промежуточных результатов, которые будут использоваться в последующем прохождении приложением.
Первое поколение оборудования, предоставляющего эту функцию, имеет следующие ограничения.
- Все поверхности текстур с несколькими элементами будут выделены автоматически. Это ограничение можно устранить, рассматривая его как новый тип формата поверхности с чередованием нескольких каналов RGBA.
- Все элементы текстуры нескольких элементов могут иметь одинаковую битовую глубину. Это ограничение выражается в названии новых форматов surface.
- Текстура из нескольких элементов не может быть основной или отображаемой. Другими словами, он должен быть только за кадром. Это ограничение выражается перечислением формата поверхности.
- Не допускается смешивание, альфа-тест, затуманивание, наложение, растровая операция или маскирование. Обработка шейдера после пикселя не выполняется, за исключением Z-теста и теста набора элементов.
- Текстура не может быть MIP-картой. Создание цепочки MIP завершится ошибкой.
- Один и тот же элемент нельзя задать в качестве текстуры в то же время, когда он является целевым объектом отрисовки. Однако различные элементы одной и той же поверхности текстуры из нескольких элементов могут одновременно быть текстурами и целевыми объектами отрисовки.
- Сглаживание не поддерживается.
- Поверхности текстур с несколькими элементами при использовании в качестве текстуры не могут быть отфильтрованы. Это ограничение можно проверить с помощью CheckDeviceFormat.
- Многоэлейные поверхности текстур не могут быть заблокированы.
- Одновременно можно использовать несколько поверхностей текстур из нескольких элементов, назначив каждую из них различным этапам, как и в случае с обычными текстурами.
- Поверхности текстур из нескольких элементов поддерживают преобразование гамма с преобразования 2.2 на 1.0 в операции чтения, как и в случае с другими форматами текстур.
- Некоторые реализации не применяют маску записи вывода (D3DRS_COLORWRITEENABLE). Те, которые могут иметь независимые цветовые маски записи. Это выражается с помощью нового бита возможности. Количество доступных независимых масок записи цвета будет равно максимальному количеству элементов, которые поддерживает устройство.
- Очистка очищает все элементы текстуры с несколькими элементами, которая задается в качестве целевого объекта отрисовки.
Использование текстур из нескольких элементов выполняется следующим образом:
- Приложения обнаруживают поддержку этой функции, проверяя доступность форматов текстур с несколькими элементами.
- Приложение создает эти поверхности, вызывая 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 указывает, что устройство поддерживает независимые маски записи для нескольких текстур элементов или нескольких целевых объектов отрисовки.
Связанные темы