Tekstur Puncak dalam vs_3_0 (DirectX HLSL)

Model vertex shader 3.0 mendukung pencarian tekstur di shader vertex menggunakan pernyataan beban texldl - vs tekstur. Mesin vertex berisi empat tahap sampler tekstur, bernama D3DVERTEXTEXTURESAMPLER0, D3DVERTEXTEXTURESAMPLER1, D3DVERTEXTEXTURESAMPLER2, dan D3DVERTEXTEXTURESAMPLER3. Ini berbeda dari sampler peta perpindahan dan sampler tekstur di mesin piksel.

Untuk sampel tekstur yang diatur pada empat tahap tersebut, Anda dapat menggunakan mesin vertex dan memprogram tahapan dengan metode CheckDeviceFormat . Atur tekstur pada tahap tersebut menggunakan SetTexture, dengan indeks tahap D3DVERTEXTEXTURESAMPLER0 melalui D3DVERTEXTEXTURESAMPLER3. Register baru telah diperkenalkan di shader vertex, sampler register (seperti di ps_2_0), yang mewakili sampler tekstur vertex. Register ini perlu didefinisikan dalam shader sebelum menggunakannya.

Aplikasi dapat mengkueri jika format didukung sebagai tekstur vertex dengan memanggil CheckDeviceFormat dengan D3DUSAGE_QUERY_VERTEXTEXTURE.

Catatan

Ini adalah bendera kueri sehingga tidak diterima dalam fungsi Createxxx apa pun. Tekstur puncak yang dibuat di kumpulan default dapat diatur sebagai tekstur piksel dan sebaliknya. Namun, untuk menggunakan pemrosesan puncak perangkat lunak, tekstur puncak harus dibuat di kumpulan awal (tidak peduli apakah itu adalah perangkat mode campuran atau perangkat pemrosesan vertex perangkat lunak).

 

Fungsionalitasnya identik dengan tekstur piksel, kecuali untuk yang berikut ini:

  • Pemfilteran tekstur anisotropik tidak didukung, oleh karena itu D3DSAMP_MAXANISOTROPY diabaikan dan D3DTEXF_ANISOTROPIC tidak dapat diatur untuk diperbesar, atau dikurangi untuk tahap ini.
  • Tingkat informasi perubahan tidak tersedia, oleh karena itu aplikasi harus menghitung tingkat detail dan memberikan informasi tersebut sebagai parameter untuk texldl - vs.

Pembatasan meliputi:

  • Seperti dalam shader piksel, jika tekstur multielement didukung, D3DSAMP_ELEMENTINDEX digunakan untuk mengetahui elemen mana yang akan diambil sampelnya.
  • Status D3DSAMP_DMAPOFFSET diabaikan untuk tahapan ini.
  • Gunakan CheckDeviceFormat dengan D3DUSAGE_QUERY_VERTEXTEXTURE" untuk mengkueri tekstur untuk melihat apakah tekstur tersebut dapat digunakan sebagai tekstur puncak.
  • VertexTextureFilterCaps menunjukkan jenis filter apa yang diizinkan di sampler tekstur vertex. D3DPTFILTERCAPS_MINFANISOTROPIC dan D3DPTFILTERCAPS_MAGFANISOTROPIC tidak diizinkan.

Daftar Tahap Pengambilan Sampel

Register tahap pengambilan sampel mengidentifikasi unit pengambilan sampel yang dapat digunakan dalam pernyataan beban tekstur. Unit pengambilan sampel sesuai dengan tahap pengambilan sampel tekstur, yang merangkum status khusus pengambilan sampel yang disediakan di SetSamplerState.

Setiap sampler secara unik mengidentifikasi permukaan tekstur tunggal yang diatur ke sampler yang sesuai menggunakan SetTexture. Namun, permukaan tekstur yang sama dapat diatur pada beberapa sampler.

Pada waktu gambar, tekstur tidak dapat ditetapkan secara bersamaan sebagai target render dan tekstur pada tahap.

Karena vs_3_0 mendukung empat sampler, hingga empat permukaan tekstur dapat dibaca dari dalam satu shader pass. Register sampler mungkin hanya muncul sebagai argumen dalam pernyataan beban tekstur: texldl - vs.

Dalam vs_3_0, jika Anda menggunakan sampler, sampel harus dideklarasikan di awal program shader, menggunakan dcl_samplerType (sm3 - vs asm) (seperti dalam ps_2_0).

Pemrosesan Perangkat Lunak

Fitur ini akan didukung dalam pemrosesan puncak perangkat lunak. Jenis filter tertentu yang didukung dapat diperiksa dengan memanggil GetDeviceCaps dan memeriksa VertexTextureFilterCaps. Semua format tekstur yang diterbitkan akan didukung sebagai tekstur vertex dalam pemrosesan vertex perangkat lunak.

Aplikasi dapat memeriksa apakah format tekstur tertentu didukung dalam mode pemrosesan vertex perangkat lunak dengan memanggil CheckDeviceFormat dan menyediakan (D3DVERTEXTEXTURESAMPLER | D3DUSAGE_SOFTWAREPROCESSING) sebagai penggunaan. Semua format didukung untuk pemrosesan puncak perangkat lunak. Kumpulan awal diperlukan untuk pemrosesan vertex perangkat lunak.

Perubahan API

   
// New define
#define D3DVERTEXTEXTURESAMPLER0 (D3DDMAPSAMPLER+1)
#define D3DVERTEXTEXTURESAMPLER1 (D3DDMAPSAMPLER+2)
#define D3DVERTEXTEXTURESAMPLER2 (D3DDMAPSAMPLER+3)
#define D3DVERTEXTEXTURESAMPLER3 (D3DDMAPSAMPLER+4)
    

#define D3DVERTEXTEXTURESAMPLER  (0x00100000L)

// New caps field in D3DCAPS9
DWORD VertexTextureFilterCaps;

Alur Vertex