Syntax der Funktionsdeklaration

HLSL-Funktionen werden mit der folgenden Syntax deklariert.

[StorageClass ] [clipplanes() ] [ precise ] Return Value _ Name ( [ ArgumentList ] ) : [ Semantic ] { [ StatementBlock ] };

Parameter

StorageClass

Modifizierer, der eine Funktionsdeklaration neu definiert. Inline ist derzeit der einzige Modifiziererwert. Der Modifiziererwert muss inline sein, da er auch der Standardwert ist. Daher ist eine Funktion inline, unabhängig davon, ob Sie inline angeben und alle Funktionen in HLSL inline sind. Eine Inlinefunktion generiert eine Kopie des Funktionstexts (beim Kompilieren) für jeden Funktionsaufruf. Dies wird durchgeführt, um den Mehraufwand für den Aufruf der Funktion zu verringern.

Clipplanes

Optionale Liste der Clipebenen, d. h. bis zu 6 benutzerdefinierte Clipebenen. Dies ist ein alternativer Mechanismus für SV _ ClipDistance, der auf Featureebene 9 _ x und höher funktioniert.

Namen

Eine ASCII-Zeichenfolge, die den Namen der Shaderfunktion eindeutig identifiziert.

Argumentlist

Optionale Argumentliste, bei der es sich um eine durch Kommas getrennte Liste von Argumenten handelt, die an eine Funktion übergeben werden.

Semantische

Optionale Zeichenfolge, die die beabsichtigte Verwendung der Rückgabedaten angibt (siehe Semantik (DirectX HLSL)).

StatementBlock

Optionale Anweisungen, die den Textkörper der Funktion bilden. Eine Funktion, die ohne Text definiert ist, wird als Funktionsprototyp bezeichnet. Der Text einer Prototypfunktion muss an anderer Stelle definiert werden, bevor die Funktion aufgerufen werden kann.

Rückgabewert

Der Rückgabetyp kann einer dieser HLSL-Typensein.

Hinweise

Die Syntax auf dieser Seite beschreibt fast jeden Typ von HLSL-Funktion. Dazu gehören Vertex-Shader, Pixel-Shader und Hilfsfunktionen. Während ein Geometry-Shader auch mit einer Funktion implementiert wird, ist seine Syntax etwas komplizierter, sodass es eine separate Seite gibt, die eine Deklaration einer Geometry-Shader-Funktion definiert (siehe Geometry-Shader Object (DirectX HLSL)).

Eine Funktion kann überladen werden, solange sie eine eindeutige Kombination aus Parametertypen und/oder Parameterreihenfolge erhält. HLSL implementiert auch eine Reihe von integrierten oder intrinsischen Funktionen.

Sie können benutzerspezifische Clipebenen mit dem Clipplanes-Attribut angeben. Windows wendet diese Clipebenen auf alle gezeichneten Primitive an. Das Clipplanes-Attribut funktioniert wie SV _ ClipDistance, funktioniert jedoch auf allen Hardwarefeatureebenen 9 _ x und höher. Weitere Informationen finden Sie unter User clip planes on feature level 9 hardware (Benutzer clip planes on feature level 9 hardware ( Benutzer clip planes on feature level 9 hardware).

Beispiele

Dieses Beispiel stammt aus BasicHLSL10.fx aus dem BasicHLSL10-Beispiel.

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

Dieses Beispiel aus AdvancedParticles.fx aus dem AdvancedParticles-Beispielveranschaulicht die Verwendung einer Semantik für den Rückgabetyp.

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

Funktionen (DirectX HLSL)