Otomatik Doku Yönetimi (Direct3D 9)

Doku yönetimi, belirli bir zamanda işleme için hangi dokuların gerekli olduğunu belirleme ve bu dokuların video belleğine yüklenmesini sağlama işlemidir. Tüm algoritmalarda olduğu gibi doku yönetimi düzenleri karmaşıklıkta farklılık gösterir, ancak doku yönetimine yönelik tüm yaklaşımlar aşağıdaki temel görevleri içerir.

  • Kullanılabilir doku belleği miktarını izleme.
  • İşleme için hangi dokuların gerekli olduğunu ve hangilerinin gerekli olmadığını hesaplama.
  • Hangi mevcut doku kaynaklarının başka bir doku görüntüsüyle yeniden yüklenebileceğini ve hangi yüzeylerin yok edilmesi ve yeni doku kaynaklarıyla değiştirilmesi gerektiğini belirleme.

Direct3D, dokuların en iyi performans için yüklendiğinden emin olmak için sistem tarafından desteklenen doku yönetimini uygular. Direct3D'nin yönettiği doku kaynakları yönetilen dokular olarak adlandırılır.

Doku yöneticisi dokuları, dokunun en son ne zaman kullanıldığını tanımlayan bir zaman damgasıyla izler. Ardından, hangi dokuların kaldırılması gerektiğini belirlemek için en son kullanılan algoritmayı kullanır. Doku öncelikleri, bellekten kaldırılması için iki doku hedeflendiğinde bağlama kesici olarak kullanılır. İki doku aynı öncelik değerine sahipse, en son kullanılan doku kaldırılır. Ancak, iki doku aynı zaman damgasına sahipse, önce daha düşük önceliğe sahip olan doku kaldırılır.

Doku yüzeylerini oluştururken otomatik doku yönetimi isteyebilirsiniz. C++ uygulamasında yönetilen dokuyu almak için IDirect3DDevice9::CreateTexture çağırarak ve Pool parametresi için D3DPOOL_MANAGED belirterek bir doku kaynağı oluşturun. Dokunun nerede oluşturulmasını istediğinizi belirtmenize izin verilmiyor. Yönetilen doku oluştururken D3DPOOL_DEFAULT veya D3DPOOL_SYSTEMMEM bayraklarını kullanamazsınız. Yönetilen dokuyu oluşturduktan sonra, IDirect3DDevice9::SetTexture yöntemini çağırarak işleme cihazının dokusundaki bir aşamaya ayarlayabilirsiniz.

Doku yüzeyi için IDirect3DResource9::SetPriority yöntemini çağırarak yönetilen dokulara öncelik atayabilirsiniz.

Direct3D, gerektiğinde dokuları otomatik olarak video belleğine indirir. Sistem, yerel veya yerel olmayan video belleğinde, yerel olmayan video belleğinin veya diğer faktörlerin kullanılabilirliğine bağlı olarak yönetilen dokuları önbelleğe alabilir. Yönetilen dokularınızın önbellek konumu uygulamanıza iletilmez ve bu bilgiler otomatik doku yönetimini kullanmak için gerekli değildir. Uygulamanız video belleğine sığabilenden daha fazla doku kullanıyorsa, Direct3D yeni dokulara yer açmak için eski dokuları video belleğinden kaldırır. Kaldırılan dokuyu yeniden kullanırsanız, sistem video-bellek önbelleğindeki dokuyu yeniden yüklemek için özgün sistem belleği doku yüzeyini kullanır. Dokuyu yeniden yüklemek gerekli olsa da, uygulamanın performansını da azaltır.

Doku kaynağını güncelleştirerek veya kilitleyerek dokunun özgün sistem belleği kopyasını dinamik olarak değiştirebilirsiniz. Sistem kirli bir yüzey algıladığında - bir güncelleştirme tamamlandıktan sonra veya yüzeyin kilidi açıldığında - doku yöneticisi dokunun video belleği kopyasını otomatik olarak güncelleştirir. Tahakkuk eden performans isabeti, kaldırılan dokuyu yeniden yüklemeye benzer.

Bir oyuna yeni bir düzey girerken uygulamanızın tüm yönetilen dokuları video belleğinden temizlemesi gerekebilir (IDirect3DDevice9::EvictManagedResourcesçağırarak).

Kaynak yönetimi hakkında daha fazla bilgi için bkz. Kaynakları Yönetme (Direct3D 9).

Direct3D Dokuları