Helper HLSL

Per consentire agli autori di effetti di scrivere pixel shader collegabili, d2d1effecthelpers.hlsli definisce un set di estensioni del linguaggio HLSL sotto forma di metodi helper e macro.

Per aggiungere d2d1effecthelpers.hlsli al progetto, aggiungere un'istruzione #include nel file HLSL. d2d1effecthelpers.hlsli si trova nella stessa posizione di altre intestazioni Direct2D, ad esempio d2d1.h; è possibile farvi riferimento dalla pagina delle proprietà del file HLSL aggiungendo la macro $(WindowsSDK_IncludePath) alla proprietà Directory di inclusione aggiuntive. Si noti che l'istruzione #include deve provenire dopo la definizione di eventuali direttive del preprocessore, ad esempio D2D_INPUT_COUNT.

#include <d2d1effecthelpers.hlsli>

Direct2D non supporta il collegamento di compute o vertex shader. Tuttavia, se l'effetto usa sia un vertex shader che un pixel shader, l'output del pixel shader può comunque essere collegato.

Direttive per il preprocessore

Le direttive del preprocessore sono necessarie per comunicare informazioni sull'effetto. Sono inclusi il numero di input e il tipo di campionamento di ogni input. I valori seguenti devono essere definiti nel codice dello shader dell'effetto sopra il punto di ingresso dello shader pertinente, se applicabile.

  • D2D_INPUT_COUNT <N> : dichiara il numero di input di trama all'effetto. Se l'effetto ha un numero variabile di input, questo valore deve essere limitato in modo appropriato a ogni punto di ingresso dello shader. La definizione di questo valore è obbligatoria.
  • D2D_INPUT<N>_SIMPLE : dichiara l'input Nth per l'uso del campionamento semplice. Se non è definito, per impostazione predefinita l'input Nth è complesso. La definizione di questo valore è facoltativa.
  • D2D_INPUT<N>_COMPLEX : dichiara l'input Nth per l'uso di campionamento complesso. Se non è definito, per impostazione predefinita l'input Nth è complesso. La definizione di questo valore è facoltativa.
  • D2D_REQUIRES_SCENE_POSITION : indica che la funzione shader chiama metodi helper che usano il valore della posizione della scena (vale a dire la funzione helper D2DGetScenePosition ). Questo parametro deve essere incluso solo quando necessario, poiché solo una funzione per ogni shader collegato può usare questo parametro. La definizione di questo valore è facoltativa.
  • D2D_CUSTOM_ENTRY : indica che la funzione pixel shader utilizza l'output di un vertex shader personalizzato e quindi dichiarerà i parametri di input. Tutti gli input del vertex shader personalizzato usano il campionamento complesso e non possono utilizzare l'output di un'altra funzione shader( ovvero sono solo post-linkable). La definizione di questo valore è facoltativa.

Ad esempio:

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

Funzioni di supporto

Le funzioni helper vengono usate come sostituzione per alcune funzioni intrinseche HLSL native. In fase di compilazione, queste funzioni helper vengono ridefinite da Direct2D nella versione appropriata a seconda del tipo di destinazione di compilazione (funzione full shader o export).

Le funzioni helper:

D2DGetInput
D2DSampleInput
D2DSampleInputAtOffset
D2DSampleInputAtPosition
D2DGetInputCoordinate
D2DGetScenePosition
D2D_PS_ENTRY

Collegamento degli shader degli effetti