Objeto de Textura
No Direct3D 10, você especifica as amostras e texturas de forma independente. A amostragem de textura é implementada usando um objeto de textura modelo. Esse objeto de textura modelo tem um formato específico, retorna um tipo específico e implementa vários métodos.
Diferenças entre o Direct3D9 9 e o Direct3D10:
- No Direct3D 9, as amostras são vinculadas a texturas específicas.
- No Direct3D 10, as texturas e amostras são objetos independentes. Cada objeto de textura modelo implementa métodos de amostragem de textura que usam a textura e a amostra como parâmetros de entrada.
Nem todos os formatos são compatíveis com todas as funções. Portanto, você deve usar CheckFeatureSupport para verificar se um formato é compatível com um uso específico.
Veja abaixo a sintaxe para criar todos os objetos de textura (exceto objetos com várias amostras).
Object1 [<Type>] Name; |
---|
Objetos com várias amostras (Texture2DMS e Texture2DMSArray) exigem que o tamanho da textura seja explicitamente declarado e expresso como o número de amostras.
Object2 [<Type, Samples>] Name; |
---|
Parâmetros
Item | Descrição | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Objeto |
Um objeto de textura. Deve ser um dos seguintes tipos.
|
||||||||||||||||||||||||
Tipo |
Opcional. Qualquer tipo de HLSL de escalar ou tipo de HLSL de vetor, cercado por colchetes angulares. O tipo padrão é float4. |
||||||||||||||||||||||||
Nome |
Uma cadeia de caracteres ASCII que especifica o nome do objeto de textura. |
||||||||||||||||||||||||
Amostras |
O número de amostras (varia entre 1 e 128). |
Exemplo 1
Este é um exemplo de declaração de um objeto de textura.
Texture2D <float4> MyTex;
Texture2DMS <float4, 128> MyMSTex;
Métodos de Objeto de Textura
Cada objeto de textura implementa determinados métodos. Esta é a tabela que lista todos os métodos. Confira a página de referência de cada método para ver quais objetos podem usar esse método.
Método de Textura | Descrição | vs_4_0 | vs_4_1 | ps_4_0 | ps_4_1 | gs_4_0 | gs_4_1 |
---|---|---|---|---|---|---|---|
CalculateLevelOfDetail | Calcule o LOD, retorne um resultado fixado. | x | |||||
CalculateLevelOfDetailUnclamped | Calcule o LOD, retorne um resultado não fixado. | x | |||||
Gather | Obtém as quatro amostras (somente o componente vermelho) que seriam usadas para interpolação bilinear ao amostrar uma textura. | x | x | x | |||
GetDimensions | Obtenha a dimensão de textura para um nível de mipmap especificado. | x | x | x | x | x | x |
GetDimensions (MultiSample) | Obtenha a dimensão de textura para um nível de mipmap especificado. | x | x | x | |||
GetSamplePosition | Obtenha a posição do exemplo especificado. | x | x | x | |||
Carregar | Carregue dados sem filtragem ou amostragem. | x | x | x | x | x | x |
Carga (Multiamostra) | Carregue dados sem filtragem ou amostragem. | x | x | x | x | ||
Amostra | Experimente uma textura. | x | x | ||||
SampleBias | Amostra de uma textura, depois de aplicar o valor de viés ao nível de mipmap. | x | x | ||||
SampleCmp | Amostra de uma textura, usando um valor de comparação para rejeitar amostras. | x | x | ||||
SampleCmpLevelZero | Amostra de uma textura (somente o mipmap de nível 0), usando um valor de comparação para rejeitar amostras. | x | x | x | x | x | x |
SampleGrad | Mostre uma textura usando um gradiente para influenciar a maneira como o local da amostra é calculado. | x | x | x | x | x | x |
SampleLevel | Amostra de uma textura no nível de mipmap especificado. | x | x | x | x | x | x |
Tipo de retorno
O tipo de retorno de um método de objeto de textura é float4, a menos que especificado de outra forma, com exceção dos objetos de textura com anti-aliasing e várias amostras que sempre precisam do tipo e da contagem de amostra especificados. O tipo de retorno é o mesmo que o tipo de recurso de textura (DXGI_FORMAT). Em outras palavras, pode ser qualquer um dos seguintes tipos.
Tipo | Descrição |
---|---|
float | Float de 32 bits (confira Regras de Ponto Flutuante para ver as diferenças em relação ao float IEEE) |
INT | Inteiro com sinal de 32 bits |
unsigned int | Inteiro sem sinal de 32 bits |
snorm | Float de 32 bits no intervalo de -1 a 1, inclusive (confira Regras de Ponto Flutuante para ver diferenças em relação ao float IEEE) |
unorm | Float de 32 bits no intervalo de 0 a 1, inclusive (confira Regras de Ponto Flutuante para ver diferenças em relação ao float IEEE) |
qualquer tipo de textura ou struct | O número de componentes retornados deve estar entre 1 e 3, inclusive. |
Além disso, o tipo de retorno pode ser qualquer tipo de textura, inclusive uma estrutura, mas deve ser menor que 4 componentes, como um tipo float1 que retorna um componente.
Valores padrão para componentes ausentes em uma textura
O valor padrão para componentes ausentes em um tipo de recurso de textura é zero para qualquer componente, exceto o componente alfa (A); o valor padrão para o A ausente é um. A maneira como ele aparece para o sombreador depende do tipo de recurso de textura. Ele assume a forma do primeiro componente digitado que está realmente presente no tipo de recurso de textura (começando da esquerda na ordem de RGBA). Se esse formulário for UNORM ou FLOAT, o valor padrão para o A ausente será 1.0f. Se o formulário for SINT ou UINT, o valor padrão para o A ausente será 0x1.
Por exemplo, quando um sombreador lê o tipo de recurso de textura DXGI_FORMAT_R24_UNORM_X8_TYPELESS, os valores padrão para G e B são zero e o valor padrão para A é 1.0f; quando um sombreador lê o tipo de recurso de textura DXGI_FORMAT_R16G16_UINT, o valor padrão para B é zero e o valor padrão para A é 0x00000001; quando um sombreador lê o tipo de recurso de textura DXGI_FORMAT_R16_SINT, os valores padrão para G e B são zero e o valor padrão para A é 0x00000001.
Exemplo 2
Este é um exemplo de amostragem de textura usando um método de textura.
sampler MySamp;
Texture2D <float4> MyTex;
float4 main( float2 TexCoords[2] : TEXCOORD ) : SV_Target
{
return MyTex.Sample( MySamp, TexCoords[0] ));
}
Modelo de Sombreador Mínimo
Esse objeto é compatível com os seguintes modelos de sombreador.
Modelo de Sombreador | Com suporte |
---|---|
Modelo de Sombreador 4 e modelos de sombreador superiores | sim |