Objeto de textura

En Direct3D 10, especifica los muestreadores y las texturas de forma independiente. El muestreo de texturas se implementa mediante un objeto de textura con plantilla. Este objeto de textura con plantilla tiene un formato específico, devuelve un tipo específico e implementa varios métodos.

Diferencias entre Direct3D9 9 y Direct3D10:

  • En Direct3D 9, los muestreadores se enlazan a texturas específicas.
  • En Direct3D 10, las texturas y los muestreadores son objetos independientes. Cada objeto de textura con plantilla implementa métodos de muestreo de texturas que toman tanto la textura como el muestreador como parámetros de entrada.

No todos los formatos son compatibles con todas las funciones. Por lo tanto, debe usar CheckFeatureSupport para comprobar si un formato es compatible con un uso determinado.

Esta es la sintaxis para crear todos los objetos de textura (excepto los objetos con muestreo múltiple).

Object1 [<Type>] Name;

Los objetos con muestreo múltiple (Texture2DMS y Texture2DMSArray) requieren que el tamaño de textura se especifique explícitamente y se exprese como el número de muestras.

Object2 [<Type, Samples>] Name;

Parámetros

Elemento Descripción
Object
Objeto de textura. Debe ser uno de los tipos siguientes.
Tipo Object1 Descripción
Buffer Búfer
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 Object2 Descripción
Texture2DMS Textura de varias muestras 2D
Texture2DMSArray Matriz de texturas de varias muestras 2D

  1. El tipo Búfer admite la mayoría de los métodos de objetos de textura excepto GetDimensions.
  2. TextureCubeArray está disponible en el modelo de sombreador 4.1 o superior.
  3. El modelo de sombreador 4.1 está disponible en Direct3D 10.1 o superior.

Tipo

Opcional. Cualquier tipo de HLSL escalar o tipo de HLSL de vector, rodeado por corchetes angulares. El tipo predeterminado es float4.

Nombre

Cadena ASCII que especifica el nombre del objeto de textura.

Muestras

Número de muestras (comprendido entre 1 y 128).

Ejemplo 1

Este es un ejemplo de declaración de un 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 es la tabla en la que se incluyen todos los métodos. Consulte la página de referencia de cada método para ver qué objetos pueden usar ese método.

Método de textura Descripción vs_4_0 vs_4_1 ps_4_0 ps_4_1 gs_4_0 gs_4_1
CalculateLevelOfDetail Calcula el nivel de detalle y devuelve un resultado fijo. x
CalculateLevelOfDetailUnclamped Calcula el nivel de detalle y devuelve un resultado que no es fijo. x
Gather Obtiene las cuatro muestras (solo el componente rojo) que se usarían para la interpolación bilineal al muestrear una textura. x x x
GetDimensions Obtiene la dimensión de textura para un nivel de asignación de MIP especificado. x x x x x x
GetDimensions (MultiSample) Obtiene la dimensión de textura para un nivel de asignación de MIP especificado. x x x
GetSamplePosition Obtiene la posición de la muestra especificada. x x x
Cargar Carga datos sin ningún tipo de filtrado o muestreo. x x x x x x
Load (Multisample) Carga datos sin ningún tipo de filtrado o muestreo. x x x x
Ejemplo Muestrea una textura. x x
SampleBias Muestrea una textura después de aplicar el valor de sesgo al nivel de asignación de MIP. x x
SampleCmp Muestrea una textura con un valor de comparación para rechazar muestras. x x
SampleCmpLevelZero Muestrea una textura (solo nivel 0 de asignación de MIP) con un valor de comparación para rechazar muestras. x x x x x x
SampleGrad Muestrea una textura con un degradado para influir en la forma en que se calcula la ubicación de la muestra. x x x x x x
SampleLevel Muestrea una textura en el nivel de asignación de MIP especificado. x x x x x x

Tipo devuelto

El tipo de valor devuelto de un método de objeto de textura es float4 a menos que se especifique lo contrario, con la excepción de los objetos de textura con muestreo múltiple y suavizado de contorno que siempre necesitan el tipo y el recuento de muestras especificados. El tipo de valor devuelto es el mismo que el tipo de recurso de textura (DXGI_FORMAT). Es decir, puede ser cualquiera de los siguientes tipos.

Tipo Description
FLOAT Valor de tipo float de 32 bits (consulte Reglas de punto flotante para ver las diferencias con respecto al valor de tipo float de IEEE)
int Entero de 32 bits con signo
int sin firma Entero de 32 bits sin signo
snorm Valor de tipo float de 32 bits en el intervalo -1 a 1, ambos inclusive (consulte Reglas de punto flotante para ver las diferencias con respecto al valor de tipo float de IEEE)
unorm Valor de tipo float de 32 bits en el intervalo 0 a 1, ambos inclusive (consulte Reglas de punto flotante para ver las diferencias con respecto al valor de tipo float de IEEE)
cualquier tipo de textura o estructura El número de componentes devueltos debe estar comprendido entre 1 y 3, ambos inclusive.

Además, el tipo de valor devuelto puede ser cualquier tipo de textura que incluya una estructura, pero debe ser inferior a 4 componentes, como un valor de tipo float1 que devuelve un componente.

Valores predeterminados de componentes ausentes en una textura

El valor predeterminado de los componentes ausentes en un tipo de recurso de textura es cero para cualquier componente excepto el componente alfa (A); el valor predeterminado del componente A ausente es uno. La forma en que este aparece en el sombreador depende del tipo de recurso de textura. Toma la forma del primer componente con tipo que realmente está presente en el tipo de recurso de textura (empezando desde la izquierda en orden RGBA). Si esta forma es UNORM o FLOAT, el valor predeterminado del componente A ausente es 1.0f. Si la forma es SINT o UINT, el valor predeterminado del componente A ausente es 0x1.

Por ejemplo, cuando un sombreador lee el tipo de recurso de textura DXGI_FORMAT_R24_UNORM_X8_TYPELESS, los valores predeterminados de G y B son cero y el valor predeterminado de A es 1.0f; cuando un sombreador lee el tipo de recurso de textura DXGI_FORMAT_R16G16_UINT, el valor predeterminado de B es cero y el valor predeterminado de A es 0x00000001; cuando un sombreador lee el tipo de recurso de textura DXGI_FORMAT_R16_SINT, los valores predeterminados de G y B son cero y el valor predeterminado de A es 0x00000001.

Ejemplo 2

Este es un ejemplo de muestreo de texturas con un 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

Este objeto se admite en los siguientes modelos de sombreador.

Modelo de sombreador Compatible
Modelo de sombreador 4 y modelos de sombreador superiores

Consulte también

Modelo de sombreador 4