D3DFORMAT

Menentukan berbagai jenis format permukaan.

typedef enum _D3DFORMAT {
    D3DFMT_UNKNOWN              =  0,

    D3DFMT_R8G8B8               = 20,
    D3DFMT_A8R8G8B8             = 21,
    D3DFMT_X8R8G8B8             = 22,
    D3DFMT_R5G6B5               = 23,
    D3DFMT_X1R5G5B5             = 24,
    D3DFMT_A1R5G5B5             = 25,
    D3DFMT_A4R4G4B4             = 26,
    D3DFMT_R3G3B2               = 27,
    D3DFMT_A8                   = 28,
    D3DFMT_A8R3G3B2             = 29,
    D3DFMT_X4R4G4B4             = 30,
    D3DFMT_A2B10G10R10          = 31,
    D3DFMT_A8B8G8R8             = 32,
    D3DFMT_X8B8G8R8             = 33,
    D3DFMT_G16R16               = 34,
    D3DFMT_A2R10G10B10          = 35,
    D3DFMT_A16B16G16R16         = 36,

    D3DFMT_A8P8                 = 40,
    D3DFMT_P8                   = 41,

    D3DFMT_L8                   = 50,
    D3DFMT_A8L8                 = 51,
    D3DFMT_A4L4                 = 52,

    D3DFMT_V8U8                 = 60,
    D3DFMT_L6V5U5               = 61,
    D3DFMT_X8L8V8U8             = 62,
    D3DFMT_Q8W8V8U8             = 63,
    D3DFMT_V16U16               = 64,
    D3DFMT_A2W10V10U10          = 67,

    D3DFMT_UYVY                 = MAKEFOURCC('U', 'Y', 'V', 'Y'),
    D3DFMT_R8G8_B8G8            = MAKEFOURCC('R', 'G', 'B', 'G'),
    D3DFMT_YUY2                 = MAKEFOURCC('Y', 'U', 'Y', '2'),
    D3DFMT_G8R8_G8B8            = MAKEFOURCC('G', 'R', 'G', 'B'),
    D3DFMT_DXT1                 = MAKEFOURCC('D', 'X', 'T', '1'),
    D3DFMT_DXT2                 = MAKEFOURCC('D', 'X', 'T', '2'),
    D3DFMT_DXT3                 = MAKEFOURCC('D', 'X', 'T', '3'),
    D3DFMT_DXT4                 = MAKEFOURCC('D', 'X', 'T', '4'),
    D3DFMT_DXT5                 = MAKEFOURCC('D', 'X', 'T', '5'),

    D3DFMT_D16_LOCKABLE         = 70,
    D3DFMT_D32                  = 71,
    D3DFMT_D15S1                = 73,
    D3DFMT_D24S8                = 75,
    D3DFMT_D24X8                = 77,
    D3DFMT_D24X4S4              = 79,
    D3DFMT_D16                  = 80,

    D3DFMT_D32F_LOCKABLE        = 82,
    D3DFMT_D24FS8               = 83,

#if !defined(D3D_DISABLE_9EX)
    D3DFMT_D32_LOCKABLE         = 84,
    D3DFMT_S8_LOCKABLE          = 85,
#endif // !D3D_DISABLE_9EX

    D3DFMT_L16                  = 81,

    D3DFMT_VERTEXDATA           =100,
    D3DFMT_INDEX16              =101,
    D3DFMT_INDEX32              =102,

    D3DFMT_Q16W16V16U16         =110,

    D3DFMT_MULTI2_ARGB8         = MAKEFOURCC('M','E','T','1'),

    D3DFMT_R16F                 = 111,
    D3DFMT_G16R16F              = 112,
    D3DFMT_A16B16G16R16F        = 113,

    D3DFMT_R32F                 = 114,
    D3DFMT_G32R32F              = 115,
    D3DFMT_A32B32G32R32F        = 116,

    D3DFMT_CxV8U8               = 117,

#if !defined(D3D_DISABLE_9EX)
    D3DFMT_A1                   = 118,
    D3DFMT_A2B10G10R10_XR_BIAS  = 119,
    D3DFMT_BINARYBUFFER         = 199,
#endif // !D3D_DISABLE_9EX

    D3DFMT_FORCE_DWORD          =0x7fffffff
} D3DFORMAT;

Keterangan

Ada beberapa jenis format:

Semua format tercantum dari kiri ke kanan, bit paling signifikan hingga bit yang paling tidak signifikan. Misalnya, D3DFORMAT_ARGB diurutkan dari saluran bit A (alfa) yang paling signifikan, ke saluran bit B yang paling tidak signifikan (biru). Saat melintas data permukaan, data disimpan dalam memori dari bit paling tidak signifikan ke bit yang paling signifikan, yang berarti bahwa urutan saluran dalam memori dari bit paling tidak signifikan (biru) ke bit paling signifikan (alfa).

Nilai default untuk format yang berisi saluran yang tidak terdefinisi (G16R16, A8, dan sebagainya) adalah 1. Satu-satunya pengecualian adalah format A8, yang diinisialisasi ke 000 untuk tiga saluran warna.

Urutan bit berasal dari byte yang paling signifikan terlebih dahulu, jadi D3DFMT_A8L8 menunjukkan bahwa byte tinggi dari format 2-byte ini adalah alfa. D3DFMT_D16 menunjukkan nilai bilangan bulat 16-bit dan permukaan yang dapat dikunci aplikasi.

Format piksel telah dipilih untuk mengaktifkan ekspresi format ekstensi yang ditentukan vendor perangkat keras, serta untuk menyertakan metode FOURCC yang mapan. Kumpulan format yang dipahami oleh runtime Direct3D ditentukan oleh D3DFORMAT.

Perhatikan bahwa format disediakan oleh vendor perangkat keras independen (IHV) dan banyak kode FOURCC tidak tercantum. Format dalam enumerasi ini unik karena mereka diberi sanksi oleh runtime, yang berarti bahwa rasterizer referensi akan beroperasi pada semua jenis ini. Format yang disediakan IHV akan didukung oleh IHV individu berdasarkan kartu demi kartu.

BackBuffer atau Format Tampilan

Format ini adalah satu-satunya format yang valid untuk buffer belakang atau tampilan.

Format Buffer belakang Tampilan
A2R10G10B10 x x (hanya mode layar penuh)
A8R8G8B8 x
X8R8G8B8 x x
A1R5G5B5 x
X1R5G5B5 x x
R5G6B5 x x

 

Format Buffer

Kedalaman, stensil, puncak, dan buffer indeks masing-masing memiliki format yang unik.

Bendera buffer Nilai Format
D3DFMT_D16_LOCKABLE 70 Kedalaman bit z-buffer 16-bit.
D3DFMT_D32 71 Kedalaman bit z-buffer 32-bit.
D3DFMT_D15S1 73 Kedalaman bit z-buffer 16-bit di mana 15 bit dicadangkan untuk saluran kedalaman dan 1 bit dicadangkan untuk saluran stensil.
D3DFMT_D24S8 75 Kedalaman bit z-buffer 32-bit menggunakan 24 bit untuk saluran kedalaman dan 8 bit untuk saluran stensil.
D3DFMT_D24X8 77 Kedalaman bit z-buffer 32-bit menggunakan 24 bit untuk saluran kedalaman.
D3DFMT_D24X4S4 79 Kedalaman bit z-buffer 32-bit menggunakan 24 bit untuk saluran kedalaman dan 4 bit untuk saluran stensil.
D3DFMT_D32F_LOCKABLE 82 Format yang dapat dikunci di mana nilai kedalaman direpresentasikan sebagai angka floating-point IEEE standar.
D3DFMT_D24FS8 83 Format yang tidak dapat dikunci yang berisi kedalaman 24 bit (dalam format titik mengambang 24-bit - 20e4) dan 8 bit stensil.
D3DFMT_D32_LOCKABLE 84 Buffer kedalaman 32-bit yang dapat dikunci. Perbedaan antara Direct3D 9 dan Direct3D 9Ex: Bendera ini hanya tersedia di Direct3D 9Ex.
D3DFMT_S8_LOCKABLE 85 Buffer stensil 8-bit yang dapat dikunci. Perbedaan antara Direct3D 9 dan Direct3D 9Ex: Bendera ini hanya tersedia di Direct3D 9Ex.
D3DFMT_D16 80 Kedalaman bit z-buffer 16-bit.
D3DFMT_VERTEXDATA 100 Menjelaskan permukaan buffer vertex.
D3DFMT_INDEX16 101 Kedalaman bit buffer indeks 16-bit.
D3DFMT_INDEX32 102 Kedalaman bit buffer indeks 32-bit.

 

Semua format stensil kedalaman kecuali D3DFMT_D16_LOCKABLE menunjukkan tidak ada pengurutan bit tertentu per piksel, dan driver diizinkan untuk mengonsumsi lebih dari jumlah saluran bit per kedalaman yang ditunjukkan (tetapi bukan saluran stensil).

Format Tekstur Terkompresi DXTn

Bendera ini digunakan untuk tekstur terkompresi:

Bendera Tekstur Terkompresi DXTn Nilai Format
D3DFMT_DXT1 MAKEFOURCC('D', 'X', 'T', '1') Format tekstur kompresi DXT1
D3DFMT_DXT2 MAKEFOURCC('D', 'X', 'T', '2') Format tekstur kompresi DXT2
D3DFMT_DXT3 MAKEFOURCC('D', 'X', 'T', '3') Format tekstur kompresi DXT3
D3DFMT_DXT4 MAKEFOURCC('D', 'X', 'T', '4') Format tekstur kompresi DXT4
D3DFMT_DXT5 MAKEFOURCC('D', 'X', 'T', '5') Format tekstur kompresi DXT5

 

Runtime tidak akan memungkinkan aplikasi untuk membuat permukaan menggunakan format DXTn kecuali dimensi permukaan adalah kelipatan 4. Ini berlaku untuk permukaan luar layar biasa, target render, tekstur 2D, tekstur kubus, dan tekstur volume.

Format Floating-Point

Bendera ini digunakan untuk format permukaan floating-point. Format 16-bit per saluran ini juga dikenal sebagai format s10e5.

Bendera floating-point Nilai Format
D3DFMT_R16F 111 Format float 16-bit menggunakan 16 bit untuk saluran merah.
D3DFMT_G16R16F 112 Format float 32-bit menggunakan 16 bit untuk saluran merah dan 16 bit untuk saluran hijau.
D3DFMT_A16B16G16R16F 113 Format float 64-bit menggunakan 16 bit untuk setiap saluran (alfa, biru, hijau, merah).

 

Format FOURCC

Data dalam format FOURCC adalah data terkompresi.

MAKEFOURCC

Makro untuk menghasilkan kode empat karakter berikut:

#define MAKEFOURCC(ch0, ch1, ch2, ch3)                              \
                ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |   \
                ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))

Berikut adalah format FOURCC yang ditentukan:

Bendera FOURCC Nilai Format
D3DFMT_MULTI2_ARGB8 MAKEFOURCC('M','E','T','1') Tekstur MultiElement (tidak dikompresi)
D3DFMT_G8R8_G8B8 MAKEFOURCC('G', 'R', 'G', 'B') Format RGB kemasan 16-bit yang dianalogikan dengan YUY2 (Y0U0, Y1V0, Y2U2, dan sebagainya). Ini membutuhkan pasangan piksel untuk mewakili nilai warna dengan benar. Piksel pertama dalam pasangan berisi 8 bit hijau (dalam 8 bit tinggi) dan 8 bit merah (dalam 8 bit rendah). Piksel kedua berisi 8 bit hijau (dalam 8 bit tinggi) dan 8 bit biru (dalam 8 bit rendah). Bersama-sama, kedua piksel berbagi komponen merah dan biru, sementara masing-masing memiliki komponen hijau yang unik (G0R0, G1B0, G2R2, dan sebagainya). Sampler tekstur tidak menormalkan warna saat melihat ke atas menjadi shader piksel; mereka tetap berada di kisaran 0,0f hingga 255,0f. Ini berlaku untuk semua model pemecah piksel yang dapat diprogram. Untuk shader piksel fungsi tetap, perangkat keras harus menormalkan ke rentang 0.f hingga 1.f dan pada dasarnya memperlakukannya sebagai tekstur YUY2. Perangkat keras yang mengekspos format ini harus memiliki anggota PixelShader1xMaxValue dari D3DCAPS9 yang diatur ke nilai yang mampu menangani rentang tersebut.
D3DFMT_R8G8_B8G8 MAKEFOURCC('R', 'G', 'B', 'G') Format RGB kemasan 16-bit yang dianalogikan dengan UYVY (U0Y0, V0Y1, U2Y2, dan sebagainya). Ini membutuhkan pasangan piksel untuk mewakili nilai warna dengan benar. Piksel pertama dalam pasangan berisi 8 bit hijau (dalam 8 bit rendah) dan 8 bit merah (dalam 8 bit tinggi). Piksel kedua berisi 8 bit hijau (dalam 8 bit rendah) dan 8 bit biru (dalam 8 bit tinggi). Bersama-sama, kedua piksel berbagi komponen merah dan biru, sementara masing-masing memiliki komponen hijau yang unik (R0G0, B0G1, R2G2, dan sebagainya). Sampler tekstur tidak menormalkan warna saat melihat ke atas menjadi shader piksel; mereka tetap berada di kisaran 0,0f hingga 255,0f. Ini berlaku untuk semua model pemecah piksel yang dapat diprogram. Untuk shader piksel fungsi tetap, perangkat keras harus menormalkan ke rentang 0.f hingga 1.f dan pada dasarnya memperlakukannya sebagai tekstur YUY2. Perangkat keras yang mengekspos format ini harus memiliki anggota PixelShader1xMaxValue dari D3DCAPS9 yang diatur ke nilai yang mampu menangani rentang tersebut.
D3DFMT_UYVY MAKEFOURCC('U', 'Y', 'V', 'Y') Format UYVY (kepatuhan PC98)
D3DFMT_YUY2 MAKEFOURCC('Y', 'U', 'Y', '2') Format YUY2 (kepatuhan PC98)

 

Format IEEE

Bendera ini digunakan untuk format permukaan floating-point. Format 32-bit per saluran ini juga dikenal sebagai format s23e8.

Bendera floating-point Nilai Format
D3DFMT_R32F 114 Format float 32-bit menggunakan 32 bit untuk saluran merah.
D3DFMT_G32R32F 115 Format float 64-bit menggunakan 32 bit untuk saluran merah dan 32 bit untuk saluran hijau.
D3DFMT_A32B32G32R32F 116 Format float 128-bit menggunakan 32 bit untuk setiap saluran (alfa, biru, hijau, merah).

 

Format Campuran

Data dalam format campuran dapat berisi kombinasi data yang tidak ditandatangani dan data yang ditandatangani.

Bendera format campuran Nilai Format
D3DFMT_L6V5U5 61 Format peta benjolan 16-bit dengan luminance menggunakan 6 bit untuk luminance, dan masing-masing 5 bit untuk v dan Anda.
D3DFMT_X8L8V8U8 62 Format peta benjolan 32-bit dengan luminance menggunakan 8 bit untuk setiap saluran.
D3DFMT_A2W10V10U10 67 Format peta benjolan 32-bit menggunakan 2 bit untuk alfa dan 10 bit masing-masing untuk w, v, dan Anda.

 

Format Yang Ditandatangani

Data dalam format yang ditandatangani bisa positif dan negatif. Format yang ditandatangani menggunakan kombinasi data (U), (V), (W), dan (Q).

Bendera format bertanda tangan Nilai Format
D3DFMT_V8U8 60 Format peta benjolan 16-bit menggunakan masing-masing 8 bit untuk Anda dan data v.
D3DFMT_Q8W8V8U8 63 Format peta benjolan 32-bit menggunakan 8 bit untuk setiap saluran.
D3DFMT_V16U16 64 Format peta benjolan 32-bit menggunakan 16 bit untuk setiap saluran.
D3DFMT_Q16W16V16U16 110 Format peta benjolan 64-bit menggunakan 16 bit untuk setiap komponen.
D3DFMT_CxV8U8 117 Format kompresi normal 16-bit. Sampler tekstur menghitung saluran C dari: C = sqrt(1 - U² - V²).

 

Format Tidak Ditandatangani

Data dalam format yang tidak ditandatangani harus positif. Format yang tidak ditandatangani menggunakan kombinasi (R)ed, (G)reen, (B)lue, (A)lpha, (L)uminance, dan (P)alette data. Data palet juga disebut sebagai data terindeks warna karena data digunakan untuk mengindeks palet warna.

Bendera format tidak ditandatangani Nilai Format
D3DFMT_R8G8B8 20 Format piksel RGB 24-bit dengan 8 bit per saluran.
D3DFMT_A8R8G8B8 21 Format piksel ARGB 32-bit dengan alfa, menggunakan 8 bit per saluran.
D3DFMT_X8R8G8B8 22 Format piksel RGB 32-bit, di mana 8 bit disediakan untuk setiap warna.
D3DFMT_R5G6B5 23 Format piksel RGB 16-bit dengan 5 bit untuk merah, 6 bit untuk hijau, dan 5 bit untuk biru.
D3DFMT_X1R5G5B5 24 Format piksel 16-bit di mana 5 bit dicadangkan untuk setiap warna.
D3DFMT_A1R5G5B5 25 Format piksel 16-bit di mana 5 bit dicadangkan untuk setiap warna dan 1 bit dicadangkan untuk alfa.
D3DFMT_A4R4G4B4 26 Format piksel ARGB 16-bit dengan 4 bit untuk setiap saluran.
D3DFMT_R3G3B2 27 Format tekstur RGB 8-bit menggunakan 3 bit untuk merah, 3 bit untuk hijau, dan 2 bit untuk biru.
D3DFMT_A8 28 Hanya alfa 8-bit.
D3DFMT_A8R3G3B2 29 Format tekstur ARGB 16-bit menggunakan 8 bit untuk alfa, masing-masing 3 bit untuk merah dan hijau, dan 2 bit untuk biru.
D3DFMT_X4R4G4B4 30 Format piksel RGB 16-bit menggunakan 4 bit untuk setiap warna.
D3DFMT_A2B10G10R10 31 Format piksel 32-bit menggunakan 10 bit untuk setiap warna dan 2 bit untuk alfa.
D3DFMT_A8B8G8R8 32 Format piksel ARGB 32-bit dengan alfa, menggunakan 8 bit per saluran.
D3DFMT_X8B8G8R8 33 Format piksel RGB 32-bit, di mana 8 bit disediakan untuk setiap warna.
D3DFMT_G16R16 34 Format piksel 32-bit menggunakan masing-masing 16 bit untuk hijau dan merah.
D3DFMT_A2R10G10B10 35 Format piksel 32-bit menggunakan masing-masing 10 bit untuk merah, hijau, dan biru, dan 2 bit untuk alfa.
D3DFMT_A16B16G16R16 36 Format piksel 64-bit menggunakan 16 bit untuk setiap komponen.
D3DFMT_A8P8 40 Warna 8-bit diindeks dengan 8 bit alfa.
D3DFMT_P8 41 Warna 8-bit diindeks.
D3DFMT_L8 50 Hanya luminance 8-bit.
D3DFMT_L16 81 Hanya luminasi 16-bit.
D3DFMT_A8L8 51 16-bit menggunakan masing-masing 8 bit untuk alfa dan luminance.
D3DFMT_A4L4 52 8-bit menggunakan masing-masing 4 bit untuk alfa dan luminance.
D3DFMT_A1 118 Monokrom 1-bit. Perbedaan antara Direct3D 9 dan Direct3D 9Ex: Bendera ini hanya tersedia di Direct3D 9Ex.
D3DFMT_A2B10G10R10_XR_BIAS 119 2.8-bias titik tetap. Perbedaan antara Direct3D 9 dan Direct3D 9Ex: Bendera ini hanya tersedia di Direct3D 9Ex.
D3DFMT_BINARYBUFFER 199 Format biner yang menunjukkan bahwa data tidak memiliki jenis yang melekat. Perbedaan antara Direct3D 9 dan Direct3D 9Ex: Bendera ini hanya tersedia di Direct3D 9Ex.

 

Lainnya

Bendera ini digunakan untuk format yang tidak terdefinisi.

Bendera lainnya Nilai Format
D3DFMT_UNKNOWN 0 Format permukaan tidak diketahui

 

Persyaratan

Persyaratan Nilai
Header
D3D9Types.h

Lihat juga

Enumerasi Direct3D