D3DFORMAT
Definisce i vari tipi di formati di superficie.
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;
Commenti
Esistono diversi tipi di formati:
- BackBuffer o Formati di visualizzazione
- Formati di buffer
- Formati di trama compressi DXTn
- Formati a virgola mobile
- Formati FOURCC
- Formati IEEE
- Formati misti
- Formati firmati
- Formati non firmati
- Altri
Tutti i formati sono elencati da sinistra a destra, bit più significativo a bit meno significativo. Ad esempio, D3DFORMAT_ARGB viene ordinato dal canale A (alfa) più significativo al canale B (blu). Quando si attraversano i dati di superficie, i dati vengono archiviati in memoria da bit minimo significativo a bit più significativo, il che significa che l'ordine del canale in memoria è da bit meno significativo (blu) a bit più significativo (alfa).
Il valore predefinito per i formati che contengono canali non definiti (G16R16, A8 e così via) è 1. L'unica eccezione è il formato A8, inizializzato su 000 per i tre canali di colore.
L'ordine dei bit proviene dal byte più significativo, quindi D3DFMT_A8L8 indica che l'alto byte di questo formato a 2 byte è alfa. D3DFMT_D16 indica un valore intero a 16 bit e una superficie bloccabile dall'applicazione.
I formati pixel sono stati scelti per abilitare l'espressione dei formati di estensione definiti dal fornitore hardware, nonché per includere il metodo FOURCC ben stabilito. Il set di formati compreso dal runtime Direct3D è definito da D3DFORMAT.
Si noti che i formati vengono forniti dai fornitori hardware indipendenti (IHV) e molti codici FOURCC non sono elencati. I formati di questa enumerazione sono univoci in quanto sono approvate dal runtime, ovvero il rasterizzatore di riferimento funzionerà su tutti questi tipi. I FORMATI forniti da IHV saranno supportati dai singoli IHV su base scheda.
BackBuffer o Formati di visualizzazione
Questi formati sono gli unici formati validi per un buffer indietro o un display.
Formato | Buffer indietro | Visualizza |
---|---|---|
A2R10G10B10 | x | x (solo modalità schermo intero) |
A8R8G8B8 | x | |
X8R8G8B8 | x | x |
A1R5G5B5 | x | |
X1R5G5B5 | x | x |
R5G6B5 | x | x |
Formati di buffer
I buffer di profondità, stencil, vertice e indice hanno formati univoci.
Flag buffer | Valore | Formato |
---|---|---|
D3DFMT_D16_LOCKABLE | 70 | Profondità bit z-buffer a 16 bit. |
D3DFMT_D32 | 71 | Profondità bit z-buffer a 32 bit. |
D3DFMT_D15S1 | 73 | Profondità del buffer z a 16 bit in cui sono riservati 15 bit per il canale di profondità e 1 bit è riservato per il canale stencil. |
D3DFMT_D24S8 | 75 | Profondità del buffer z a 32 bit usando 24 bit per il canale di profondità e 8 bit per il canale stencil. |
D3DFMT_D24X8 | 77 | Profondità del buffer z a 32 bit usando 24 bit per il canale di profondità. |
D3DFMT_D24X4S4 | 79 | Profondità del buffer z a 32 bit usando 24 bit per il canale di profondità e 4 bit per il canale stencil. |
D3DFMT_D32F_LOCKABLE | 82 | Formato bloccabile in cui il valore di profondità viene rappresentato come un numero a virgola mobile IEEE standard. |
D3DFMT_D24FS8 | 83 | Formato non bloccabile contenente 24 bit di profondità (in un formato a virgola mobile a 24 bit - 20e4) e 8 bit di stencil. |
D3DFMT_D32_LOCKABLE | 84 | Buffer di profondità a 32 bit bloccato.
Differenze tra Direct3D 9 e Direct3D 9Ex: Questo flag è disponibile solo in Direct3D 9Ex. |
D3DFMT_S8_LOCKABLE | 85 | Buffer stencil a 8 bit bloccato.
Differenze tra Direct3D 9 e Direct3D 9Ex: Questo flag è disponibile solo in Direct3D 9Ex. |
D3DFMT_D16 | 80 | Profondità bit z-buffer a 16 bit. |
D3DFMT_VERTEXDATA | 100 | Descrive una superficie del buffer del vertice. |
D3DFMT_INDEX16 | 101 | Profondità del buffer di indice a 16 bit. |
D3DFMT_INDEX32 | 102 | Profondità del buffer di indice a 32 bit. |
Tutti i formati di stencil di profondità tranne D3DFMT_D16_LOCKABLE indicano nessun particolare ordinamento bit per pixel e il driver può utilizzare più del numero indicato di bit per ogni canale di profondità (ma non canale stencil).
Formati di trama compressi DXTn
Questi flag vengono usati per trame compresse:
Flag di trama compressi DXTn | Valore | Formato |
---|---|---|
D3DFMT_DXT1 | MAKEFOURCC('D', 'X', 'T', '1') | Formato di trama di compressione DXT1 |
D3DFMT_DXT2 | MAKEFOURCC('D', 'X', 'T', '2') | Formato di trama di compressione DXT2 |
D3DFMT_DXT3 | MAKEFOURCC('D', 'X', 'T', '3') | Formato di trama di compressione DXT3 |
D3DFMT_DXT4 | MAKEFOURCC('D', 'X', 'T', '4') | Formato della trama di compressione DXT4 |
D3DFMT_DXT5 | MAKEFOURCC('D', 'X', 'T', '5') | Formato di trama di compressione DXT5 |
Il runtime non consente a un'applicazione di creare una superficie usando un formato DXTn, a meno che le dimensioni della superficie non siano multiple di 4. Ciò si applica alle superfici fuori schermo, alle destinazioni di rendering, alle trame 2D, alle trame del cubo e alle trame del volume.
formati Floating-Point
Questi flag vengono usati per i formati di superficie a virgola mobile. Questi formati a 16 bit per canale sono noti anche come formati s10e5.
Flag a virgola mobile | Valore | Formato |
---|---|---|
D3DFMT_R16F | 111 | Formato float a 16 bit usando 16 bit per il canale rosso. |
D3DFMT_G16R16F | 112 | Formato float a 32 bit usando 16 bit per il canale rosso e 16 bit per il canale verde. |
D3DFMT_A16B16G16R16F | 113 | Formato float a 64 bit usando 16 bit per ogni canale (alfa, blu, verde, rosso). |
Formati FOURCC
I dati in un formato FOURCC sono dati compressi.
MAKEFOURCC
Una macro per la generazione di codici a quattro caratteri segue:
#define MAKEFOURCC(ch0, ch1, ch2, ch3) \
((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
Ecco i formati FOURCC definiti:
Flag FOURCC | Valore | Formato |
---|---|---|
D3DFMT_MULTI2_ARGB8 | MAKEFOURCC('M','E','T','1') | Trama MultiElement (non compressa) |
D3DFMT_G8R8_G8B8 | MAKEFOURCC('G', 'R', 'G', 'B') | Formato RGB a 16 bit analogo a YUY2 (Y0U0, Y1V0, Y2U2 e così via). Richiede una coppia di pixel per rappresentare correttamente il valore del colore. Il primo pixel della coppia contiene 8 bit di verde (nell'alto 8 bit) e 8 bit di rosso (nei 8 bit bassi). Il secondo pixel contiene 8 bit di verde (nell'alto 8 bit) e 8 bit di blu (nei bassi 8 bit). Insieme, i due pixel condividono i componenti rossi e blu, mentre ognuno ha un componente verde univoco (G0R0, G1B0, G2R2 e così via). L'esempio di trama non normalizza i colori durante la ricerca in un pixel shader; rimangono nell'intervallo di 0,0f a 255,0f. Questo è vero per tutti i modelli di pixel shader programmabili. Per lo shader pixel della funzione fissa, l'hardware deve normalizzare l'intervallo 0.f a 1.f e trattarlo essenzialmente come trama YUY2. L'hardware che espone questo formato deve avere il membro PixelShader1xMaxValue di D3DCAPS9 impostato su un valore in grado di gestire tale intervallo. |
D3DFMT_R8G8_B8G8 | MAKEFOURCC('R', 'G', 'B', 'G') | Formato RGB a 16 bit analogo a UYVY (U0Y0, V0Y1, U2Y2 e così via). Richiede una coppia di pixel per rappresentare correttamente il valore del colore. Il primo pixel della coppia contiene 8 bit di verde (nei bassi 8 bit) e 8 bit di rosso (nell'alto 8 bit). Il secondo pixel contiene 8 bit di verde (nei bassi 8 bit) e 8 bit di blu (nell'alto 8 bit). Insieme, i due pixel condividono i componenti rosso e blu, mentre ognuno ha un componente verde univoco (R0G0, B0G1, R2G2 e così via). L'esempio di trama non normalizza i colori durante la ricerca in un pixel shader; rimangono nell'intervallo di 0,0f a 255,0f. Questo è vero per tutti i modelli di pixel shader programmabili. Per lo shader pixel della funzione fissa, l'hardware deve normalizzare l'intervallo 0.f a 1.f e trattarlo essenzialmente come trama YUY2. L'hardware che espone questo formato deve avere il membro PixelShader1xMaxValue di D3DCAPS9 impostato su un valore in grado di gestire tale intervallo. |
D3DFMT_UYVY | MAKEFOURCC('U', 'Y', 'V', 'Y') | Formato UYVY (conformità PC98) |
D3DFMT_YUY2 | MAKEFOURCC('Y', 'U', 'Y', '2') | Formato YUY2 (conformità PC98) |
Formati IEEE
Questi flag vengono usati per i formati di superficie a virgola mobile. Questi formati a 32 bit per canale sono noti anche come formati s23e8.
Flag a virgola mobile | Valore | Formato |
---|---|---|
D3DFMT_R32F | 114 | Formato float a 32 bit usando 32 bit per il canale rosso. |
D3DFMT_G32R32F | 115 | Formato float a 64 bit usando 32 bit per il canale rosso e 32 bit per il canale verde. |
D3DFMT_A32B32G32R32F | 116 | Formato float a 128 bit usando 32 bit per ogni canale (alfa, blu, verde, rosso). |
Formati misti
I dati in formati misti possono contenere una combinazione di dati non firmati e dati firmati.
Flag di formato misto | Valore | Formato |
---|---|---|
D3DFMT_L6V5U5 | 61 | Formato mappa a 16 bit con luminanza usando 6 bit per la luminanza e 5 bit ognuno per v e l'utente. |
D3DFMT_X8L8V8U8 | 62 | Formato mappa d'urto a 32 bit con luminanza usando 8 bit per ogni canale. |
D3DFMT_A2W10V10U10 | 67 | Formato della mappa d'urto a 32 bit usando 2 bit per alfa e 10 bit ciascuno per w, v e l'utente. |
Formati firmati
I dati in un formato firmato possono essere sia positivi che negativi. I formati firmati usano combinazioni di dati (U), (V), (W) e (Q).
Flag di formato firmato | Valore | Formato |
---|---|---|
D3DFMT_V8U8 | 60 | Formato mappa a 16 bit con 8 bit ciascuno per l'utente e i dati v. |
D3DFMT_Q8W8V8U8 | 63 | Formato mappa a 32 bit con 8 bit per ogni canale. |
D3DFMT_V16U16 | 64 | Formato mappa a 32 bit con 16 bit per ogni canale. |
D3DFMT_Q16W16V16U16 | 110 | Formato mappa a 64 bit con 16 bit per ogni componente. |
D3DFMT_CxV8U8 | 117 | Formato di compressione normale a 16 bit. Il campionatore di trama calcola il canale C da: C = sqrt(1 - U² - V²). |
Formati non firmati
I dati in un formato senza segno devono essere positivi. I formati senza segno usano combinazioni di dati (R)ed, (G)reen, (B)lue, (A)lpha, (L)uminance e (P)alette. I dati della tavolozza vengono definiti anche dati indicizzati a colori perché i dati vengono usati per indicizzare una tavolozza dei colori.
Flag di formato senza segno | Valore | Formato |
---|---|---|
D3DFMT_R8G8B8 | 20 | Formato pixel RGB a 24 bit con 8 bit per canale. |
D3DFMT_A8R8G8B8 | 21 | Formato pixel ARGB a 32 bit con alfa, usando 8 bit per canale. |
D3DFMT_X8R8G8B8 | 22 | Formato pixel RGB a 32 bit, dove 8 bit sono riservati per ogni colore. |
D3DFMT_R5G6B5 | 23 | Formato pixel RGB a 16 bit con 5 bit per rosso, 6 bit per il verde e 5 bit per il blu. |
D3DFMT_X1R5G5B5 | 24 | Formato pixel a 16 bit in cui sono riservati 5 bit per ogni colore. |
D3DFMT_A1R5G5B5 | 25 | Formato pixel a 16 bit in cui 5 bit sono riservati per ogni colore e 1 bit è riservato per alfa. |
D3DFMT_A4R4G4B4 | 26 | Formato pixel ARGB a 16 bit con 4 bit per ogni canale. |
D3DFMT_R3G3B2 | 27 | Formato di trama RGB a 8 bit usando 3 bit per rosso, 3 bit per il verde e 2 bit per il blu. |
D3DFMT_A8 | 28 | Solo alfa a 8 bit. |
D3DFMT_A8R3G3B2 | 29 | Formato di trama ARGB a 16 bit usando 8 bit per alfa, 3 bit per rosso e verde e 2 bit per il blu. |
D3DFMT_X4R4G4B4 | 30 | Formato pixel RGB a 16 bit usando 4 bit per ogni colore. |
D3DFMT_A2B10G10R10 | 31 | Formato pixel a 32 bit usando 10 bit per ogni colore e 2 bit per alfa. |
D3DFMT_A8B8G8R8 | 32 | Formato pixel ARGB a 32 bit con alfa, usando 8 bit per canale. |
D3DFMT_X8B8G8R8 | 33 | Formato pixel RGB a 32 bit, dove 8 bit sono riservati per ogni colore. |
D3DFMT_G16R16 | 34 | Formato pixel a 32 bit usando 16 bit ciascuno per verde e rosso. |
D3DFMT_A2R10G10B10 | 35 | Formato pixel a 32 bit usando 10 bit ciascuno per i bit rosso, verde e blu e 2 bit per alfa. |
D3DFMT_A16B16G16R16 | 36 | Formato pixel a 64 bit usando 16 bit per ogni componente. |
D3DFMT_A8P8 | 40 | Colore a 8 bit indicizzato con 8 bit alfa. |
D3DFMT_P8 | 41 | Colore a 8 bit indicizzato. |
D3DFMT_L8 | 50 | Solo luminanza a 8 bit. |
D3DFMT_L16 | 81 | Solo luminanza a 16 bit. |
D3DFMT_A8L8 | 51 | 16 bit usando 8 bit ciascuno per alfa e luminanza. |
D3DFMT_A4L4 | 52 | 8 bit usando 4 bit ciascuno per alfa e luminanza. |
D3DFMT_A1 | 118 | Monocromatica a 1 bit.
Differenze tra Direct3D 9 e Direct3D 9Ex: Questo flag è disponibile solo in Direct3D 9Ex. |
D3DFMT_A2B10G10R10_XR_BIAS | 119 | 2,8 punti fissi con distorsione.
Differenze tra Direct3D 9 e Direct3D 9Ex: Questo flag è disponibile solo in Direct3D 9Ex. |
D3DFMT_BINARYBUFFER | 199 | Formato binario che indica che i dati non hanno alcun tipo intrinseco.
Differenze tra Direct3D 9 e Direct3D 9Ex: Questo flag è disponibile solo in Direct3D 9Ex. |
Altro
Questo flag viene usato per i formati non definiti.
Altri flag | Valore | Formato |
---|---|---|
D3DFMT_UNKNOWN | 0 | Formato superficie sconosciuto |
Requisiti
Requisito | Valore |
---|---|
Intestazione |
|
Vedi anche