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


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

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

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

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

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

  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 указывает, что устройство поддерживает независимые маски записи для нескольких текстур элементов или нескольких целевых объектов отрисовки.

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