Syntax för funktionsdeklaration

HLSL-funktioner deklareras med följande syntax.

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

 

Parametrar

StorageClass

Modifierare som omdefinierar en funktionsdeklaration. infogade är för närvarande det enda modifierarvärdet. Modifierarvärdet måste vara infogat eftersom det också är standardvärdet. Därför är en funktion infogad oavsett om du anger infogadoch alla funktioner i HLSL är infogade. En infogad funktion genererar en kopia av funktionstexten (vid kompilering) för varje funktionsanrop. Detta görs för att minska omkostnaderna för att anropa funktionen.

Clipplanes

Valfri lista över klippplan, som är upp till 6 användardefinierade klippplan. Det här är en alternativ mekanism för SV_ClipDistance som fungerar på funktionsnivå 9_x och högre.

namn

En ASCII-sträng som unikt identifierar namnet på skuggningsfunktionen.

ArgumentList

Valfri argumentlista, som är en kommaavgränsad lista över argument skickas till en funktion.

semantisk

Valfri sträng som identifierar den avsedda användningen av returdata (se Semantik (DirectX HLSL)).

StatementBlock

Valfria -instruktioner som utgör funktionens brödtext. En funktion som definieras utan en brödtext kallas för en funktionsprototyp. brödtexten för en prototypfunktion måste definieras någon annanstans innan funktionen kan anropas.

Returvärde

Returtypen kan vara någon av dessa HLSL-typer.

Anmärkningar

Syntaxen på den här sidan beskriver nästan alla typer av HLSL-funktioner, detta inkluderar hörnskuggor, pixelskuggor och hjälpfunktioner. Även om en geometriskuggning också implementeras med en funktion är dess syntax lite mer komplicerad, så det finns en separat sida som definierar en geometrisk skuggningsfunktionsdeklaration (se Geometry-Shader Object (DirectX HLSL)).

En funktion kan överbelastas så länge den ges en unik kombination av parametertyper och/eller parameterordning. HLSL implementerar också ett antal inbyggda eller inbyggda funktioner.

Du kan ange användarspecifika klippplan med urklippsplan attribut. Windows tillämpar dessa klippplan på alla primitiver som ritas. Det clipplanes-attributet fungerar som SV_ClipDistance men fungerar på all maskinvara funktionsnivå 9_x och högre. Mer information finns i Användarklippplan på funktionsnivå 9 maskinvara.

Exempel

Det här exemplet kommer från BasicHLSL10.fx från BasicHLSL10 Sample.

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;    
}

Det här exemplet från AdvancedParticles.fx från AdvancedParticles Sample, illustrerar hur du använder en semantisk för returtypen.

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

Functions (DirectX HLSL)