共用方式為


轉譯 Direct3D 11 (效果)

效果可用來儲存資訊,或使用狀態群組來轉譯。 每個技術都會指定一組頂點著色器、殼層著色器、網域著色器、幾何著色器、圖元著色器、計算著色器、著色器狀態、取樣器和紋理狀態、未排序的存取檢視狀態和其他管線狀態。 因此,一旦您將狀態組織成效果,就可以藉由建立和轉譯效果來封裝該狀態所產生的轉譯效果。

準備轉譯效果有一些步驟。 第一個是編譯,它會根據 HLSL 語言語法和效果架構規則檢查 HLSL,例如程式碼。 您可以使用 API 呼叫從應用程式編譯效果,或使用效果編譯器公用程式離線編譯效果 fxc.exe。 成功編譯效果之後,請呼叫不同的 (但非常類似) 組 API 來建立它。

建立效果之後,有兩個剩餘的步驟可供使用它。 首先,您必須初始化效果狀態值, (效果變數的值,) 在 HLSL 中未初始化時,使用一些方法來設定狀態。 對於某些變數,您可以在建立效果時完成此動作一次;每次應用程式呼叫轉譯迴圈時,都必須更新其他人。 設定效果變數之後,您可以藉由套用技術來告訴執行時間轉譯效果。 以下會進一步詳細討論這些主題。

使用效果自然會有效能考慮。 如果您未使用效果,這些考慮大致相同。 像是將狀態變更數量降至最低,以及依更新頻率來組織變數等專案。 這些策略可用來將需要從 CPU 傳送到 GPU 的資料量降到最低,因而將潛在的同步處理問題降到最低。

本節內容

主題 描述
編譯效果
撰寫效果之後,下一個步驟是編譯器代碼來檢查語法問題。
建立效果
將編譯的效果位元組程式碼載入至效果架構,以建立效果。 不同于效果 10,必須先編譯效果,才能建立效果。 載入記憶體的效果可以藉由呼叫 D3DX11CreateEffectFromMemory來建立。
設定效果狀態
某些效果常數只需要初始化。 初始化之後,效果狀態會設定為整個轉譯迴圈的裝置。 每次呼叫轉譯迴圈時,都必須更新其他變數。 設定效果變數的基本程式碼如下所示,適用于每個變數類型。
套用技術
宣告並初始化常數、紋理和著色器狀態後,唯一要做的事就是在裝置中設定效果狀態。

Direct3D 11 (效果)