Syntax der Funktionsdeklaration

HLSL-Funktionen werden mit der folgenden Syntax deklariert.

[StorageClass] [clipplanes()] [präzise] 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 sind inline. Eine Inlinefunktion generiert eine Kopie des Funktionstexts (beim Kompilieren) für jeden Funktionsaufruf. Dies geschieht, um den Mehraufwand für das Aufrufen der Funktion zu verringern.

Clipplanes

Optionale Liste von Clipebenen mit bis zu 6 benutzerdefinierten 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 Trennzeichen 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 Text der Funktion bilden. Eine ohne Körper definierte Funktion wird als Funktionsprototyp bezeichnet. Der Textkörper einer Prototypfunktion muss an anderer Stelle definiert werden, bevor die Funktion aufgerufen werden kann.

Rückgabewert

Der Rückgabetyp kann einer dieser HLSL-Typen sein.

Bemerkungen

Die Syntax auf dieser Seite beschreibt fast jeden Typ von HLSL-Funktion, einschließlich Vertex-Shadern, Pixel-Shadern und Hilfsfunktionen. Während ein Geometrie-Shader auch mit einer Funktion implementiert wird, ist seine Syntax etwas komplizierter, sodass es eine separate Seite gibt, die eine Geometrie-Shaderfunktionsdeklaration 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 Grundtypen an. Das Clipplanes-Attribut funktioniert wie SV_ClipDistance aber auf allen Hardwarefeatureebenen 9_x und höher. Weitere Informationen finden Sie unter Benutzerclipebenen auf Hardware der Featureebene 9.

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-Beispiel veranschaulicht 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)