Freigeben über


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.
Wert Beschreibung
in Nur Eingabe
inout- Eingabe und Ausgabe
Nur Ausgabe
einheitliche Nur Konstantendaten 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ü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)
{
  ...
}

Funktionen (DirectX HLSL)