紋理骯髒區域 (Direct3D 9)
應用程式可以藉由在紋理上指定「骯髒」區域,將紋理的子集複製優化。 只有標示為 dirty 的區域會透過呼叫 IDirect3DDevice9::UpdateTexture來複製。 不過,可能會擴充骯髒的區域,以優化對齊方式。 建立紋理時,會將整個紋理視為骯髒。 只有下列作業會影響紋理的骯髒狀態:
- 將臟區域新增至紋理。
- 鎖定紋理中的某些緩衝區。 這項作業會將鎖定的區域新增為髒區域。 如果應用程式更了解實際的骯髒區域,應用程式可以關閉此自動臟區域更新。
- 使用紋理的表面層級做為IDirect3DDevice9::UpdateSurface 將整個紋理標示為骯髒的目的地。
- 使用紋理做為 IDirect3DDevice9::UpdateTexture 清除來源紋理上所有臟區域。
- 使用 IDirect3DSurface9::GetDC 傳回裝置內容。
- 呼叫 IDirect3DBaseTexture9::GenerateMipSubLevels 會將整個紋理標示為髒。
- 呼叫 IDirect3DBaseTexture9::SetAutoGenFilterType 會將整個紋理標示為骯髒。
Dirty 區域是在 mipmapped 紋理的最上層設定,IDirect3DDevice9::UpdateTexture 可以展開 Mip 鏈結中的肮髒區域,以將每個子層級複製的位元組數目降到最低。 請注意,子層級的骯髒區域座標會向外四捨五入,也就是說,其小數部分會四捨五入到紋理最接近邊緣。
因為每種紋理類型都有不同類型的骯髒區域,因此每個紋理類型都有方法。 2D 紋理使用骯髒的矩形,而音量紋理則使用方塊。
- IDirect3DCubeTexture9::AddDirtyRect
- IDirect3DTexture9::AddDirtyRect
- IDirect3DVolumeTexture9::AddDirtyBox
針對上述方法傳遞 pDirtyRect 或 pDirtyBox 參數 NULL 會展開髒區域以涵蓋整個紋理。
每個鎖定方法都可以採用D3DLOCK_NO_DIRTY_UPDATE,以防止對紋理的骯髒狀態進行任何變更。 如需詳細資訊,請參閱 鎖定資源 (Direct3D 9)。
當有關鎖定作業期間變更之區域集的詳細資訊可用時,應用程式應該使用D3DLOCK_NO_DIRTY_UPDATE。 請注意,只有鎖定或複製至紋理子層級(也就是說,沒有鎖定或複製到最上層),並不會更新該紋理的骯髒區域。 當應用程式鎖定較低層級,而不鎖定最上層時,應用程式會承擔更新骯髒區域相同的責任。
相關主題