Condividi tramite


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.
Valore Descrizione
in Solo input
Inout Input e output
out Solo output
uniform Immettere solo i dati costanti

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)
{
  ...
}

Funzioni (DirectX HLSL)