共用方式為


呈現效果 (Direct3D 11)

效果可用來儲存資訊,或使用狀態群組來轉譯。 每個技術都會指定一組頂點著色器、船體著色器、網域著色器、幾何著色器、圖元著色器、計算著色器、著色器狀態、取樣器和紋理狀態、未排序的存取檢視狀態和其他管線狀態。 因此,一旦您將狀態組織成效果,接著您可以通過創建和渲染效果來封裝源於該狀態的渲染效果。

要準備渲染效果,有幾個步驟。 第一個是編譯,它會檢查類似 HLSL 的代碼是否符合 HLSL 語言語法和效果框架規則。 您可以使用 API 呼叫從應用程式編譯效果,或使用效果編譯程式公用程式 fxc.exe離線編譯效果。 成功編譯效果之後,請呼叫一組非常相似的 API 來建立它。

建立效果之後,還有兩個步驟可供使用。 首先,如果您未在 HLSL 中初始化效果狀態值(效果變數的值),則必須使用多種方法來設定這些狀態值。 對於某些變數,這可以在建立效果時完成一次,而其他變數則需在每次應用程式呼叫轉譯迴圈時進行更新。 設定效果變數之後,您可以透過套用技術來告知運行時呈現效果。 以下會進一步詳細討論這些主題。

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

在本節中

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

效果(Direct3D 11)