Texturas de vértice en vs_3_0 (DirectX HLSL)

El modelo del sombreador de vértices 3.0 admite la búsqueda de texturas en el sombreador de vértices mediante la instrucción texldl - vs texture load. El motor de vértices contiene cuatro fases de muestra de textura, denominadaS D3DVERTEXTEXTURESAMPLER0, D3DVERTEXTEXTURESAMPLER1, D3DVERTEXTEXTURESAMPLER2 y D3DVERTEXTEXTURESAMPLER3. Son distintos del sampler de mapa de desplazamiento y de los muestreadores de textura en el motor de píxeles.

Para muestrear texturas establecidas en esas cuatro fases, puede usar el motor de vértices y programar las fases con el método CheckDeviceFormat . Establezca texturas en esas fases mediante SetTexture, con el índice de fase D3DVERTEXTEXTURESAMPLER0 a D3DVERTEXTEXTURESAMPLER3. Se ha introducido un nuevo registro en el sombreador de vértices, el registro del sampler (como en ps_2_0), que representa el muestreador de texturas de vértices. Este registro debe definirse en el sombreador antes de usarlo.

Una aplicación puede consultar si se admite un formato como textura de vértice llamando a CheckDeviceFormat con D3DUSAGE_QUERY_VERTEXTEXTURE.

Nota

Se trata de una marca de consulta para que no se acepte en ninguna función Createxxx. Una textura de vértice creada en el grupo predeterminado se puede establecer como textura de píxel y viceversa. Sin embargo, para usar el procesamiento de vértices de software, la textura del vértice debe crearse en el grupo de arañazos (independientemente de si es un dispositivo en modo mixto o un dispositivo de procesamiento de vértices de software).

 

La funcionalidad es idéntica a las texturas de píxeles, excepto por lo siguiente:

  • No se admite el filtrado de texturas anisotrópicas, por lo tanto, D3DSAMP_MAXANISOTROPY se omite y no se puede establecer D3DTEXF_ANISOTROPIC para aumentar ni minimizar para estas fases.
  • La tasa de información de cambio no está disponible, por lo que la aplicación tiene que calcular el nivel de detalle y proporcionar esa información como parámetro a texldl - frente a .

Entre las restricciones se incluyen:

  • Al igual que en los sombreadores de píxeles, si se admiten texturas multielemento, se usa D3DSAMP_ELEMENTINDEX para averiguar qué elemento se va a muestrear.
  • El estado D3DSAMP_DMAPOFFSET se omite para estas fases.
  • Use CheckDeviceFormat con D3DUSAGE_QUERY_VERTEXTEXTURE" para consultar una textura para ver si se puede usar como textura de vértice.
  • VertexTextureFilterCaps indica qué tipo de filtros se permiten en los muestreadores de textura de vértice. D3DPTFILTERCAPS_MINFANISOTROPIC y D3DPTFILTERCAPS_MAGFANISOTROPIC no están permitidos.

Registros de fase de muestreo

Un registro de fase de muestreo identifica una unidad de muestreo que se puede usar en instrucciones de carga de textura. Una unidad de muestreo corresponde a la fase de muestreo de textura, encapsulando el estado específico del muestreo proporcionado en SetSamplerState.

Cada sampler identifica de forma única una sola superficie de textura que se establece en el sampler correspondiente mediante SetTexture. Sin embargo, la misma superficie de textura se puede establecer en varios muestreadores.

En tiempo de dibujo, una textura no se puede establecer simultáneamente como un destino de representación y una textura en una fase.

Dado que vs_3_0 admite cuatro muestras, se pueden leer hasta cuatro superficies de textura en un único paso de sombreador. Un registro de sampler puede aparecer solo como argumento en la instrucción de carga de texturas: texldl - frente a

En vs_3_0, si usa un sampler, se debe declarar al principio del programa de sombreador, usando el dcl_samplerType (sm3 - vs asm) (como en ps_2_0).

Procesamiento de software

Esta característica se admitirá en el procesamiento de vértices de software. Los tipos de filtro específicos admitidos se pueden comprobar llamando a GetDeviceCaps y comprobando VertexTextureFilterCaps. Todos los formatos de textura publicados se admitirán como texturas de vértices en el procesamiento de vértices de software.

Las aplicaciones pueden comprobar si se admite un formato de textura determinado en el modo de procesamiento de vértices de software llamando a CheckDeviceFormat y proporcionando (D3DVERTEXTEXTURESAMPLER | D3DUSAGE_SOFTWAREPROCESSING) como uso. Todos los formatos son compatibles con el procesamiento de vértices de software. El grupo temporal es necesario para el procesamiento de vértices de software.

Cambios en la 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;

Canalización de vértices