Tipo struct

Utilizzare la sintassi seguente per dichiarare una struttura utilizzando HLSL.

nome struct { [ InterpolationModifier ] Type [ R x C ] 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 la sezione Osservazioni .

Tipo [ di R x C]

Tipo di membro con una matrice di colonne (C) di riga facoltativa (R). 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 è costituito da interi senza segno compreso tra 1 e 4 inclusi.

MemberName

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

Commenti

È possibile specificare un modificatore di interpolazione per qualsiasi membro della struttura o per un argomento di una funzione pixel shader. Se un modificatore viene visualizzato in entrambe le posizioni, il modificatore esterno (il modificatore di argomento pixel shader) sovraregola il modificatore interno (il modificatore di struttura).

Quando si compila uno shader o un effetto, il compilatore shader comprime i membri della struttura in base alle regole di compressione HLSL.

Modificatori di interpolazione introdotti in Shader Model 4

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

Modificatore di interpolazione Descrizione
lineare Interpolazione tra input shader; Linear è il valore predefinito se non è specificato alcun modificatore di interpolazione.
centro Interpolare tra i campioni che si trovano in un punto qualsiasi all'interno dell'area coperta del pixel (potrebbe essere necessario estrapolare i punti finali da un pixel Center). Il campionamento centrale può migliorare l'anti-aliasing se un pixel è parzialmente analizzato (anche se il pixel Center non è coperto). Il modificatore di baricentro deve essere combinato con il modificatore Linear o noperspective .
interpolazione Non eseguire l'interpolazione.
noperspective Non eseguire la correzione della prospettiva durante l'interpolazione. Il modificatore noperspective può essere combinato con il modificatore di baricentro .
esempio Disponibile nel modello di shader 4,1 e versioni successive Interpolare in un percorso di esempio anziché in un pixel Center. In questo modo il pixel shader viene eseguito per campione anziché per pixel. Un altro modo per eseguire l'esecuzione per campione è avere un input con la semantica SV _ SampleIndex, che indica l'esempio corrente. Solo gli input con l' esempio specificato (o inserendo SV _ SampleIndex) variano tra le chiamate dello shader nel pixel, mentre altri input che non specificano i modificatori (ad esempio, se si combinano i modificatori su input diversi) ancora interpolano in corrispondenza del pixel Center. Per ogni esempio incluso nel pixel si verificano sia la chiamata del pixel shader che il test di profondità/stencil. Questa operazione è talvolta nota come supercampionamento. Al contrario, in assenza della chiamata di frequenza di esempio, nota come multicampionamento, il pixel shader viene richiamato una volta per ogni pixel indipendentemente dal numero di campioni analizzati, mentre il test di profondità/stencil si verifica alla frequenza di campionamento. Entrambe le modalità forniscono l'anti-aliasing Edge equivalente. Tuttavia, il supercampionamento offre una migliore qualità di ombreggiatura richiamando il pixel shader più spesso.
1. Quando si usa un tipo int/uint, l'unica opzione valida è **Interpolation**.

È possibile applicare i modificatori di interpolazione a membri della struttura o argomenti di funzioneo a entrambi.

Esempio

Di seguito sono riportate 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 di interpolazione.

struct In
{
  centroid float2 Texcoord;
};

Vedi anche

Tipi di dati (DirectX HLSL)