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 Object1 Deskripsi
Buffer Buffer
Texture1D Tekstur 1D
Texture1DArray Array tekstur 1D
Texture2D Tekstur 2D
Texture2DArray Array tekstur 2D
Texture3D Tekstur 3D
TextureCube Tekstur kubus
TextureCubeArray Array tekstur kubus
Jenis Object2 Deskripsi
Texture2DMS Tekstur multisampel 2D
Texture2DMSArray Array tekstur multisampel 2D

  1. Jenis Buffer mendukung sebagian besar metode objek tekstur kecuali GetDimensions.
  2. TextureCubeArray tersedia dalam model shader 4.1 atau yang lebih tinggi.
  3. Model shader 4.1 tersedia di Direct3D 10.1 atau yang lebih tinggi.

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

Baca juga

Model Shader 4