Condividi tramite


Tipo di struct

Usare la sintassi seguente per dichiarare una struttura usando HLSL.

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

Parametri

Nome

Stringa ASCII che identifica in modo univoco il nome della struttura.

[InterpolationModifier]

Modificatore facoltativo che specifica un tipo di interpolazione. Per informazioni dettagliate, vedere Osservazioni .

Tipo[RxC]

Tipo di membro con dimensioni della matrice di matrice (R) x (R) facoltative. Una struttura contiene almeno un elemento; se contiene più di un elemento, gli elementi sono tutti dello stesso tipo. Il numero di righe e colonne è intero senza segno compreso tra 1 e 4 inclusivo.

Membername

Stringa ASCII che identifica in modo univoco il nome del membro.

Commenti

Un modificatore di interpolazione può essere specificato in qualsiasi membro della struttura o in un argomento a una funzione pixel shader. Se un modificatore viene visualizzato in entrambe le posizioni, il modificatore esterno (modificatore dell'argomento pixel shader) sovrascriva il modificatore interno (il modificatore della struttura).

Quando si compila uno shader o un effetto, i membri della struttura dei compilatori shader vengono compilati in base alle regole di compressione HLSL.

Modificatori interpolazione introdotti nel modello shader 4

Gli output del vertex shader usati per gli input dello shader pixel vengono interpolati in modo lineare per ottenere valori per pixel durante la rasterizzazione. Per impostare il metodo di interpolazione, usare uno dei valori seguenti, supportati nel modello shader 4 o versione successiva. Il modificatore viene ignorato in qualsiasi output dello shader vertex che non viene usato come input pixel shader.

Modifica interpolazione Descrizione
Lineare Interpolare tra input shader; linear è il valore predefinito se non viene specificato alcun modificatore di interpolazione.
Baricentro Interpolare tra esempi che si trovano in un punto all'interno dell'area coperta del pixel (questo potrebbe richiedere l'estrapolamento dei punti finali da un centro pixel). Il campionamento centroid può migliorare l'antialiasing se un pixel è parzialmente coperto (anche se il centro pixel non è coperto). Il modificatore centroid deve essere combinato con il modificatore lineare o noperspective .
nointerpolation Non interpolare .
noperspective Non eseguire la correzione della prospettiva durante l'interpolazione. Il modificatore noperspective può essere combinato con il modificatore centroid .
Esempio Disponibile nel modello shader 4.1 e versioni successive Interpolare in posizione di esempio anziché al centro pixel. In questo modo il pixel shader viene eseguito per esempio anziché per pixel. Un altro modo per causare l'esecuzione per esempio consiste nell'avere un input con SV_SampleIndex semantica, che indica l'esempio corrente. Solo gli input con l'esempio specificato (o l'input di SV_SampleIndex) differiscono tra le chiamate shader nel pixel, mentre altri input che non specificano modificatori (ad esempio, se si combinano modificatori in input diversi) interpolano ancora al centro pixel. Sia la chiamata pixel shader che i test di profondità/stencil si verificano per ogni campione coperto nel pixel. Questo è talvolta noto come supersampling. Al contrario, in assenza di chiamata alla frequenza di esempio, nota come multicampionamento, lo shader pixel viene richiamato una volta per pixel indipendentemente dal numero di campioni coperti, mentre i test di profondità/stencil si verificano a frequenza di esempio. Entrambe le modalità forniscono l'antialiasing perimetrale equivalente. Tuttavia, la supersampling offre una qualità di ombreggiatura migliore richiamando il pixel shader più frequentemente.
1. Quando si usa un tipo int/uint, l'unica opzione valida è **nointerpolation**.

I modificatori di interpolazione possono essere applicati ai membri della struttura o agli argomenti della funzione o entrambi.

Esempio

Ecco alcune dichiarazioni di struttura di esempio.

struct struct1
{
  int    a;
}

Questa dichiarazione include una matrice.

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

Questa dichiarazione include un modificatore interpolazione.

struct In
{
  centroid float2 Texcoord;
};

Vedi anche

Tipi di dati (DirectX HLSL)