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


Текстуры вершин в vs_3_0 (DirectX HLSL)

Модель вершинного шейдера 3.0 поддерживает поиск текстур в вершинном шейдере с помощью оператора texldl - vs texture load. Подсистема вершин содержит четыре этапа выборки текстур с именами D3DVERTEXTEXTURESAMPLER0, D3DVERTEXTEXTURESAMPLER1, D3DVERTEXTEXTURESAMPLER2 и D3DVERTEXTEXTURESAMPLER3. Они отличаются от образца карты смещения и выборки текстур в обработчике пикселей.

Для выборки текстур, заданных на этих четырех этапах, можно использовать подсистему вершин и запрограммировать этапы с помощью метода CheckDeviceFormat . Задайте текстуры на этих этапах с помощью SetTexture с индексом этапа D3DVERTEXTEXTURESAMPLER0 по D3DVERTEXTEXTURESAMPLER3. В вершинном шейдере появился новый регистр (например, в ps_2_0), который представляет выборку текстуры вершин. Этот регистр необходимо определить в шейдере перед его использованием.

Приложение может запрашивать, поддерживается ли формат в качестве текстуры вершины, вызывая Метод CheckDeviceFormat с D3DUSAGE_QUERY_VERTEXTEXTURE.

Примечание

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

 

Функциональные возможности идентичны текстурам пикселей, за исключением следующих:

  • Анизотропная фильтрация текстур не поддерживается, поэтому D3DSAMP_MAXANISOTROPY игнорируется и D3DTEXF_ANISOTROPIC не может быть задана для увеличения или уменьшения на этих этапах.
  • Скорость сведений об изменениях недоступна, поэтому приложению необходимо вычислить уровень детализации и предоставить эти сведения в качестве параметра для texldl и .

К ним относятся указанные ниже ограничения.

  • Как и в пиксельных шейдерах, если поддерживаются многоэлементные текстуры, D3DSAMP_ELEMENTINDEX используется для определения элемента для выборки.
  • Для этих этапов D3DSAMP_DMAPOFFSET состояния игнорируется.
  • Используйте CheckDeviceFormat с D3DUSAGE_QUERY_VERTEXTEXTURE" , чтобы запросить текстуру, чтобы узнать, можно ли ее использовать в качестве текстуры вершин.
  • VertexTextureFilterCaps указывает, какие фильтры разрешены в выборках текстур вершин. D3DPTFILTERCAPS_MINFANISOTROPIC и D3DPTFILTERCAPS_MAGFANISOTROPIC запрещены.

Регистры этапа выборки

Регистр этапа выборки определяет единицу выборки, которую можно использовать в инструкциях загрузки текстур. Единица выборки соответствует этапу выборки текстуры, инкапсулируя конкретное состояние выборки, предоставленное в SetSamplerState.

Каждый дискретизатор уникальным образом определяет одну поверхность текстуры, для которых задан соответствующий дискретизатор с помощью SetTexture. Однако одну и ту же поверхность текстуры можно задать для нескольких выборок.

Во время рисования текстуру нельзя одновременно задать в качестве целевого объекта отрисовки и текстуры на этапе.

Так как vs_3_0 поддерживает четыре дискретизатора, за один проход шейдера можно считывать до четырех поверхностей текстуры. Регистр выборки может отображаться только в качестве аргумента в инструкции загрузки текстуры: texldl - vs.

В vs_3_0, если вы используете дискретизатор, он должен быть объявлен в начале программы шейдера с помощью dcl_samplerType (sm3 - vs asm) (как в ps_2_0).

Обработка программного обеспечения

Эта функция будет поддерживаться в программной обработке вершин. Конкретные поддерживаемые типы фильтров можно проверить, вызвав Метод GetDeviceCaps и проверив VertexTextureFilterCaps. Все опубликованные форматы текстур будут поддерживаться в качестве текстур вершин при программной обработке вершин.

Приложения могут проверка, поддерживается ли определенный формат текстуры в программном режиме обработки вершин путем вызова CheckDeviceFormat и предоставления (D3DVERTEXTEXTURESAMPLER | D3DUSAGE_SOFTWAREPROCESSING) как использование. Для программной обработки вершин поддерживаются все форматы. Для программной обработки вершин требуется временный пул.

Изменения API

   
// New define
#define D3DVERTEXTEXTURESAMPLER0 (D3DDMAPSAMPLER+1)
#define D3DVERTEXTEXTURESAMPLER1 (D3DDMAPSAMPLER+2)
#define D3DVERTEXTEXTURESAMPLER2 (D3DDMAPSAMPLER+3)
#define D3DVERTEXTEXTURESAMPLER3 (D3DDMAPSAMPLER+4)
    

#define D3DVERTEXTEXTURESAMPLER  (0x00100000L)

// New caps field in D3DCAPS9
DWORD VertexTextureFilterCaps;

Конвейер вершин