HLSL 協助程式

為了協助效果作者撰寫可連結的圖元著色器,d2d1effecthelpers.hlsli 會以協助程式方法和宏的形式定義一組 HLSL 語言延伸模組。

若要將 d2d1effecthelpers.hlsli 新增至專案,請在 HLSL 檔案中新增 #include 語句。 d2d1effecthelpers.hlsli 位於與其他 Direct2D 標頭相同的位置,例如 d2d1.h;您可以從 HLSL 檔案的屬性頁參考它,方法是將宏 $ (WindowsSDK_IncludePath) 新增至 [其他包含目錄] 屬性。 請注意,#include 語句必須位於定義任何預處理器指示詞之後,例如D2D_INPUT_COUNT。

#include <d2d1effecthelpers.hlsli>

Direct2D 不支援連結計算或頂點著色器。 不過,如果您的效果同時使用頂點著色器和圖元著色器,圖元著色器的輸出仍然可以連結。

前置處理器指示詞

需要預處理器指示詞,才能傳達效果的相關資訊。 這包括每個輸入的輸入數目和取樣類型。 在適用時,應該在效果著色器程式碼中定義下列值。在相關的著色器進入點上方。

  • D2D_INPUT_COUNT <N> :宣告效果的紋理輸入數目。 如果效果具有可變數目的輸入,此值必須適當地限定在每個著色器進入點的範圍。 定義此值是必要的。
  • D2D_INPUT<N>_SIMPLE :宣告第 N 個輸入以使用簡單的取樣。 如果未定義,第 N 個輸入預設為複雜。 定義此值是選擇性的。
  • D2D_INPUT<N>_COMPLEX :宣告第 N 個輸入以使用複雜的取樣。 如果未定義,第 N 個輸入預設為複雜。 定義此值是選擇性的。
  • D2D_REQUIRES_SCENE_POSITION :表示著色器函式會呼叫使用場景位置值的協助程式方法 (,也就是 D2DGetScenePosition 協助程式函式) 。 此參數只應該在必要時包含,因為每個連結著色器只能使用此參數一個函式。 定義此值是選擇性的。
  • 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

效果著色器連結