Condividi tramite


Sintassi di dichiarazione di funzione

Le funzioni HLSL vengono dichiarate con la sintassi seguente.

[StorageClass] [clipplanes()] [preciso] Return_Value Name ( [ArgumentList] ) [: Semantic] { [StatementBlock] };

 

Parametri

StorageClass

Modificatore che ridefinisce una dichiarazione di funzione. inline è attualmente l'unico valore modificatore. Il valore del modificatore deve essere inline perché è anche il valore predefinito. Pertanto, una funzione è inline indipendentemente dal fatto che si specifichi inline e che tutte le funzioni in HLSL siano inline. Una funzione inline genera una copia del corpo della funzione (durante la compilazione) per ogni chiamata di funzione. Questa operazione viene eseguita per ridurre il sovraccarico della chiamata alla funzione.

Clipplanes

Elenco facoltativo di piani clip, che è composto da un massimo di 6 piani di clip specificati dall'utente. Si tratta di un meccanismo alternativo per SV_ClipDistance che funziona a livello di funzionalità 9_x e superiore.

Nome

Stringa ASCII che identifica in modo univoco il nome della funzione shader.

ArgumentList

Elenco di argomenti facoltativo, ovvero un elenco delimitato da virgole di argomenti passati a una funzione.

Semantica

Stringa facoltativa che identifica l'utilizzo previsto dei dati restituiti (vedere Semantics (DirectX HLSL)).

StatementBlock

Istruzioni facoltative che costituiscono il corpo della funzione. Una funzione definita senza un corpo è denominata prototipo di funzione; il corpo di una funzione prototipo deve essere definito altrove prima che la funzione possa essere chiamata.

Valore restituito

Il tipo restituito può essere uno di questi tipi HLSL.

Commenti

La sintassi in questa pagina descrive quasi tutti i tipi di funzione HLSL, inclusi vertex shader, pixel shader e funzioni helper. Anche se un geometry shader viene implementato anche con una funzione, la relativa sintassi è leggermente più complessa, quindi esiste una pagina separata che definisce una dichiarazione di funzione geometry shader (vedere Geometry-Shader Object (DirectX HLSL)).

È possibile eseguire l'overload di una funzione purché venga fornita una combinazione univoca di tipi di parametro e/o di un ordine di parametri. HLSL implementa anche una serie di funzioni intrinseche o predefinite.

È possibile specificare piani clip specifici dell'utente con l'attributo clipplanes . Windows applica questi piani clip a tutte le primitive disegnate. L'attributo clipplanes funziona come SV_ClipDistance , ma funziona su tutti i livelli di funzionalità hardware 9_x e versioni successive. Per altre info, vedi Piani clip utente su hardware di livello 9.

Esempio

Questo esempio proviene da BasicHLSL10.fx dall'esempio BasicHLSL10.

struct VS_OUTPUT
{
    float4 Position   : SV_POSITION; 
    float4 Diffuse    : COLOR0;
    float2 TextureUV  : TEXCOORD0;
};

VS_OUTPUT RenderSceneVS( float4 vPos : POSITION,
                         float3 vNormal : NORMAL,
                         float2 vTexCoord0 : TEXCOORD,
                         uniform int nNumLights,
                         uniform bool bTexture,
                         uniform bool bAnimate )
{
    VS_OUTPUT Output;
    ...
    return Output;    
}

Questo esempio di AdvancedParticles.fx dell'esempio AdvancedParticles illustra l'uso di una semantica per il tipo restituito.

//
// PS for particles
//
float4 PSPointSprite(PSSceneIn input) : SV_Target
{   
    return g_txDiffuse.Sample( g_samLinear, input.tex ) * input.color;
}

Funzioni (DirectX HLSL)