Aracılığıyla paylaş


Doku Kirli Bölgeleri (Direct3D 9)

Uygulamalar, dokularda "kirli" bölgeler belirterek bir doku alt kümesinin kopyalandığı alt kümesini iyileştirebilir. Yalnızca kirli olarak işaretlenmiş bölgeler, IDirect3DDevice9::UpdateTextureçağrısıyla kopyalanır. Ancak, kirli bölgeler hizalamayı iyileştirmek için genişletilebilir. Bir doku oluşturulduğunda, tüm doku kirli olarak kabul edilir. Yalnızca aşağıdaki işlemler bir dokunun kirli durumunu etkiler:

  • Dokuya kirli bölge ekleme.
  • Dokudaki bazı arabellekler kilitleniyor. Bu işlem kilitli bölgeyi kirli bir bölge olarak ekler. Uygulama, gerçek kirli bölgeler hakkında daha iyi bilgi sahibiyse bu otomatik kirli bölge güncelleştirmesini kapatabilir.
  • IDirect3DDevice9::UpdateSurface'de hedef olarak doku yüzey düzeyinin kullanılması tüm dokuyu kirli olarak işaretler.
  • dokusunu IDirect3DDevice9::UpdateTexture kaynak dokudaki tüm kirli bölgeleri temizler.
  • Cihaz bağlamı döndürmek için IDirect3DSurface9::GetDC kullanma.
  • IDirect3DBaseTexture9::GenerateMipSubLevelsçağrısı tüm dokuyu kirli olarak işaretler.
  • IDirect3DBaseTexture9::SetAutoGenFilterType çağrısı tüm dokuyu kirli olarak işaretler.

Kirli bölgeler, eşlenmemiş bir dokunun en üst düzeyinde ayarlanır ve IDirect3DDevice9::UpdateTexture, her alt düzey için kopyalanan bayt sayısını en aza indirmek için kirli bölgeyi mip zincirinin aşağısına genişletebilir. Alt düzey kirli bölge koordinatlarının dışa doğru yuvarlandığını, yani kesirli parçalarının dokunun en yakın kenarına doğru yuvarlandığını unutmayın.

Her doku türünün farklı kirli bölge türleri olduğundan, her doku türünde yöntemler vardır. 2B dokular kirli dikdörtgen ve birim dokuları kutuları kullanır.

Yukarıdaki yöntemler için pDirtyRect veya pDirtyBox parametreleri için NULL geçirilmesi, kirli bölgeyi tüm dokuyu kaplayacak şekilde genişletir.

Her kilit yöntemi D3DLOCK_NO_DIRTY_UPDATE alabilir ve bu da dokudaki kirli durumda herhangi bir değişiklik yapılmasını önler. Daha fazla bilgi için bkz. Kaynakları Kilitleme (Direct3D 9).

Kilit işlemi sırasında değiştirilen gerçek bölge kümesi hakkında daha fazla bilgi sağlandığında, uygulamalar D3DLOCK_NO_DIRTY_UPDATE kullanmalıdır. Bir kilidin veya yalnızca doku alt düzeyine kopyalanmasının (yani, kilitlemeden veya en üst düzeye kopyalamadan) bu doku için kirli bölgeleri güncelleştirmediğini unutmayın. Uygulamalar, en üst düzeyi kilitlemeden alt düzeyleri kilitlediklerinde kirli bölgeleri güncelleştirmek için aynı sorumluluğu üstlenir.

Temel Doku Kavramları