呈現效果 (Direct3D 11)
效果可用來儲存資訊,或使用狀態群組來轉譯。 每個技術都會指定一組頂點著色器、船體著色器、網域著色器、幾何著色器、圖元著色器、計算著色器、著色器狀態、取樣器和紋理狀態、未排序的存取檢視狀態和其他管線狀態。 因此,一旦您將狀態組織成效果,接著您可以通過創建和渲染效果來封裝源於該狀態的渲染效果。
要準備渲染效果,有幾個步驟。 第一個是編譯,它會檢查類似 HLSL 的代碼是否符合 HLSL 語言語法和效果框架規則。 您可以使用 API 呼叫從應用程式編譯效果,或使用效果編譯程式公用程式 fxc.exe離線編譯效果。 成功編譯效果之後,請呼叫一組非常相似的 API 來建立它。
建立效果之後,還有兩個步驟可供使用。 首先,如果您未在 HLSL 中初始化效果狀態值(效果變數的值),則必須使用多種方法來設定這些狀態值。 對於某些變數,這可以在建立效果時完成一次,而其他變數則需在每次應用程式呼叫轉譯迴圈時進行更新。 設定效果變數之後,您可以透過套用技術來告知運行時呈現效果。 以下會進一步詳細討論這些主題。
自然地,使用效果時會有效能上的考量。 如果您沒有使用效果,這些考量大致上是相同的。 像是將狀態變更數量降至最低,以及依更新頻率來組織變數等專案。 這些策略可用來將需要從CPU傳送到 GPU 的數據量降到最低,因而將潛在的同步處理問題降到最低。
在本節中
主題 | 描述 |
---|---|
編譯特效 |
撰寫效果之後,下一個步驟是編譯程式代碼以檢查語法問題。 |
建立效果 |
將編譯的效果位元組程式代碼載入至效果架構,以建立效果。 與效果 10 不同,必須先編譯效果,才能建立效果。 可以透過呼叫 D3DX11CreateEffectFromMemory來建立加載至記憶體中的效果。 |
效果狀態設置 |
某些效果常數只需要初始化。 初始化之後,效果狀態會設定為整個轉譯迴圈的裝置。 每次呼叫轉譯迴圈時,都需要更新其他變數。 設定效果變數的基本程序代碼如下所示,適用於每個變數類型。 |
套用技巧 |
宣告並初始化常數、紋理和著色器狀態時,唯一要做的就是在裝置中設定效果狀態。 |