Direct3D 9 (效果)

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

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

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

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

效果和 3D 管線

下圖顯示管線。

3d 管線的圖表

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

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

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

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

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

效果儲存和還原狀態

效果管理狀態。 此處使用文字狀態非常廣泛,因為它包含管線需要指定轉譯條件的所有類型資訊。 這包括管線的所有功能區域。

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

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

效果可以共用參數

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

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

Direct3D 9 的程式設計指南