HLSL ヘルパー

d2d1effecthelpers.hlsli は、リンク可能なピクセル シェーダーを作成する効果作成者を支援するために、ヘルパー メソッドとマクロの形式で HLSL 言語拡張機能のセットを定義します。

d2d1effecthelpers.hlsli をプロジェクトに追加するには、HLSL ファイルに #include ステートメントを追加します。 d2d1effecthelpers.hlsli は、d2d1.h などの他の Direct2D ヘッダーと同じ場所にあります。HLSL ファイルのプロパティ ページから参照するには、マクロ $(WindowsSDK_IncludePath) を [追加インクルード ディレクトリ] プロパティに追加します。 #include ステートメントは、D2D_INPUT_COUNTなどのプリプロセッサ ディレクティブが定義された後に記述する必要があることに注意してください。

#include <d2d1effecthelpers.hlsli>

Direct2D では、コンピューティング シェーダーまたは頂点シェーダーのリンクはサポートされていません。 ただし、効果で頂点シェーダーとピクセル シェーダーの両方が使用されている場合でも、ピクセル シェーダーの出力はリンクできます。

プリプロセッサ ディレクティブ

効果に関する情報を伝達するには、プリプロセッサ ディレクティブが必要です。 これには、各入力の入力数とサンプリングの種類が含まれます。 該当する場合は、関連するシェーダー エントリ ポイントの上の効果シェーダー コードで次の値を定義する必要があります。

  • D2D_INPUT_COUNT <N> : 効果に対するテクスチャ入力の数を宣言します。 効果に可変数の入力がある場合、この値は各シェーダー エントリ ポイントに対して適切にスコープ設定する必要があります。 この値の定義は必須です。
  • D2D_INPUT<N>_SIMPLE : 単純なサンプリングを使用するように N 番目の入力を宣言します。 定義されていない場合、N 番目の入力は既定で complex になります。 この値の定義は省略可能です。
  • D2D_INPUT<N>_COMPLEX : 複雑なサンプリングを使用するように N 番目の入力を宣言します。 定義されていない場合、N 番目の入力は既定で complex になります。 この値の定義は省略可能です。
  • D2D_REQUIRES_SCENE_POSITION : シェーダー関数が、シーン位置の値を使用するヘルパー メソッド ( つまり、D2DGetScenePosition ヘルパー関数) を呼び出したことを示します。 このパラメーターは、リンクされたシェーダーごとに 1 つの関数しか使用できないため、必要な場合にのみ含める必要があります。 この値の定義は省略可能です。
  • D2D_CUSTOM_ENTRY : ピクセル シェーダー関数がカスタム頂点シェーダーの出力を使用し、入力パラメーターを宣言することを示します。 すべてのカスタム頂点シェーダー入力は複雑なサンプリングを使用し、別のシェーダー関数の出力を使用することはできません (つまり、リンク後のみ)。 この値の定義は省略可能です。

次に例を示します。

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

ヘルパー関数

ヘルパー関数は、一部のネイティブ HLSL 組み込み関数の代わりに使用されます。 コンパイル時に、これらのヘルパー関数は、コンパイル ターゲットの種類 (完全なシェーダーまたはエクスポート関数) に応じて、Direct2D によって適切なバージョンに再定義されます。

ヘルパー関数:

D2DGetInput
D2DSampleInput
D2DSampleInputAtOffset
D2DSampleInputAtPosition
D2DGetInputCoordinate
D2DGetScenePosition
D2D_PS_ENTRY

効果シェーダーのリンク設定