Freigeben über


HLSL-Hilfsprogramme

Um Effektautoren beim Schreiben von verlinkbaren Pixelshadern zu unterstützen, definiert d2d1effecthelpers.hlsli eine Reihe von HLSL-Spracherweiterungen in Form von Hilfsmethoden und Makros.

Um Ihrem Projekt d2d1effecthelpers.hlsli hinzuzufügen, fügen Sie in der HLSL-Datei eine #include-Anweisung hinzu. d2d1effecthelpers.hlsli befindet sich am gleichen Speicherort wie andere Direct2D-Header wie d2d1.h; Sie können auf der Eigenschaftenseite der HLSL-Datei darauf verweisen, indem Sie das Makro $(WindowsSDK_IncludePath) zur Eigenschaft Additional Include Directories hinzufügen. Beachten Sie, dass die #include-Anweisung kommen muss, nachdem Präprozessordirektiven wie D2D_INPUT_COUNT definiert wurden.

#include <d2d1effecthelpers.hlsli>

Direct2D unterstützt keine Verknüpfung von Compute- oder Vertexshadern. Wenn Ihr Effekt jedoch sowohl einen Vertex-Shader als auch einen Pixelshader verwendet, kann die Ausgabe des Pixelshaders weiterhin verknüpft werden.

Präprozessoranweisungen

Präprozessordirektiven sind erforderlich, um Informationen über den Effekt zu kommunizieren. Dies umfasst die Anzahl der Eingaben und den Samplingtyp jeder Eingabe. Die folgenden Werte sollten im Effektshadercode oberhalb des relevanten Shadereinstiegspunkts definiert werden, sofern zutreffend.

  • D2D_INPUT_COUNT <N> : Deklariert die Anzahl der Textureingaben für den Effekt. Wenn der Effekt eine variable Anzahl von Eingaben aufweist, muss dieser Wert entsprechend jedem Shadereinstiegspunkt festgelegt werden. Die Definition dieses Werts ist obligatorisch.
  • D2D_INPUT<N>_SIMPLE : Deklariert die N-te Eingabe, um einfache Stichprobenerstellung zu verwenden. Wenn sie nicht definiert ist, wird die N-te Eingabe standardmäßig auf komplex festgelegt. Die Definition dieses Werts ist optional.
  • D2D_INPUT<N>_COMPLEX : Deklariert die N-te Eingabe, um komplexe Stichproben zu verwenden. Wenn sie nicht definiert ist, wird die N-te Eingabe standardmäßig auf komplex festgelegt. Die Definition dieses Werts ist optional.
  • D2D_REQUIRES_SCENE_POSITION : Gibt an, dass die Shaderfunktion Hilfsmethoden aufruft, die den Szenenpositionswert verwenden (nämlich die Hilfsfunktion D2DGetScenePosition ). Dieser Parameter sollte nur bei Bedarf eingeschlossen werden, da nur eine Funktion pro verknüpftem Shader diesen Parameter verwenden kann. Die Definition dieses Werts ist optional.
  • D2D_CUSTOM_ENTRY : Gibt an, dass die Pixelshaderfunktion die Ausgabe eines benutzerdefinierten Vertexshaders nutzt und somit seine Eingabeparameter deklariert. Alle benutzerdefinierten Vertexshadereingaben verwenden komplexe Stichproben und können die Ausgabe einer anderen Shaderfunktion nicht nutzen (d. h. sie sind nur nach der Verknüpfung verfügbar). Die Definition dieses Werts ist optional.

Beispiel:

#define D2D_INPUT_COUNT 3
#define D2D_INPUT0_SIMPLE
#define D2D_INPUT1_SIMPLE
#define D2D_INPUT2_COMPLEX
#include <d2d1effecthelpers.hlsli>
          

Hilfsfunktionen

Hilfsfunktionen werden als Ersatz für einige systemeigene HLSL-Funktionen verwendet. Zur Kompilierzeit werden diese Hilfsfunktionen von Direct2D in der entsprechenden Version neu definiert, je nach Kompilierungszieltyp (vollständiger Shader oder Exportfunktion).

Die Hilfsfunktionen:

D2DGetInput
D2DSampleInput
D2DSampleInputAtOffset
D2DSampleInputAtPosition
D2DGetInputCoordinate
D2DGetScenePosition
D2D_PS_ENTRY

Effektshader-Verknüpfung