Partager via


D3DFORMAT

Définit les différents types de formats de surface.

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;

Notes

Il existe plusieurs types de formats :

Tous les formats sont répertoriés de gauche à droite, du bit le plus significatif au bit le moins significatif. Par exemple, D3DFORMAT_ARGB est classé du canal de bits le plus significatif A (alpha) au canal de bits le moins significatif B (bleu). Lors de la traversée des données de surface, les données sont stockées en mémoire du bit le moins significatif au bit le plus significatif, ce qui signifie que l’ordre de canal dans la mémoire est du bit le moins significatif (bleu) au bit le plus significatif (alpha).

La valeur par défaut pour les formats qui contiennent des canaux non définis (G16R16, A8, etc.) est 1. La seule exception est le format A8, qui est initialisé à 000 pour les trois canaux de couleur.

L’ordre des bits est d’abord de l’octet le plus significatif, donc D3DFMT_A8L8 indique que l’octet élevé de ce format de 2 octets est alpha. D3DFMT_D16 indique une valeur entière 16 bits et une surface verrouillable d’application.

Les formats de pixels ont été choisis pour permettre l’expression de formats d’extension définis par le fournisseur de matériel, ainsi que pour inclure la méthode FOURCC bien établie. L’ensemble de formats compris par le runtime Direct3D est défini par D3DFORMAT.

Notez que les formats sont fournis par des fournisseurs de matériel indépendants et que de nombreux codes FOURCC ne sont pas répertoriés. Les formats de cette énumération sont uniques en ce qu’ils sont sanctionnés par le runtime, ce qui signifie que le rastériseur de référence fonctionnera sur tous ces types. Les formats fournis par IHV seront pris en charge par les IHV individuels sur une base carte par carte.

BackBuffer ou Formats d’affichage

Ces formats sont les seuls formats valides pour une mémoire tampon arrière ou un affichage.

Format Mémoire tampon arrière Affichage
A2R10G10B10 x x (mode plein écran uniquement)
A8R8G8B8 x
X8R8G8B8 x x
A1R5G5B5 x
X1R5G5B5 x x
R5G6B5 x x

 

Formats de mémoire tampon

Les mémoires tampons de profondeur, de gabarit, de vertex et d’index ont chacune des formats uniques.

Indicateurs de mémoire tampon Valeur Format
D3DFMT_D16_LOCKABLE 70 Profondeur de bits de mémoire tampon z 16 bits.
D3DFMT_D32 71 Profondeur de bits de mémoire tampon z 32 bits.
D3DFMT_D15S1 73 Profondeur de bits de mémoire tampon z 16 bits où 15 bits sont réservés pour le canal de profondeur et 1 bit est réservé au canal de gabarit.
D3DFMT_D24S8 75 Profondeur de bits de mémoire tampon z 32 bits utilisant 24 bits pour le canal de profondeur et 8 bits pour le canal de gabarit.
D3DFMT_D24X8 77 Profondeur de bits de mémoire tampon z 32 bits à l’aide de 24 bits pour le canal de profondeur.
D3DFMT_D24X4S4 79 Profondeur de bits de mémoire tampon z 32 bits utilisant 24 bits pour le canal de profondeur et 4 bits pour le canal de gabarit.
D3DFMT_D32F_LOCKABLE 82 Format verrouillable où la valeur de profondeur est représentée sous la forme d’un nombre à virgule flottante IEEE standard.
D3DFMT_D24FS8 83 Format non verrouillable qui contient 24 bits de profondeur (dans un format à virgule flottante 24 bits - 20e4) et 8 bits de gabarit.
D3DFMT_D32_LOCKABLE 84 Mémoire tampon de profondeur 32 bits verrouillable. Différences entre Direct3D 9 et Direct3D 9Ex : Cet indicateur est disponible dans Direct3D 9Ex uniquement.
D3DFMT_S8_LOCKABLE 85 % Mémoire tampon de gabarit 8 bits verrouillable. Différences entre Direct3D 9 et Direct3D 9Ex : Cet indicateur est disponible dans Direct3D 9Ex uniquement.
D3DFMT_D16 80 Profondeur de bits de mémoire tampon z 16 bits.
D3DFMT_VERTEXDATA 100 Décrit une surface de mémoire tampon de vertex.
D3DFMT_INDEX16 101 Profondeur de bits de mémoire tampon d’index 16 bits.
D3DFMT_INDEX32 102 Profondeur de bits de mémoire tampon d’index 32 bits.

 

Tous les formats de gabarit de profondeur, à l’exception de D3DFMT_D16_LOCKABLE n’indiquent pas d’ordre de bits particulier par pixel, et le pilote est autorisé à consommer plus que le nombre indiqué de bits par canal de profondeur (mais pas de canal de gabarit).

Formats de texture compressés DXTn

Ces indicateurs sont utilisés pour les textures compressées :

Indicateurs de texture compressée DXTn Valeur Format
D3DFMT_DXT1 MAKEFOURCC('D', 'X', 'T', '1') Format de texture de compression DXT1
D3DFMT_DXT2 MAKEFOURCC('D', 'X', 'T', '2') Format de texture de compression DXT2
D3DFMT_DXT3 MAKEFOURCC('D', 'X', 'T', '3') Format de texture de compression DXT3
D3DFMT_DXT4 MAKEFOURCC('D', 'X', 'T', '4') Format de texture de compression DXT4
D3DFMT_DXT5 MAKEFOURCC('D', 'X', 'T', '5') Format de texture de compression DXT5

 

Le runtime n’autorise pas une application à créer une surface à l’aide d’un format DXTn, sauf si les dimensions de surface sont des multiples de 4. Cela s’applique aux surfaces simples hors écran, aux cibles de rendu, aux textures 2D, aux textures de cube et aux textures de volume.

formats Floating-Point

Ces indicateurs sont utilisés pour les formats de surface à virgule flottante. Ces formats 16 bits par canal sont également appelés formats s10e5.

Indicateurs à virgule flottante Valeur Format
D3DFMT_R16F 111 Format float 16 bits utilisant 16 bits pour le canal rouge.
D3DFMT_G16R16F 112 Format float 32 bits utilisant 16 bits pour le canal rouge et 16 bits pour le canal vert.
D3DFMT_A16B16G16R16F 113 Format float 64 bits utilisant 16 bits pour chaque canal (alpha, bleu, vert, rouge).

 

FOURCC Formats

Les données au format FOURCC sont des données compressées.

MAKEFOURCC

Voici une macro permettant de générer des codes de quatre caractères :

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

Voici les formats FOURCC définis :

Indicateurs FOURCC Valeur Format
D3DFMT_MULTI2_ARGB8 MAKEFOURCC('M','E','T','1') Texture MultiElement (non compressée)
D3DFMT_G8R8_G8B8 MAKEFOURCC('G', 'R', 'G', 'B') Format RVB 16 bits, analogue à YUY2 (Y0U0, Y1V0, Y2U2, etc.). Elle nécessite une paire de pixels pour représenter correctement la valeur de couleur. Le premier pixel de la paire contient 8 bits de vert (dans les 8 bits élevés) et 8 bits de rouge (dans les 8 bits bas). Le deuxième pixel contient 8 bits de vert (dans les 8 bits élevés) et 8 bits de bleu (dans les 8 bits bas). Ensemble, les deux pixels partagent les composants rouge et bleu, tandis que chacun a un composant vert unique (G0R0, G1B0, G2R2, etc.). L’échantillonneur de textures ne normalise pas les couleurs lors de la recherche dans un nuanceur de pixels ; elles restent comprises entre 0.0f et 255.0f. Cela est vrai pour tous les modèles de nuanceur de pixels programmables. Pour le nuanceur de pixels de fonction fixe, le matériel doit se normaliser à la plage 0.f à 1.f et le traiter essentiellement comme la texture YUY2. Le matériel qui expose ce format doit avoir le membre PixelShader1xMaxValue de D3DCAPS9 défini sur une valeur capable de gérer cette plage.
D3DFMT_R8G8_B8G8 MAKEFOURCC('R', 'G', 'B', 'G') Format RVB 16 bits packé analogue à UYVY (U0Y0, V0Y1, U2Y2, etc.). Elle nécessite une paire de pixels pour représenter correctement la valeur de couleur. Le premier pixel de la paire contient 8 bits de vert (dans les 8 bits faibles) et 8 bits de rouge (dans les 8 bits élevés). Le deuxième pixel contient 8 bits de vert (dans les 8 bits bas) et 8 bits de bleu (dans les 8 bits élevés). Ensemble, les deux pixels partagent les composants rouge et bleu, tandis que chacun a un composant vert unique (R0G0, B0G1, R2G2, etc.). L’échantillonneur de textures ne normalise pas les couleurs lors de la recherche dans un nuanceur de pixels ; elles restent comprises entre 0.0f et 255.0f. Cela est vrai pour tous les modèles de nuanceur de pixels programmables. Pour le nuanceur de pixels de fonction fixe, le matériel doit se normaliser à la plage 0.f à 1.f et le traiter essentiellement comme la texture YUY2. Le matériel qui expose ce format doit avoir le membre PixelShader1xMaxValue de D3DCAPS9 défini sur une valeur capable de gérer cette plage.
D3DFMT_UYVY MAKEFOURCC('U', 'Y', 'V', 'Y') Format UYVY (conformité PC98)
D3DFMT_YUY2 MAKEFOURCC('Y', 'U', 'Y', '2') Format YUY2 (conformité PC98)

 

IEEE Formats

Ces indicateurs sont utilisés pour les formats de surface à virgule flottante. Ces formats 32 bits par canal sont également appelés formats s23e8.

Indicateurs à virgule flottante Valeur Format
D3DFMT_R32F 114 Format float 32 bits utilisant 32 bits pour le canal rouge.
D3DFMT_G32R32F 115 Format float 64 bits utilisant 32 bits pour le canal rouge et 32 bits pour le canal vert.
D3DFMT_A32B32G32R32F 116 Format float 128 bits utilisant 32 bits pour chaque canal (alpha, bleu, vert, rouge).

 

Formats mixtes

Les données dans des formats mixtes peuvent contenir une combinaison de données non signées et de données signées.

Indicateurs de format mixte Valeur Format
D3DFMT_L6V5U5 61 Format de carte de bosses 16 bits avec luminance utilisant 6 bits pour la luminance, et 5 bits chacun pour v et vous.
D3DFMT_X8L8V8U8 62 Format de carte de bosses 32 bits avec luminance utilisant 8 bits pour chaque canal.
D3DFMT_A2W10V10U10 67 Format de carte de bosses 32 bits utilisant 2 bits pour alpha et 10 bits chacun pour w, v et vous.

 

Formats signés

Les données dans un format signé peuvent être à la fois positives et négatives. Les formats signés utilisent des combinaisons de données (U), (V), (W) et (Q).

Indicateurs de format signé Valeur Format
D3DFMT_V8U8 60 Format de carte de bosses 16 bits utilisant 8 bits chacun pour vous et les données v.
D3DFMT_Q8W8V8U8 63 Format de carte de bosses 32 bits utilisant 8 bits pour chaque canal.
D3DFMT_V16U16 64 Format de carte de bosses 32 bits utilisant 16 bits pour chaque canal.
D3DFMT_Q16W16V16U16 110 Format de carte de bosses 64 bits utilisant 16 bits pour chaque composant.
D3DFMT_CxV8U8 117 Format de compression normal 16 bits. L’échantillonneur de texture calcule le canal C à partir de : C = sqrt(1 - U² - V²).

 

Formats non signés

Les données dans un format non signé doivent être positives. Les formats non signés utilisent des combinaisons de données (R)ed, (G)reen, (B)lue, (A)lpha, (L)uminance et (P)alette. Les données de palette sont également appelées données indexées en couleur, car elles sont utilisées pour indexer une palette de couleurs.

Indicateurs de format non signés Valeur Format
D3DFMT_R8G8B8 20 Format de pixel RVB 24 bits avec 8 bits par canal.
D3DFMT_A8R8G8B8 21 Format de pixel ARGB 32 bits avec alpha, utilisant 8 bits par canal.
D3DFMT_X8R8G8B8 22 Format de pixel RVB 32 bits, où 8 bits sont réservés pour chaque couleur.
D3DFMT_R5G6B5 23 Format de pixel RVB 16 bits avec 5 bits pour le rouge, 6 bits pour le vert et 5 bits pour le bleu.
D3DFMT_X1R5G5B5 24 Format de pixels 16 bits où 5 bits sont réservés pour chaque couleur.
D3DFMT_A1R5G5B5 25 Format de pixels 16 bits où 5 bits sont réservés pour chaque couleur et 1 bit est réservé à l’alpha.
D3DFMT_A4R4G4B4 26 Format de pixel ARGB 16 bits avec 4 bits pour chaque canal.
D3DFMT_R3G3B2 27 Format de texture RVB 8 bits utilisant 3 bits pour le rouge, 3 bits pour le vert et 2 bits pour le bleu.
D3DFMT_A8 28 Alpha 8 bits uniquement.
D3DFMT_A8R3G3B2 29 Format de texture ARGB 16 bits utilisant 8 bits pour l’alpha, 3 bits chacun pour le rouge et le vert et 2 bits pour le bleu.
D3DFMT_X4R4G4B4 30 Format de pixel RVB 16 bits utilisant 4 bits pour chaque couleur.
D3DFMT_A2B10G10R10 31 Format de pixels 32 bits utilisant 10 bits pour chaque couleur et 2 bits pour l’alpha.
D3DFMT_A8B8G8R8 32 Format de pixel ARGB 32 bits avec alpha, utilisant 8 bits par canal.
D3DFMT_X8B8G8R8 33 Format de pixel RVB 32 bits, où 8 bits sont réservés pour chaque couleur.
D3DFMT_G16R16 34 Format de pixels 32 bits utilisant 16 bits chacun pour le vert et le rouge.
D3DFMT_A2R10G10B10 35 Format de pixels 32 bits utilisant 10 bits chacun pour le rouge, le vert et le bleu, et 2 bits pour l’alpha.
D3DFMT_A16B16G16R16 36 Format de pixels 64 bits utilisant 16 bits pour chaque composant.
D3DFMT_A8P8 40 Couleur 8 bits indexée avec 8 bits d’alpha.
D3DFMT_P8 41 Couleur 8 bits indexée.
D3DFMT_L8 50 Luminance 8 bits uniquement.
D3DFMT_L16 81 Luminance 16 bits uniquement.
D3DFMT_A8L8 51 16 bits utilisant 8 bits chacun pour l’alpha et la luminance.
D3DFMT_A4L4 52 8 bits utilisant 4 bits chacun pour l’alpha et la luminance.
D3DFMT_A1 118 Monochrome 1 bit. Différences entre Direct3D 9 et Direct3D 9Ex : Cet indicateur est disponible dans Direct3D 9Ex uniquement.
D3DFMT_A2B10G10R10_XR_BIAS 119 Point fixe biaisé de 2,8. Différences entre Direct3D 9 et Direct3D 9Ex : Cet indicateur est disponible dans Direct3D 9Ex uniquement.
D3DFMT_BINARYBUFFER 199 Format binaire indiquant que les données n’ont pas de type inhérent. Différences entre Direct3D 9 et Direct3D 9Ex : Cet indicateur est disponible dans Direct3D 9Ex uniquement.

 

Autres

Cet indicateur est utilisé pour les formats non définis.

Autres indicateurs Valeur Format
D3DFMT_UNKNOWN 0 Le format surface est inconnu

 

Spécifications

Condition requise Valeur
En-tête
D3D9Types.h

Voir aussi

Énumérations Direct3D