Delen via


Syntaxis van functiedeclaratie

HLSL-functies worden gedeclareerd met de volgende syntaxis.

[StorageClass] [clipvlakken()] [nauwkeurig] Return_Value Name ( [ArgumentList] ) [: Semantische] { [StatementBlock] };

 

Parameters

StorageClass-

Modifier waarmee een functiedeclaratie opnieuw wordt gedefinieerd. inline- is momenteel de enige wijzigingswaarde. De wijzigingswaarde moet worden inline- omdat deze ook de standaardwaarde is. Daarom is een functie inline, ongeacht of u inline-opgeeft en alle functies in HLSL inline zijn. Een inlinefunctie genereert een kopie van de hoofdtekst van de functie (bij het compileren) voor elke functieaanroep. Dit wordt gedaan om de overhead van het aanroepen van de functie te verminderen.

Clipplanes

Optionele lijst met clipvlakken, die maximaal 6 door de gebruiker opgegeven clipvlakken zijn. Dit is een alternatief mechanisme voor SV_ClipDistance dat werkt op functieniveau 9_x en hoger.

naam

Een ASCII-tekenreeks die de naam van de arceringsfunctie uniek identificeert.

argumentlijst

Optionele argumentenlijst, een door komma's gescheiden lijst met argumenten doorgegeven aan een functie.

Semantische

Optionele tekenreeks die het beoogde gebruik van de retourgegevens identificeert (zie Semantiek (DirectX HLSL)).

StatementBlock-

Optionele instructies die de hoofdtekst van de functie vormen. Een functie die zonder hoofdtekst is gedefinieerd, wordt een functieprototype genoemd; de hoofdtekst van een prototypefunctie moet ergens anders worden gedefinieerd voordat de functie kan worden aangeroepen.

Retourwaarde

Het retourtype kan een van deze HLSL-typen zijn.

Opmerkingen

De syntaxis op deze pagina beschrijft bijna elk type HLSL-functie, dit omvat hoekpunt-shaders, pixel-shaders en helperfuncties. Hoewel een geometrie-shader ook wordt geïmplementeerd met een functie, is de syntaxis iets ingewikkelder, dus er is een afzonderlijke pagina die een declaratie van de geometrie-shaderfunctie definieert (zie Geometry-Shader Object (DirectX HLSL)).

Een functie kan worden overbelast zolang deze een unieke combinatie van parametertypen en/of parametervolgorde krijgt. HLSL implementeert ook een aantal ingebouwde of intrinsieke functies.

U kunt gebruikersspecifieke clipvlakken opgeven met het kenmerk clipvlakken. Windows past deze clipvlakken toe op alle primitieven die zijn getekend. Het clipplanes kenmerk werkt als SV_ClipDistance, maar werkt op alle hardware functieniveau 9_x en hoger. Zie Gebruikersclipvlakken op hardwareniveau 9 op functieniveau 9voor meer informatie.

Voorbeelden

Dit voorbeeld is afkomstig van BasicHLSL10.fx uit de 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;    
}

Dit voorbeeld van AdvancedParticles.fx uit de AdvancedParticles Sample, illustreert het gebruik van een semantisch voor het retourtype.

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

Functions (DirectX HLSL)