Syntax der Funktionsdeklaration
HLSL-Funktionen werden mit der folgenden Syntax deklariert.
[StorageClass] [clipplanes()] [genau] 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 geschieht, um den Mehraufwand beim Aufrufen der Funktion zu verringern.
-
Clipplanes
-
Optionale Liste der Clipebenen, bei denen es sich um bis zu 6 benutzerdefinierte Clipebenen handelt. Dies ist ein alternativer Mechanismus für SV_ClipDistance, der auf Featureebene 9_x und höher funktioniert.
-
Name
-
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, an eine Funktion übergeben werden.
-
semantischen
-
Optionale Zeichenfolge, die die beabsichtigte Verwendung der Rückgabedaten identifiziert (siehe Semantik (DirectX HLSL)).
-
StatementBlock-
-
Optionale Anweisungen, die den Textkörper der Funktion bilden. Eine ohne einen Textkö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 eine der folgenden HLSL-Typensein.
Bemerkungen
Die Syntax auf dieser Seite beschreibt fast jeden Typ von HLSL-Funktion, dies umfasst Vertex-Shader, Pixelshader und Hilfsfunktionen. Während ein Geometrie-Shader auch mit einer Funktion implementiert wird, ist die Syntax etwas komplizierter, daher gibt es eine separate Seite, 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 integrierter oder systeminterner Funktionen.
Sie können benutzerdefinierte Clipebenen mit den Clipplanes Attribut angeben. Windows wendet diese Clipebenen auf alle gezeichneten Grundtypen an. Das Clipplanes Attribut funktioniert wie SV_ClipDistance, funktioniert aber auf allen Hardware-Featureebenen 9_x und höher. Weitere Informationen finden Sie unter Beschneidungsebenen auf Featureebene 9 Hardware-.
Beispiele
Dieses Beispiel stammt aus BasicHLSL10.fx aus dem 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;
}
Dieses Beispiel aus AdvancedParticles.fx aus dem AdvancedParticles Sampleveranschaulicht 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;
}
Verwandte Themen