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;
}
Zugehörige Themen