Funktionsargumente
Eine Funktion verwendet ein oder mehrere Eingabeargumente; Verwenden Sie die folgende Syntax, um jedes Argument zu deklarieren.
[InputModifier] Typname [: Semantik] [InterpolationModifier] [= Initialisierer] |
[Modifizierer] Typname [: Semantik] [: Interpolation Modifier] [= Initializer(s)]
Wenn mehrere Funktionsargumente vorhanden sind, werden sie durch Kommas getrennt.
Parameter
Artikel | 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ückgegeben wird. "inout" ist eine Kurzform zum Angeben beider Optionen. Ein einheitlicher Wert stammt aus einem Konstantenregister; Jeder Vertex-Shader- oder Pixelshaderaufruf sieht denselben Anfangswert für eine einheitliche Variable. Globale Variablen werden so behandelt, als ob sie einheitlich deklariert werden. Bei Funktionen auf oberster Ebene ist uniform gleichbedeutend mit in. Wenn keine Parameterverwendung angegeben wird, wird davon ausgegangen, dass die Parameterverwendung in wird. |
||||||||||
Typ |
Der Argumenttyp; kann ein beliebiger gültiger HLSL-Typsein. |
||||||||||
Name |
Eine ASCII-Zeichenfolge, die den Namen der Shaderfunktion eindeutig identifiziert. |
||||||||||
semantischen |
Optionale Zeichenfolge, die die beabsichtigte Verwendung der Daten identifiziert (siehe Semantik (DirectX HLSL)). |
||||||||||
InterpolationModifier- |
Optionaler Interpolationsmodifizierer, mit dem ein Shader die Methode der Interpolation bestimmen kann. Ein Interpolationsmodifizierer für ein Funktionsargument gilt nur für ein Argument, das als Eingabe für eine Pixelshaderfunktion verwendet wird. |
||||||||||
Initialisierer |
Optionale Werte für die Initialisierung; Zum Initialisieren mehrerer Komponentendatentypen sind mehrere Werte erforderlich. |
Bemerkungen
Funktionsargumente werden in einer durch Trennzeichen getrennten Argumentliste in einer Funktionsdeklaration aufgeführt. Wie in C-Funktionen muss jedes Argument einen Parameternamen und einen typ deklariert haben; Ein Argument für eine HLSL-Funktion kann optional eine Semantik, einen Anfangswert und eine Pixelshadereingabe einen Interpolationstyp enthalten.
Die Typ- eines Funktionsarguments könnte eine Struktur sein, die einen Interpolationsmodifizierer pro Element 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 Sample) werden einheitliche und nicht einheitliche Eingaben für eine Vertex-Shaderfunktion 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)
{
...
}