Compartir a través de


Tipo de estructura

Use la siguiente sintaxis para declarar una estructura mediante HLSL.

struct Name{ [InterpolationModifier] Type[RxC] MemberName; ... };

Parámetros

Nombre

Cadena ASCII que identifica de forma única el nombre de la estructura.

[InterpolationModifier]

Modificador opcional que especifica un tipo de interpolación. Consulte Comentarios para obtener más detalles.

Type[RxC]

Tipo de miembro con un tamaño de matriz de columna x (C) de fila opcional (R). Una estructura contiene al menos un elemento; si contiene más de un elemento, los elementos son todos del mismo tipo. El número de filas y columnas son enteros sin signo entre 1 y 4 inclusive.

MemberName

Cadena ASCII que identifica de forma única el nombre del miembro.

Comentarios

Se puede especificar un modificador de interpolación en cualquier miembro de estructura o en un argumento para una función de sombreador de píxeles. Si un modificador aparece en ambos lugares, el modificador externo (modificador de argumento del sombreador de píxeles) sobrerute el modificador interior (el modificador de estructura).

Al compilar un sombreador o un efecto, el compilador de sombreador empaqueta los miembros de estructura según las reglas de empaquetado de HLSL.

Modificadores de interpolación introducidos en el modelo de sombreador 4

Las salidas del sombreador de vértices que se usan para las entradas del sombreador de píxeles se interpolan linealmente para obtener valores por píxel durante la rasterización. Para establecer el método de interpolación, use cualquiera de los valores siguientes, que se admiten en el modelo de sombreador 4 o posterior. El modificador se omite en cualquier salida del sombreador de vértices que no se use como entrada del sombreador de píxeles.

Modificador de interpolación Descripción
Lineal Interpolación entre entradas del sombreador; linear es el valor predeterminado si no se especifica ningún modificador de interpolación.
Centroide Interpole entre muestras que están en algún lugar dentro del área cubierta del píxel (esto puede requerir extrapolar puntos de conexión desde un centro de píxeles). El muestreo centroide puede mejorar el suavizado de contorno si un píxel está parcialmente cubierto (incluso si el centro de píxeles no está cubierto). El modificador centroid debe combinarse con el modificador lineal o noperspectivo .
nointerpolation No interpole .
noperspective No realice la corrección de perspectiva durante la interpolación. El modificador noperspectivo se puede combinar con el modificador centroid .
sample Disponible en el modelo de sombreador 4.1 y versiones posteriores Interpole en la ubicación de ejemplo en lugar de en el centro de píxeles. Esto hace que el sombreador de píxeles se ejecute por muestra en lugar de por píxel. Otra manera de hacer que la ejecución por ejemplo sea tener una entrada con SV_SampleIndex semántica, que indica el ejemplo actual. Solo las entradas con el ejemplo especificado (o la entrada SV_SampleIndex) difieren entre las invocaciones del sombreador en el píxel, mientras que otras entradas que no especifican modificadores (por ejemplo, si mezcla modificadores en entradas diferentes) siguen interpolando en el centro de píxeles. Tanto la invocación del sombreador de píxeles como las pruebas de profundidad/galería de símbolos se realizan para cada muestra cubierta del píxel. Esto se conoce a veces como supermuestreo. En cambio, en ausencia de invocación de frecuencia de muestra, conocida como muestreo múltiple, el sombreador de píxeles se invoca una vez por píxel independientemente del número de muestras cubiertos, mientras que las pruebas de profundidad/galería de símbolos se producen con frecuencia de muestra. Ambos modos proporcionan suavizado de borde equivalente. Sin embargo, el supermuestreo proporciona una mejor calidad de sombreado invocando el sombreador de píxeles con más frecuencia.
1. Cuando se usa un tipo int/uint, la única opción válida es **nointerpolation**.

Los modificadores de interpolación se pueden aplicar a miembros de estructura o argumentos de función, o ambos.

Ejemplos

Estas son algunas declaraciones de estructura de ejemplo.

struct struct1
{
  int    a;
}

Esta declaración incluye una matriz.

struct struct2
{
  int    a;
  float  b;
  int4x4 iMatrix;
}

Esta declaración incluye un modificador de interpolación.

struct In
{
  centroid float2 Texcoord;
};

Consulte también

Tipos de datos (DirectX HLSL)