共用方式為


效果 (Direct3D 9)

Microsoft DirectX 效果可讓頂點和像素著色器與管線狀態整合,以轉譯物件。 效果是結合著色器以產生唯一轉譯條件的下一個邏輯步驟。

效果也提供方便的方式,為不同的硬體版本撰寫著色器。 因為不同的視訊卡支援不同的功能,因此應用程式可以撰寫數種可在各種裝置上執行的技術。 如此一來,如果應用程式是在最新且最偉大的硬體上執行,應用程式就可以執行最複雜的效果技術。 另一方面,可以自動選擇較不複雜的效果技術,以在成本較低或功能較低的硬體上執行。

效果可以取代圖形管線所執行之圖元處理的頂點處理和一部分。 使用頂點著色器和像素著色器的效果範例位於 BasicHLSL 範例中。 您可以從 DirectX SDK 取得此範例並加以瞭解。 如需 DirectX SDK 的相關信息,請參閱 DirectX SDK 在哪裡?

如需效果的詳細資訊,請參閱下列主題:

效果和 3D 管線

下圖顯示管線。

3d 管線圖表

管線會將輸入數據轉換成填滿框架緩衝區的輸出圖元。 輸入數據來自對象空間中由頂點組成的物件,或從 N 修補程式、矩形修補程式和三角形修補程式建立的較高順序表面。 輸入數據經過鑲嵌之後,管線就會執行頂點處理、基本處理和像素處理,再產生最終圖元色彩。

頂點和像素處理可由固定函式管線執行,或者可以使用可程式化的著色器來實作。 輸入數據鑲嵌、基本處理和數據輸出是由管線狀態所控制。 這一切都可以整合到效果中。 效果會設定控制管線運作方式的狀態。 效果會管理可程式化的著色器以及固定函式狀態。

效果可以儲存和還原狀態,讓裝置處於與執行效果之前相同的狀態。 效果可以管理的狀態類型包括:

  • 著色器狀態。 這包括建立和刪除著色器、設定著色器常數、設定著色器狀態,以及使用著色器轉譯。
  • 紋理和取樣器狀態。 這包括指定紋理檔案、初始化紋理階段、建立取樣器物件,以及設定取樣器狀態。
  • 其他管線狀態。 這包括設定轉換、光源、材質和轉譯選項的狀態。 這些可以是全域或局部變數。 變數可由效果本身或應用程式設定。

效果包含多個稱為技術的轉譯選項。 每個技術都會封裝全域變數、管線狀態、紋理和取樣器狀態,以及著色器狀態。 單一樣式會在轉譯階段中實作。 一或多個傳遞可以封裝在技術中。 所有通過和技術都可以驗證,以查看效果程式代碼是否會在硬體裝置上執行。

效果儲存和還原狀態

效果管理狀態。 此處非常廣泛地使用狀態一詞,因為它包含管線需要指定轉譯條件的各種資訊。 這幾乎包括管線的所有功能區域。

轉譯選項是由技術和傳遞所控制。 應用程式會藉由設定一種作用中的技術來轉譯效果,並轉譯一或多個傳遞。 效果中的所有轉譯都會在相符的 BeginEnd 呼叫內完成。 呼叫 Begin 時,會建立狀態區塊並儲存裝置狀態(除非您另有指定)。 在技術轉譯應用程式指定要轉譯的傳遞之後,End 呼叫以結束使用中的技術。 效果系統會自動還原在狀態區塊中擷取的管線狀態來回應(除非您選擇停用此儲存和還原功能)。

在設計多階段轉譯序列的程序設計時,每個序列都需要自己的狀態設定,效果可以減少追蹤狀態變更所需的管家。 若要檢視可透過效果儲存和還原之狀態的詳細資訊,請參閱 效果狀態 (Direct3D 9)

效果可以共用參數

效果參數是效果中宣告的所有非靜態變數。 這可以包含全域變數和批注。 效果參數可以透過使用共用關鍵詞宣告參數,然後使用效果集區建立效果,在不同的效果之間共用。

複製的效果會使用與複製效果相同的效果集區。 複製效果會製作效果的確切復本,包括全域變數、技術、傳遞和批注。

Direct3D 9 程式設計指南