Поделиться через


Текстуры из нескольких элементов (Direct3D 9)

Традиционные текстуры считаются одноэлементными. Текстуры из нескольких элементов позволяют приложениям одновременно записывать данные в несколько элементов текстуры из пиксельного шейдера. Результатом следующего прохода отрисовки является то, что приложение может использовать один или несколько элементов в качестве одноэлементной текстуры, то есть в качестве входных данных для пиксельного шейдера. Эти дополнительные элементы можно рассматривать как временное хранилище для промежуточных результатов, которые будут использоваться в последующем прохождении приложением.

Первое поколение оборудования, предоставляющего эту функцию, имеет следующие ограничения.

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

Использование текстур из нескольких элементов выполняется следующим образом:

  1. Приложения обнаруживают поддержку этой функции, проверяя доступность форматов текстур с несколькими элементами.
  2. Приложение создает эти поверхности, вызывая CreateTexture.
  3. Приложение задает поверхность в качестве целевого объекта отрисовки с помощью вызова SetRenderTarget . Пиксельный шейдер предоставляет выходные данные на поверхности с помощью инструкции mov - ps .
  4. Метод SetTexture вызывается для установки поверхности текстуры из нескольких элементов на определенный этап. Как и в случае с другими текстурами, для одной и той же поверхности можно задать несколько этапов одновременно.
  5. Метод SetSamplerState вызывается для задания D3DSAMP_ELEMENTINDEX соответствующего номера элемента в текстуре с несколькими элементами, из которой выполняется выборка. Значение по умолчанию для этого состояния равно 0, что означает, что текстуры не из нескольких элементов будут работать. Установка этого состояния в недопустимое число приводит к неопределенному поведению, если текстура с несколькими элементами имеет ширину только двух элементов, но средство выборки запрашивается, например, выборку из четвертого элемента.

Поддержка API

Ниже приведены общие сведения об элементах API, поддерживающих текстуры из нескольких элементов.

  • Формат поверхности D3DFMT_MULTI2_ARGB8 выражает чередование формата.

  • Состояние D3DSAMP_ELEMENTINDEX выборки указывает, какой индекс элемента следует использовать.

  • Следующие состояния отрисовки поддерживают текстуры с несколькими элементами:

    • D3DRS_COLORWRITEENABLE1
    • D3DRS_COLORWRITEENABLE2
    • D3DRS_COLORWRITEENABLE3

    D3DRS_COLORWRITEENABLE применяется к нулевому целевому объекту (или элементу).

  • Флаг D3DPMISCCAPS_INDEPENDENTWRITEMASKS указывает, что устройство поддерживает независимые маски записи для нескольких текстур элементов или нескольких целевых объектов отрисовки.

Конвейер пикселей