Argomenti della funzione
Una funzione accetta uno o più argomenti di input; utilizzare la sintassi seguente per dichiarare ogni argomento.
[InputModifier] Type Name [: Semantic] [InterpolationModifier] [= Initializers] |
[Modificatore] Type Name [: Semantic] [: Interpolation Modifier] [= Initializer(s)]
Se sono presenti più argomenti di funzione, sono separati da virgole.
Parametri
Elemento | Descrizione | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
InputModifier |
Termine facoltativo che identifica un argomento come input, un output o entrambi.
I parametri vengono sempre passati per valore. in indica che il valore del parametro deve essere copiato dall'applicazione chiamante prima dell'inizio della funzione. out indica che l'ultimo valore del parametro deve essere copiato e restituito all'applicazione chiamante al termine della funzione. inout è una sintassi abbreviata per specificare entrambi. Un valore uniforme deriva da un registro costante; ogni chiamata al vertex shader o al pixel shader visualizza lo stesso valore iniziale per una variabile uniforme. Le variabili globali vengono considerate come se fossero dichiarate uniformi. Per le funzioni non di primo livello, uniform è sinonimo di in. Se non viene specificato alcun utilizzo di parametri, si presuppone che l'utilizzo del parametro sia in . |
||||||||||
Digitare |
Tipo di argomento; può essere qualsiasi tipo HLSL valido. |
||||||||||
Nome |
Stringa ASCII che identifica in modo univoco il nome della funzione shader. |
||||||||||
Semantica |
Stringa facoltativa che identifica l'utilizzo previsto dei dati (vedere Semantics (DirectX HLSL)). |
||||||||||
InterpolationModifier |
Modificatore di interpolazione facoltativo che consente a uno shader di determinare il metodo di interpolazione. Un modificatore di interpolazione in un argomento di funzione si applica solo a un argomento usato come input per una funzione pixel shader. |
||||||||||
Inizializzatori |
Valori facoltativi per l'inizializzazione; per inizializzare i tipi di dati multi-componente sono necessari più valori. |
Commenti
Gli argomenti della funzione sono elencati in un elenco di argomenti delimitati da virgole in una dichiarazione di funzione. Come nelle funzioni C, ogni argomento deve avere un nome di parametro e un tipo dichiarati; Un argomento di una funzione HLSL può facoltativamente includere una semantica, un valore iniziale e un input pixel shader può includere un tipo di interpolazione.
Il tipo di un argomento di funzione può essere una struttura, che può includere un modificatore di interpolazione per membro. Se l'argomento della funzione ha anche un modificatore di interpolazione, il modificatore dell'argomento della funzione esegue l'override dei modificatori di interpolazione dichiarati all'interno del tipo.
Esempio
In questo esempio (dall'esempio BasicHLSL10) vengono illustrati gli input uniformi e non uniformi in una funzione vertex shader.
VS_OUTPUT RenderSceneVS(
float4 vPos : POSITION,
float3 vNormal : NORMAL,
float2 vTexCoord0 : TEXCOORD,
uniform int nNumLights,
uniform bool bTexture,
uniform bool bAnimate )
{
...
}
In questo esempio ( dall'esempio ContentStreaming) viene usata una struttura di input per passare argomenti a una funzione pixel shader.
VSBasicIn input
struct VSBasicIn
{
float4 Pos : POSITION;
float3 Norm : NORMAL;
float2 Tex : TEXCOORD0;
};
PSBasicIn VSBasic(VSBasicIn input)
{
...
}