Funktionsargumente
Eine Funktion verwendet ein oder mehrere Eingabeargumente. Verwenden Sie die folgende Syntax, um jedes Argument zu deklarieren.
| []InputModifier-Typname: [ ] [ Semantische InterpolationModifier ] [ = Initialisierer] |
[Typname ] des [ Modifizierers : ] [ Semantik : Interpolationsmodifizierer ] [ = Initialisierer]
Wenn mehrere Funktionsargumente verfügbar sind, werden sie durch Kommas getrennt.
Parameter
| Element | Beschreibung | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| InputModifier |
Optionaler Begriff, der ein Argument als Eingabe, Ausgabe oder beides identifiziert.
Parameter werden immer als 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 Kurzschreibhand zum Angeben von beidem. Ein einheitlicher Wert stammt aus einem konstanten Register. Jeder Aufruf von Vertex-Shadern oder Pixel-Shadern sieht den gleichen Anfangswert für eine einheitliche Variable. Globale Variablen werden so behandelt, als würden sie als einheitlich deklariert. Bei Funktionen der obersten Ebene ist uniform synonym 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 identifiziert (siehe Semantik (DirectX HLSL)). |
||||||||||
InterpolationModifier |
Optionaler Interpolationsmodifizierer, mit dem ein Shader die Interpolationsmethode bestimmen kann. Ein Interpolationsmodifizierer für ein Funktionsargument gilt nur für ein Argument, das als Eingabe für eine Pixel-Shaderfunktion verwendet wird. |
||||||||||
Initialisierungen |
Optionale Werte für die Initialisierung; mehrere Werte sind erforderlich, um Datentypen mit mehreren Komponenten zu initialisieren. |
Hinweise
Funktionsargumente werden in einer durch Komma getrennten Argumentliste in einer Funktionsdeklaration aufgeführt. Wie bei C-Funktionen muss jedes Argument über einen deklarierten Parameternamen und Typ verfügen. Ein Argument für eine HLSL-Funktion kann optional eine Semantik, einen Anfangswert und eine Pixel-Shadereingabe 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
Dieses Beispiel (aus dem BasicHLSL10-Beispiel)veranschaulicht einheitliche und nicht einheitliche Eingaben für eine Vertex-Shaderfunktion.
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 Pixel-Shaderfunktion zu übergeben.
VSBasicIn input
struct VSBasicIn
{
float4 Pos : POSITION;
float3 Norm : NORMAL;
float2 Tex : TEXCOORD0;
};
PSBasicIn VSBasic(VSBasicIn input)
{
...
}