自動產生 Mipmaps (Direct3D 9)
您現在可以自動建立Mipmap,這是一系列紋理,每個紋理都會篩選成不同的解析度。 Mipmap 通常用來在轉譯時提供不同層級的詳細數據。 在紋理建立時間自動產生Mipmap會利用硬體篩選,因為mipmap位於視訊記憶體中。
若要自動產生 mipmap,請先設定新的使用量 D3DUSAGE_AUTOGENMIPMAP,再呼叫 createTexture 。 從這個點開始產生子層級對應用程式而言是完全透明的。 只有最上層紋理層級可供應用程式存取;紋理子層級無法存取,因為它們只會在驅動程式需要時建立。 在子層級產生可能需要很多時間的情況下,請使用 GenerateMipSubLevels 提示驅動程式,指出它應該在適合應用程式的時間產生子層級。
Mipmap 篩選
SetAutoGenFilterType 控制自動產生期間的篩選品質。 變更篩選類型會變更 mipmap 子層級,並使其重新產生。 使用 GetAutoGenFilterType 來取得目前的篩選類型。 默認篩選類型為 D3DTEXF_LINEAR。 如果驅動程式不支援線性篩選,篩選類型將會設定為 D3DTEXF_POINT。
如果紋理不是使用 D3DUSAGE_AUTOGENMIPMAP 建立,而且不會傳回任何失敗,則這些方法沒有任何作用。 驅動程式針對一般紋理篩選支援的所有篩選類型都支援自動產生,但D3DTEXF_NONE除外。 針對每個資源類型,驅動程式應該支持對應紋理、CubeTexture 和 volumetexture 篩選上限中報告的所有篩選類型。
若要檢查支援哪些篩選類型,請檢查以查看 textureFilterCaps 和/或 CubeTextureFilterCaps 成員支援哪些 caps D3DCAPS9。
Mipmap 支援
D3DUSAGE_AUTOGENMIPMAP 只是提示,並在紋理建立期間或呼叫 CheckDeviceFormat 不會在任何設備驅動器介面 (DDI) 類型上造成錯誤。
當來源是自動產生的 mipmap 時,呼叫 UpdateTexture 是不合法的,但目的地不是。 來源可以是非自動產生的Mipmap,而目的地可以是自動產生的Mipmap。 在此情況下,只會更新最上層的相符層級。 所有其他來源子層級都會被忽略。 同樣地,當自動產生來源和目的地時,只會更新最上層的相符層級。 會忽略來源的子層級,並重新產生目的地子層級。
若要檢查是否支援自動產生 mipmap,請檢查是否已設定 D3DCAPS2_CANAUTOGENMIPMAP。 如果是,請使用 D3DUSAGE_AUTOGENMIPMAP呼叫 CheckDeviceFormat 。 如果傳回值是D3D_OK,則保證會自動產生mipmap。 如果傳回值D3DOK_NOAUTOGEN,這表示建立呼叫將會成功,但不會產生任何Mipmap。
相關主題