多元素紋理 (Direct3D 9)
傳統紋理會被視為單一元素紋理。 多元素紋理可讓應用程式從圖元著色器同時寫入紋理的多個元素。 下一個轉譯階段的結果是應用程式可以使用一或多個元素做為單一元素紋理,也就是做為圖元著色器的輸入。 這些額外的元素可以視為中繼結果的暫存存放區,以供應用程式稍後傳遞使用。
公開此功能的第一代硬體有下列限制:
- 所有多元素紋理表面都會自動設定。 此限制可藉由將此視為具有多個 RGBA 通道交錯的新類型表面格式來處理。
- 多個元素紋理的所有元素都可以有相同的位深度。 這項限制是以新介面格式的名稱表示。
- 多元素紋理不能是主要/可顯示。 換句話說,它必須是螢幕外。 這項限制是以介面格式列舉來表示。
- 不允許使用任一、Alpha 測試、模糊、混合、點陣作業或遮罩。 沒有完成圖元後著色器處理,但 z 測試與樣板測試除外。
- 紋理不能是 mipmap。 建立 Mip 鏈結將會失敗。
- 同一個專案不能同時設定為紋理,而該元素是轉譯目標。 不過,相同多元素紋理表面的不同元素可以同時是紋理和轉譯目標。
- 不支援反鋸齒。
- 當做紋理使用時,無法篩選多元素紋理表面。 您可以使用 CheckDeviceFormat來驗證此限制。
- 無法鎖定多元素紋理表面。
- 您可以將每個紋理指派給各種階段,就像一般紋理一樣,同時使用多個多元素紋理表面。
- 多元素紋理表面支援在讀取作業上將 gamma 從 2.2 轉換為 1.0,就像其他紋理格式一樣。
- 某些實作不會套用輸出寫入遮罩 (D3DRS_COLORWRITEENABLE) 。 可以有獨立色彩寫入遮罩的遮罩。 這會使用新功能位來表示。 可用的獨立色彩寫入遮罩數目會等於裝置能夠使用的最大元素數目。
- 清除 清除已設定為轉譯目標之多重元素紋理的所有元素。
多重元素紋理的使用方式遵循下列步驟:
- 應用程式會檢查多重元素紋理格式的可用性,以探索此功能的支援。
- 應用程式會呼叫 CreateTexture來建立這些介面。
- 應用程式會使用 SetRenderTarget 呼叫,將介面設定為轉譯目標。 圖元著色器會使用 mov - ps 指令,為表面提供輸出。
- 系統會呼叫 SetTexture ,將多元素紋理表面設定為特定階段。 與其他紋理一樣,允許將相同的表面一次設定為多個階段。
- 系統會呼叫 SetSamplerState ,將D3DSAMP_ELEMENTINDEX設定為取樣器從中取樣的多重元素紋理中適當的元素編號。 此狀態的預設值為 0,這表示非多元素紋理可以運作。 將此狀態設定為不適當的數位會導致未定義的行為 - 如果多重元素紋理只有兩個元素寬,但要求取樣器從第四個元素取樣,例如。
API 支援
以下是支援多重元素紋理的 API 元素摘要:
D3DFMT_MULTI2_ARGB8介面格式表示格式的交錯本質。
D3DSAMP_ELEMENTINDEX取樣器狀態會指出要使用的專案索引。
下列轉譯狀態支援多個元素紋理:
- D3DRS_COLORWRITEENABLE1
- D3DRS_COLORWRITEENABLE2
- D3DRS_COLORWRITEENABLE3
D3DRS_COLORWRITEENABLE適用于轉譯目標 (或元素) 零。
D3DPMISCCAPS_INDEPENDENTWRITEMASKS旗標表示裝置支援多個元素紋理或多個轉譯目標的獨立寫入遮罩。
相關主題