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.
Wert Beschreibung
in Nur Eingabe
Inout Eingabe und Ausgabe
out Nur Ausgabe
Einheitliche Nur konstante Daten eingeben

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)
{
  ...
}

Funktionen (DirectX HLSL)