Manajemen Tekstur Otomatis (Direct3D 9)

Manajemen tekstur adalah proses menentukan tekstur mana yang diperlukan untuk penyajian pada waktu tertentu dan memastikan bahwa tekstur tersebut dimuat ke dalam memori video. Seperti halnya algoritma apa pun, skema manajemen tekstur bervariasi dalam kompleksitas, tetapi pendekatan apa pun untuk manajemen tekstur melibatkan tugas-tugas utama berikut.

  • Melacak jumlah memori tekstur yang tersedia.
  • Menghitung tekstur mana yang diperlukan untuk penyajian, dan mana yang tidak.
  • Menentukan sumber daya tekstur yang ada dapat dimuat ulang dengan gambar tekstur lain, dan permukaan mana yang harus dihancurkan dan diganti dengan sumber daya tekstur baru.

Direct3D menerapkan manajemen tekstur yang didukung sistem untuk memastikan bahwa tekstur dimuat untuk performa optimal. Sumber daya tekstur yang dikelola Direct3D disebut sebagai tekstur terkelola.

Manajer tekstur melacak tekstur dengan stempel waktu yang mengidentifikasi kapan tekstur terakhir digunakan. Kemudian menggunakan algoritma yang paling tidak baru-baru ini digunakan untuk menentukan tekstur mana yang harus dihapus. Prioritas tekstur digunakan sebagai pemutus dasi ketika dua tekstur ditargetkan untuk dihapus dari memori. Jika dua tekstur memiliki nilai prioritas yang sama, tekstur yang paling tidak baru digunakan akan dihapus. Namun, jika dua tekstur memiliki stempel waktu yang sama, tekstur yang memiliki prioritas lebih rendah akan dihapus terlebih dahulu.

Anda meminta manajemen tekstur otomatis untuk permukaan tekstur saat Membuatnya. Untuk mengambil tekstur terkelola dalam aplikasi C++, buat sumber daya tekstur dengan memanggil IDirect3DDevice9::CreateTexture dan tentukan D3DPOOL_MANAGED untuk parameter Kumpulan. Anda tidak diperbolehkan menentukan di mana Anda ingin tekstur dibuat. Anda tidak dapat menggunakan bendera D3DPOOL_DEFAULT atau D3DPOOL_SYSTEMMEM saat membuat tekstur terkelola. Setelah membuat tekstur terkelola, Anda dapat memanggil metode IDirect3DDevice9::SetTexture untuk mengaturnya ke tahap dalam kaskade tekstur perangkat penyajian.

Anda dapat menetapkan prioritas untuk tekstur terkelola dengan memanggil metode IDirect3DResource9::SetPriority untuk permukaan tekstur.

Direct3D secara otomatis mengunduh tekstur ke dalam memori video sesuai kebutuhan. Sistem mungkin menyimpan tekstur terkelola dalam memori video lokal atau nonlokal, tergantung pada ketersediaan memori video nonlokal atau faktor lainnya. Lokasi cache tekstur terkelola Anda tidak dikomunikasikan ke aplikasi Anda, juga tidak diperlukan informasi ini untuk menggunakan manajemen tekstur otomatis. Jika aplikasi Anda menggunakan lebih banyak tekstur daripada yang dapat pas dalam memori video, Direct3D akan menghapus tekstur lama dari memori video untuk memberi ruang bagi tekstur baru. Jika Anda menggunakan tekstur yang dihapus lagi, sistem menggunakan permukaan tekstur memori sistem asli untuk memuat ulang tekstur dalam cache memori video. Meskipun memuat ulang tekstur diperlukan, itu juga mengurangi performa aplikasi.

Anda dapat memodifikasi salinan memori sistem asli tekstur secara dinamis dengan memperbarui atau mengunci sumber daya tekstur. Ketika sistem mendeteksi permukaan kotor - setelah pembaruan selesai, atau ketika permukaan tidak terkunci - manajer tekstur secara otomatis memperbarui salinan memori video tekstur. Hit performa yang dikeluarkan mirip dengan memuat ulang tekstur yang dihapus.

Saat memasukkan level baru dalam game, aplikasi Anda mungkin perlu membersihkan semua tekstur terkelola dari memori video (dengan memanggil IDirect3DDevice9::EvictManagedResources).

Untuk informasi selengkapnya tentang manajemen sumber daya, lihat Mengelola Sumber Daya (Direct3D 9).

Tekstur Direct3D