Funktionsargumente
Eine Funktion akzeptiert ein oder mehrere Eingabeargumente. Verwenden Sie die folgende Syntax, um jedes Argument zu deklarieren.
[InputModifier] Typname [: Semantic] [InterpolationModifier] [= Initialisierer] |
[Modifizierer] Typname [: Semantic] [: Interpolationsmodifizierer] [= Initialisierer]]
Wenn mehrere Funktionsargumente vorhanden sind, werden diese durch Kommas getrennt.
Parameter
Element | BESCHREIBUNG | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
InputModifier |
Optionaler Ausdruck, der ein Argument als Eingabe, Ausgabe oder beides identifiziert.
Parameter werden immer nach Wert übergeben. in gibt an, dass der Wert des Parameters aus der aufrufenden Anwendung kopiert werden soll, bevor die Funktion beginnt. out gibt an, dass der letzte Wert des Parameters kopiert und an die aufrufende Anwendung zurückgegeben werden soll, wenn die Funktion zurückgibt. inout ist eine Abkürzung für die Angabe von beidem. Ein einheitlicher Wert stammt aus einem konstanten Register; Jeder Vertex-Shader- oder Pixelshaderaufruf sieht den gleichen Anfangswert für eine einheitliche Variable. Globale Variablen werden so behandelt, als würden sie als einheitlich deklariert. Für Nicht-Funktionen der obersten Ebene ist uniform gleichbedeutend mit in. Wenn keine Parameterverwendung angegeben wird, wird davon ausgegangen, dass die Parameterverwendung in liegt. |
||||||||||
Typ |
Der Argumenttyp; kann ein beliebiger gültiger HLSL-Typ sein. |
||||||||||
Namen |
Eine ASCII-Zeichenfolge, die den Namen der Shaderfunktion eindeutig identifiziert. |
||||||||||
Semantische |
Optionale Zeichenfolge, die die beabsichtigte Verwendung der Daten angibt (siehe Semantik (DirectX HLSL)). |
||||||||||
InterpolationModifier |
Optionaler Interpolationsmodifizierer , der es einem Shader ermöglicht, die Interpolationsmethode zu bestimmen. Ein Interpolationsmodifizierer für ein Funktionsargument gilt nur für ein Argument, das als Eingabe für eine Pixelshaderfunktion verwendet wird. |
||||||||||
Initialisierungen |
Optionale Werte für die Initialisierung; Zum Initialisieren von Datentypen mit mehreren Komponenten sind mehrere Werte erforderlich. |
Bemerkungen
Funktionsargumente werden in einer durch Trennzeichen getrennten Argumentliste in einer Funktionsdeklaration aufgeführt. Wie in C-Funktionen müssen für jedes Argument ein Parametername und -typ deklariert sein. Ein Argument für eine HLSL-Funktion kann optional eine Semantik, einen Anfangswert und eine Pixelshadereingabe einen Interpolationstyp enthalten.
Der Typ eines Funktionsarguments kann eine Struktur sein, die einen Interpolationsmodifizierer pro Member enthalten kann. Wenn das Funktionsargument auch über einen Interpolationsmodifizierer verfügt, überschreibt der Funktionsargumentmodifizierer interpolationsmodifizierer, die innerhalb des Typs deklariert sind.
Beispiele
In diesem Beispiel (aus dem BasicHLSL10-Beispiel) werden einheitliche und nicht einheitliche Eingaben für eine Vertexshaderfunktion veranschaulicht.
VS_OUTPUT RenderSceneVS(
float4 vPos : POSITION,
float3 vNormal : NORMAL,
float2 vTexCoord0 : TEXCOORD,
uniform int nNumLights,
uniform bool bTexture,
uniform bool bAnimate )
{
...
}
In diesem Beispiel (aus dem ContentStreaming-Beispiel) wird eine Eingabestruktur verwendet, um Argumente an eine Pixelshaderfunktion zu übergeben.
VSBasicIn input
struct VSBasicIn
{
float4 Pos : POSITION;
float3 Norm : NORMAL;
float2 Tex : TEXCOORD0;
};
PSBasicIn VSBasic(VSBasicIn input)
{
...
}