Partilhar via


Texturas de vértice em vs_3_0 (DirectX HLSL)

O modelo de sombreador de vértice 3.0 suporta pesquisa de textura no sombreador de vértice usando a instrução de carga de textura texldl - vs. O mecanismo de vértice contém quatro estágios de amostrador de textura, denominados D3DVERTEXTEXTURESAMPLER0, D3DVERTEXTEXTURESAMPLER1, D3DVERTEXTEXTURESAMPLER2 e D3DVERTEXTEXTURESAMPLER3. Estes são distintos do amostrador de mapa de deslocamento e amostradores de textura no mecanismo de pixel.

Para obter amostras de texturas definidas nesses quatro estágios, você pode usar o mecanismo de vértice e programar os estágios com o métodoCheckDeviceFormat. Defina texturas nesses estágios usando SetTexture, com o índice de estágio D3DVERTEXTEXTURESAMPLER0 até D3DVERTEXTEXTURESAMPLER3. Um novo registro foi introduzido no sombreador de vértice, o registro amostrador (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 um formato é suportado como uma textura de vértice chamando CheckDeviceFormat com D3DUSAGE_QUERY_VERTEXTEXTURE.

Observação

Este é um sinalizador de consulta, portanto, 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 rascunhos (não importa se é um dispositivo de modo misto ou um dispositivo de processamento de vértice de software).

 

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

  • A filtragem de textura anisotrópica não é suportada, portanto, D3DSAMP_MAXANISOTROPY é ignorada e D3DTEXF_ANISOTROPIC não pode ser definida para ampliar ou diminuir para esses estágios.
  • A informação da taxa de variação não está disponível, portanto, o aplicativo tem que calcular o nível de detalhe e fornecer essa informação como um parâmetro para texldl - vs.

As restrições incluem:

  • Como nos sombreadores de pixel, se houver suporte para texturas multielementos, D3DSAMP_ELEMENTINDEX será usado para descobrir de qual elemento fazer amostragem.
  • O estado D3DSAMP_DMAPOFFSET é ignorado para essas etapas.
  • 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 amostradores de textura de vértice. D3DPTFILTERCAPS_MINFANISOTROPIC e D3DPTFILTERCAPS_MAGFANISOTROPIC não são permitidos.

Registos das fases de amostragem

Um registro de estágio de amostragem identifica uma unidade de amostragem que pode ser usada em declaraçõ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 que é definida para o amostrador correspondente usando SetTexture. No entanto, a mesma superfície de textura pode ser definida em vários amostradores.

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 suporta quatro amostradores, até quatro superfícies de textura podem ser lidas em uma única passagem de sombreador. Um registro de amostrador pode aparecer apenas como um argumento na instrução de carga de textura: texldl - vs.

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

Processamento de Software

Este recurso será suportado no processamento de vértice do software. Os tipos de filtro específicos suportados podem ser verificados chamando GetDeviceCaps e verificando VertexTextureFilterCaps. Todos os formatos de textura publicados serão suportados como texturas de vértice no processamento de vértices de software.

Os aplicativos podem verificar se um determinado formato de textura é suportado no modo de processamento de vértice do software chamando CheckDeviceFormat e fornecendo (D3DVERTEXTEXTURESAMPLER | D3DUSAGE_SOFTWAREPROCESSING) como uso. Todos os formatos são suportados para processamento de vértice de software. O pool de scratch é necessário para o processamento de vértices de software.

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

Vertex Pipeline