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 de Object1 Descrição
Buffer Buffer
Texture1D Textura 1D
Texture1DArray Matriz de texturas 1D
Texture2D Textura 2D
Texture2DArray Matriz de texturas 2D
Texture3D Textura 3D
TextureCube Textura de cubo
TextureCubeArray Matriz de texturas de cubo
Tipo de Object2 Descrição
Texture2DMS Textura 2D com várias amostras
Texture2DMSArray Matriz de texturas 2D com várias amostras

  1. O tipo Buffer oferece suporte à maioria dos métodos de objeto de textura, exceto GetDimensions.
  2. TextureCubeArray está disponível no modelo de sombreador 4.1 ou superior.
  3. O modelo de sombreador 4.1 está disponível no Direct3D 10.1 ou superior.

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

Confira também

Modelo de Sombreador 4