Tekstur Multi-elemen (Direct3D 9)

Tekstur tradisional dianggap sebagai tekstur elemen tunggal. Tekstur multi-elemen memungkinkan aplikasi untuk menulis secara bersamaan ke beberapa elemen tekstur dari shader piksel. Hasilnya dalam pass penyajian berikutnya adalah bahwa aplikasi dapat menggunakan satu atau beberapa elemen sebagai tekstur elemen tunggal - yaitu, sebagai input ke shader piksel. Elemen tambahan ini dapat dianggap sebagai penyimpanan sementara untuk hasil perantara yang akan digunakan di kemudian hari yang diteruskan oleh aplikasi.

Generasi pertama perangkat keras yang mengekspos fitur ini memiliki batasan berikut:

  • Semua permukaan tekstur multi-elemen akan dialokasikan secara otomatis. Batasan ini ditangani dengan memperlakukan ini sebagai jenis format permukaan baru dengan beberapa saluran RGBA yang diselingi.
  • Semua elemen dari beberapa tekstur elemen dapat memiliki kedalaman bit yang sama. Batasan ini dinyatakan dengan nama format permukaan baru.
  • Tekstur multi-elemen tidak boleh menjadi primer/dapat ditampilkan. Dengan kata lain, itu harus di luar layar saja. Batasan ini dinyatakan oleh enumerasi format permukaan.
  • Tidak ada dithering, alpha test, fogging, blending, raster-op, atau masking yang diizinkan. Tidak ada pemrosesan shader pasca-piksel yang dilakukan, kecuali uji z-test dan uji stensil.
  • Tekstur tidak boleh mipmap. Pembuatan rantai mip akan gagal.
  • Elemen yang sama tidak dapat diatur sebagai tekstur pada saat yang sama dengan target render. Namun, elemen yang berbeda dari permukaan tekstur multi-elemen yang sama secara bersamaan dapat menjadi tekstur dan merender target.
  • Tidak ada antialias yang didukung.
  • Permukaan tekstur multi-elemen, saat digunakan sebagai tekstur, tidak dapat difilter. Batasan ini dapat diverifikasi menggunakan CheckDeviceFormat.
  • Permukaan tekstur multi-elemen tidak dapat dikunci.
  • Lebih dari satu permukaan tekstur multi-elemen dapat digunakan secara bersamaan dengan menetapkan masing-masing ke berbagai tahap, sama seperti tekstur normal.
  • Permukaan tekstur multi-elemen mendukung konversi gamma dari konversi 2.2 ke 1.0 pada operasi baca, sama seperti format tekstur lainnya.
  • Beberapa implementasi tidak menerapkan masker tulis output (D3DRS_COLORWRITEENABLE). Mereka yang dapat memiliki masker tulis warna independen. Ini diekspresikan menggunakan bit kemampuan baru. Jumlah masker tulis warna independen yang tersedia akan sama dengan jumlah maksimum elemen yang mampu digunakan perangkat.
  • Menghapus semua elemen tekstur multi-elemen yang ditetapkan sebagai target render.

Penggunaan tekstur multi-elemen mengikuti langkah-langkah berikut:

  1. Aplikasi menemukan dukungan untuk fitur ini dengan memeriksa ketersediaan format tekstur beberapa elemen.
  2. Aplikasi membuat permukaan ini dengan memanggil CreateTexture.
  3. Aplikasi menetapkan permukaan sebagai target render menggunakan panggilan SetRenderTarget . Shader piksel memberikan output ke permukaan menggunakan instruksi mov - ps .
  4. SetTexture dipanggil untuk mengatur permukaan tekstur multi-elemen ke tahap tertentu. Seperti tekstur lainnya, permukaan yang sama diizinkan untuk diatur ke beberapa tahap sekaligus.
  5. SetSamplerState dipanggil untuk mengatur D3DSAMP_ELEMENTINDEX ke nomor elemen yang sesuai dalam tekstur multi-elemen tempat sampel sampler. Nilai default untuk status ini adalah 0, yang berarti tekstur non-multi-elemen akan berfungsi. Mengatur status ini ke angka yang tidak pantas menghasilkan perilaku yang tidak terdefinisi - jika tekstur multi-elemen hanya lebar dua elemen tetapi sampler diminta untuk mengambil sampel dari elemen keempat, misalnya.

Dukungan API

Berikut ini adalah ringkasan elemen API yang mendukung tekstur multi-elemen:

  • Format permukaan D3DFMT_MULTI2_ARGB8 mengekspresikan sifat format yang saling berkaitan.

  • Status D3DSAMP_ELEMENTINDEX sampler menunjukkan indeks elemen mana yang akan digunakan.

  • Status render berikut mendukung tekstur multi-elemen:

    • D3DRS_COLORWRITEENABLE1
    • D3DRS_COLORWRITEENABLE2
    • D3DRS_COLORWRITEENABLE3

    D3DRS_COLORWRITEENABLE berlaku untuk merender target (atau elemen) nol.

  • Bendera D3DPMISCCAPS_INDEPENDENTWRITEMASKS menunjukkan bahwa perangkat mendukung masker tulis independen untuk beberapa tekstur elemen atau beberapa target render.

Alur Piksel