Condividi tramite


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:

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
D3D9Types.h

Vedi anche

Enumerazioni Direct3D