Objek Tekstur
Di Direct3D 10, Anda menentukan sampelr dan tekstur secara independen; pengambilan sampel tekstur diimplementasikan dengan menggunakan objek tekstur templat. Objek tekstur templat ini memiliki format tertentu, mengembalikan jenis tertentu, dan mengimplementasikan beberapa metode.
Perbedaan antara Direct3D9 dan Direct3D10:
- Di Direct3D 9, sampler terikat dengan tekstur tertentu.
- Dalam Direct3D 10, tekstur dan sampler adalah objek independen. Setiap objek tekstur templat mengimplementasikan metode pengambilan sampel tekstur yang mengambil tekstur dan sampler sebagai parameter input.
Tidak semua format didukung untuk semua fungsi. Jadi Anda harus menggunakan CheckFeatureSupport untuk memeriksa apakah format didukung untuk penggunaan tertentu.
Berikut adalah sintaks untuk membuat semua objek tekstur (kecuali objek multisampel).
Nama Object1 [<Jenis>]; |
---|
Objek multisampled (Texture2DMS dan Texture2DMSArray) memerlukan ukuran tekstur untuk dinyatakan secara eksplisit dan dinyatakan sebagai jumlah sampel.
Object2 [<Type, Samples>] Name; |
---|
Parameter
Item | Deskripsi | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Objek |
Objek tekstur. Harus salah satu jenis berikut.
|
||||||||||||||||||||||||
Jenis |
Opsional. Jenis HLSL skalar atau jenis HLSL vektor apa pun, dikelilingi oleh kurung sudut. Jenis defaultnya adalah float4. |
||||||||||||||||||||||||
Nama |
String ASCII yang menentukan nama objek tekstur. |
||||||||||||||||||||||||
Sampel |
Jumlah sampel (berkisar antara 1 dan 128). |
Contoh 1
Berikut adalah contoh mendeklarasikan objek tekstur.
Texture2D <float4> MyTex;
Texture2DMS <float4, 128> MyMSTex;
Metode Objek Tekstur
Setiap objek tekstur mengimplementasikan metode tertentu; berikut adalah tabel yang mencantumkan semua metode. Lihat halaman referensi untuk setiap metode untuk melihat objek apa yang dapat menggunakan metode tersebut.
Metode Tekstur | Deskripsi | vs_4_0 | vs_4_1 | ps_4_0 | ps_4_1 | gs_4_0 | gs_4_1 |
---|---|---|---|---|---|---|---|
CalculateLevelOfDetail | Hitung LOD, kembalikan hasil yang dijepit. | x | |||||
CalculateLevelOfDetailUnclamped | Hitung LOD, kembalikan hasil yang tidak di-clamping. | x | |||||
Mengumpulkan | Mendapatkan empat sampel (hanya komponen merah) yang akan digunakan untuk interpolasi bilinear saat mengambil sampel tekstur. | x | x | x | |||
GetDimensions | Dapatkan dimensi tekstur untuk tingkat mipmap tertentu. | x | x | x | x | x | x |
GetDimensions (MultiSample) | Dapatkan dimensi tekstur untuk tingkat mipmap tertentu. | x | x | x | |||
GetSamplePosition | Dapatkan posisi sampel yang ditentukan. | x | x | x | |||
Muat | Muat data tanpa pemfilteran atau pengambilan sampel. | x | x | x | x | x | x |
Muat (Multisample) | Muat data tanpa pemfilteran atau pengambilan sampel. | x | x | x | x | ||
Sampel | Contoh tekstur. | x | x | ||||
SampleBias | Contoh tekstur, setelah menerapkan nilai bias ke tingkat mipmap. | x | x | ||||
SampleCmp | Contoh tekstur, menggunakan nilai perbandingan untuk menolak sampel. | x | x | ||||
SampleCmpLevelZero | Contoh tekstur (hanya tingkat mipmap 0), menggunakan nilai perbandingan untuk menolak sampel. | x | x | x | x | x | x |
SampleGrad | Sampel tekstur menggunakan gradien untuk memengaruhi cara lokasi sampel dihitung. | x | x | x | x | x | x |
SampleLevel | Contoh tekstur pada tingkat mipmap yang ditentukan. | x | x | x | x | x | x |
Jenis Hasil
Jenis pengembalian metode objek tekstur adalah float4 kecuali ditentukan sebaliknya, dengan pengecualian objek tekstur anti-alias multisampel yang selalu memerlukan jenis dan jumlah sampel yang ditentukan. Jenis pengembalian sama dengan jenis sumber daya tekstur (DXGI_FORMAT). Dengan kata lain, ini bisa menjadi salah satu jenis berikut.
Tipe | Deskripsi |
---|---|
float | Float 32-bit (lihat Aturan Floating-Point untuk perbedaan dari float IEEE) |
int | Bilangan bulat bertanda 32-bit |
int tidak bertanda | Bilangan bulat tidak bertanda 32-bit |
snorm | Float 32-bit dalam rentang -1 hingga 1 inklusif (lihat Aturan Floating-Point untuk perbedaan dari float IEEE) |
unorm | Float 32-bit dalam rentang 0 hingga 1 inklusif (lihat Aturan Floating-Point untuk perbedaan dari float IEEE) |
jenis atau struktur tekstur apa pun | Jumlah komponen yang dikembalikan harus antara 1 dan 3 inklusif. |
Selain itu, jenis pengembalian dapat berupa jenis tekstur apa pun termasuk struktur tetapi, harus kurang dari 4 komponen seperti jenis float1 yang mengembalikan satu komponen.
Nilai Default untuk Komponen yang Hilang dalam Tekstur
Nilai default untuk komponen yang hilang dalam jenis sumber daya tekstur adalah nol untuk komponen apa pun kecuali komponen alfa (A); nilai default untuk A yang hilang adalah satu. Cara yang satu ini muncul pada shader tergantung pada jenis sumber daya tekstur. Dibutuhkan bentuk komponen jenis pertama yang benar-benar ada dalam jenis sumber daya tekstur (mulai dari kiri dalam urutan RGBA). Jika formulir ini ADALAH UNORM atau FLOAT, nilai default untuk A yang hilang adalah 1,0f. Jika formulir adalah SINT atau UINT, nilai default untuk A yang hilang 0x1.
Misalnya, ketika shader membaca jenis sumber daya tekstur DXGI_FORMAT_R24_UNORM_X8_TYPELESS, nilai default untuk G dan B adalah nol dan nilai default untuk A adalah 1,0f; ketika shader membaca jenis sumber daya tekstur DXGI_FORMAT_R16G16_UINT, nilai default untuk B adalah nol dan nilai default untuk A adalah 0x00000001; ketika shader membaca DXGI_FORMAT_R16_SINT jenis sumber daya tekstur, nilai default untuk G dan B adalah nol dan nilai default untuk A adalah 0x00000001.
Contoh 2
Berikut adalah contoh pengambilan sampel tekstur menggunakan metode tekstur.
sampler MySamp;
Texture2D <float4> MyTex;
float4 main( float2 TexCoords[2] : TEXCOORD ) : SV_Target
{
return MyTex.Sample( MySamp, TexCoords[0] ));
}
Minimum Shader Model
Objek ini didukung dalam model shader berikut.
Shader Model | Didukung |
---|---|
Model Shader 4 dan model shader yang lebih tinggi | yes |