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 |
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 | Sí |