Texturas de vértice em vs_3_0 (DirectX HLSL)

O modelo de sombreador de vértice 3.0 dá suporte à pesquisa de textura no sombreador de vértice usando a instrução texldl - vs texture load. O mecanismo de vértice contém quatro estágios de amostragem de textura, chamados D3DVERTEXTEXTURESAMPLER0, D3DVERTEXTEXTURESAMPLER1, D3DVERTEXTEXTURESAMPLER2 e D3DVERTEXTEXTURESAMPLER3. Elas são distintas do amostrador de mapa de deslocamento e dos amostradores de textura no mecanismo de pixel.

Para amostrar texturas definidas nesses quatro estágios, você pode usar o mecanismo de vértice e programar os estágios com o método CheckDeviceFormat . Defina texturas nesses estágios usando SetTexture, com o índice de estágio D3DVERTEXTEXTURESAMPLER0 a D3DVERTEXTEXTURESAMPLER3. Um novo registro foi introduzido no sombreador de vértice, o registro do sampler (como em ps_2_0), que representa o amostrador de textura de vértice. Esse registro precisa ser definido no sombreador antes de usá-lo.

Um aplicativo pode consultar se há suporte para um formato como uma textura de vértice chamando CheckDeviceFormat com D3DUSAGE_QUERY_VERTEXTEXTURE.

Observação

Esse é um sinalizador de consulta, portanto, ele não é aceito em nenhuma função Createxxx. Uma textura de vértice criada no pool padrão pode ser definida como uma textura de pixel e vice-versa. No entanto, para usar o processamento de vértice de software, a textura de vértice deve ser criada no pool de arranhões (independentemente de ser um dispositivo de modo misto ou um dispositivo de processamento de vértice de software).

 

A funcionalidade é idêntica às texturas de pixel, exceto pelo seguinte:

  • Não há suporte para filtragem de textura anisotrópica, portanto, D3DSAMP_MAXANISOTROPY é ignorado e D3DTEXF_ANISOTROPIC não pode ser definido para ampliar ou minificar para esses estágios.
  • A taxa de informações de alteração não está disponível, portanto, o aplicativo precisa calcular o nível de detalhes e fornecer essas informações como um parâmetro para texldl - vs.

As restrições incluem:

  • Assim como nos sombreadores de pixel, se houver suporte para texturas multielement, D3DSAMP_ELEMENTINDEX será usado para descobrir de qual elemento deve ser amostrado.
  • O estado D3DSAMP_DMAPOFFSET é ignorado para esses estágios.
  • Use CheckDeviceFormat com D3DUSAGE_QUERY_VERTEXTEXTURE" para consultar uma textura para ver se ela pode ser usada como uma textura de vértice.
  • VertexTextureFilterCaps indica que tipo de filtros são permitidos nos exemplodores de textura de vértice. D3DPTFILTERCAPS_MINFANISOTROPIC e D3DPTFILTERCAPS_MAGFANISOTROPIC não são permitidos.

Registros de estágio de amostragem

Um registro de estágio de amostragem identifica uma unidade de amostragem que pode ser usada em instruções de carga de textura. Uma unidade de amostragem corresponde ao estágio de amostragem de textura, encapsulando o estado específico da amostragem fornecido em SetSamplerState.

Cada amostrador identifica exclusivamente uma única superfície de textura definida como o sampler correspondente usando SetTexture. No entanto, a mesma superfície de textura pode ser definida em vários samplers.

No momento do desenho, uma textura não pode ser definida simultaneamente como um destino de renderização e uma textura em um estágio.

Como vs_3_0 dá suporte a quatro amostradores, até quatro superfícies de textura podem ser lidas em um único passe de sombreador. Um registro de amostra pode aparecer apenas como um argumento na instrução de carga de textura: texldl - vs.

Em vs_3_0, se você usar um sampler, ele deverá ser declarado no início do programa de sombreador, usando o dcl_samplerType (sm3 - vs asm) (como em ps_2_0).

Processamento de software

Esse recurso terá suporte no processamento de vértice de software. Os tipos de filtro específicos com suporte podem ser verificados chamando GetDeviceCaps e verificando VertexTextureFilterCaps. Todos os formatos de textura publicados terão suporte como texturas de vértice no processamento de vértice de software.

Os aplicativos podem marcar se houver suporte para um formato de textura específico no modo de processamento de vértice de software chamando CheckDeviceFormat e fornecendo (D3DVERTEXTEXTURESAMPLER | D3DUSAGE_SOFTWAREPROCESSING) como uso. Todos os formatos têm suporte para processamento de vértice de software. O pool de arranhões é necessário para processamento de vértice de software.

Alterações de 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;

Pipeline de Vértice