多元素紋理 (Direct3D 9)
傳統紋理會被視為單一元素紋理。 多重元素紋理可讓應用程式從圖元著色器同時寫入紋理的多個元素。 下一個轉譯階段的結果是應用程式可以使用一或多個元素做為單一元素紋理,也就是作為圖元著色器的輸入。 這些額外的元素可以視為中繼結果的暫存存放區,以供應用程式稍後使用。
公開這項功能的第一代硬體有下列限制:
- 所有多元素紋理表面都會自動配置。 將這項限制視為交錯多個 RGBA 通道的新型表面格式,藉此解決此限制。
- 多個元素紋理的所有元素都可以有相同的位深度。 這項限制會以新介面格式的名稱表示。
- 多元素紋理不能是主要/可顯示。 換句話說,它必須是非螢幕。 此限制是由介面格式列舉來表示。
- 不允許任何打勾、Alpha 測試、霧化、混合、點陣作業或遮罩。 除了 z 測試和樣板測試之外,不會執行圖元後著色器處理。
- 紋理不能是Mipmap。 建立 mip 鏈結將會失敗。
- 同一個元素不能同時設定為紋理,同時它是轉譯目標。 不過,相同多元素紋理表面的不同元素可以同時成為紋理和轉譯目標。
- 不支援反鋸齒。
- 當做紋理使用時,無法篩選多個元素紋理表面。 您可以使用 checkDeviceFormat 來驗證這項限制。
- 無法鎖定多個元素紋理表面。
- 您可以藉由將每個元素指派給各種階段,就像一般紋理一樣,同時使用多個多元素紋理表面。
- 多元素紋理表面支援在讀取作業上將 gamma 從 2.2 轉換成 1.0,就像其他紋理格式一樣。
- 某些實作不會套用輸出寫入遮罩 (D3DRS_COLORWRITEENABLE)。 可以有獨立色彩寫入遮罩的遮罩。 這會使用新的功能位來表示。 可用的獨立色彩寫入遮罩數目將等於裝置能夠使用的最大元素數目。
- Clear 會清除設定為轉譯目標之多重元素紋理的所有元素。
使用多重元素紋理會遵循下列步驟:
- 應用程式會藉由檢查多重元素紋理格式的可用性,來探索這項功能的支援。
- 應用程式會呼叫 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 旗標表示裝置支援多個元素紋理或多個轉譯目標的獨立寫入遮罩。
相關主題