Текстуры вершин в vs_3_0 (DirectX HLSL)
Модель шейдера вершин версии 3.0 поддерживает поиск текстур в шейдере вершин с помощью инструкции загрузки текстуры texldl и. Подсистема вершин содержит четыре этапа выборки текстур с именем D3DVERTEXTEXTURESAMPLER0, D3DVERTEXTEXTURESAMPLER1, D3DVERTEXTEXTURESAMPLER2 и D3DVERTEXTEXTURESAMPLER3. Они отличаются от образца карты смещения и примеров текстур в обработчике пикселей.
Для выборки текстур, заданных на этих четырех этапах, можно использовать подсистему вершин и программировать этапы с помощью метода checkDeviceFormatCheckDeviceFormat. Задайте текстуры на этих этапах с помощью SetTextureс индексом стадии D3DVERTEXTEXTURESAMPLER0 через D3DVERTEXTEXTURESAMPLER3. Новый регистр появился в шейдере вершин, регистр образца (например, в ps_2_0), представляющий образец текстур вершины. Перед использованием этого регистра необходимо определить в шейдере.
Приложение может запрашивать, если формат поддерживается как текстура вершин, вызвав CheckDeviceFormat с D3DUSAGE_QUERY_VERTEXTEXTURE.
Заметка
Это флаг запроса, поэтому он не принимается в любой функции Createxxx. Текстура вершин, созданная в пуле по умолчанию, может быть задана как текстура пикселей и наоборот. Тем не менее, чтобы использовать обработку вершин программного обеспечения, текстура вершин должна быть создана в пуле с нуля (независимо от того, является ли это устройство смешанного режима или программное устройство обработки вершин).
Функциональность идентична текстурам пикселей, за исключением следующих:
- Фильтрация анисотропной текстуры не поддерживается, поэтому D3DSAMP_MAXANISOTROPY игнорируется и D3DTEXF_ANISOTROPIC нельзя задать для увеличения или минификации для этих этапов.
- Скорость изменений недоступна, поэтому приложению приходится вычислять уровень детализации и предоставлять эти сведения в качестве параметра для texldl - vs.
К ограничениям относятся:
- Как и в шейдерах пикселей, если поддерживаются многоэлементные текстуры, 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;
Связанные разделы