D3DFORMAT

Define os vários tipos de formatos de superfície.

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;

Comentários

Há vários tipos de formatos:

Todos os formatos são listados da esquerda para a direita, bits mais significativos para bits menos significativos. Por exemplo, D3DFORMAT_ARGB é ordenado do canal de bits A (alfa) mais significativo para o canal de bits menos significativo B (azul). Ao percorrer dados de superfície, os dados são armazenados na memória de bits menos significativos para bits mais significativos, o que significa que a ordem do canal na memória é de bits menos significativos (azul) a bit mais significativo (alfa).

O valor padrão para formatos que contêm canais indefinidos (G16R16, A8 e assim por diante) é 1. A única exceção é o formato A8, que é inicializado como 000 para os três canais de cores.

A ordem dos bits é do byte mais significativo primeiro, portanto, D3DFMT_A8L8 indica que o byte alto desse formato de 2 bytes é alfa. D3DFMT_D16 indica um valor inteiro de 16 bits e uma superfície bloqueável pelo aplicativo.

Formatos de pixel foram escolhidos para habilitar a expressão de formatos de extensão definidos pelo fornecedor de hardware, bem como para incluir o método FOURCC bem estabelecido. O conjunto de formatos compreendidos pelo runtime do Direct3D é definido por D3DFORMAT.

Observe que os formatos são fornecidos por IHVs (fornecedores independentes de hardware) e muitos códigos FOURCC não estão listados. Os formatos nessa enumeração são exclusivos porque são sancionados pelo runtime, o que significa que o rasterizador de referência funcionará em todos esses tipos. Os formatos fornecidos por IHV terão suporte dos IHVs individuais cartão por cartão.

BackBuffer ou formatos de exibição

Esses formatos são os únicos formatos válidos para um buffer de fundo ou uma exibição.

Formatar Buffer de fundo Exibir
A2R10G10B10 x x (somente modo de tela inteira)
A8R8G8B8 x
X8R8G8B8 x x
A1R5G5B5 x
X1R5G5B5 x x
R5G6B5 x x

 

Formatos de buffer

Buffers de profundidade, estêncil, vértice e índice têm formatos exclusivos.

Sinalizadores de buffer Valor Formatar
D3DFMT_D16_LOCKABLE 70 Profundidade de bits de buffer z de 16 bits.
D3DFMT_D32 71 Profundidade de bits do buffer z de 32 bits.
D3DFMT_D15S1 73 Profundidade de bits z-buffer de 16 bits em que 15 bits são reservados para o canal de profundidade e 1 bit é reservado para o canal de estêncil.
D3DFMT_D24S8 75 Profundidade de bits z-buffer de 32 bits usando 24 bits para o canal de profundidade e 8 bits para o canal de estêncil.
D3DFMT_D24X8 77 Profundidade de bits z-buffer de 32 bits usando 24 bits para o canal de profundidade.
D3DFMT_D24X4S4 79 Profundidade de bits de buffer z de 32 bits usando 24 bits para o canal de profundidade e 4 bits para o canal de estêncil.
D3DFMT_D32F_LOCKABLE 82 Um formato bloqueável em que o valor de profundidade é representado como um número de ponto flutuante IEEE padrão.
D3DFMT_D24FS8 83 Um formato não bloqueável que contém 24 bits de profundidade (em um formato de ponto flutuante de 24 bits - 20e4) e 8 bits de estêncil.
D3DFMT_D32_LOCKABLE 84 Um buffer de profundidade de 32 bits bloqueável. Diferenças entre Direct3D 9 e Direct3D 9Ex: Esse sinalizador está disponível somente no Direct3D 9Ex.
D3DFMT_S8_LOCKABLE 85 Um buffer de estêncil de 8 bits bloqueável. Diferenças entre Direct3D 9 e Direct3D 9Ex: Esse sinalizador está disponível somente no Direct3D 9Ex.
D3DFMT_D16 80 Profundidade de bits de buffer z de 16 bits.
D3DFMT_VERTEXDATA 100 Descreve uma superfície de buffer de vértice.
D3DFMT_INDEX16 101 Profundidade de bits do buffer de índice de 16 bits.
D3DFMT_INDEX32 102 Profundidade de bits do buffer de índice de 32 bits.

 

Todos os formatos de estêncil de profundidade, exceto D3DFMT_D16_LOCKABLE não indicam nenhuma ordenação de bits específica por pixel, e o driver tem permissão para consumir mais do que o número indicado de canal bits por profundidade (mas não canal de estêncil).

Formatos de textura compactada DXTn

Esses sinalizadores são usados para texturas compactadas:

Sinalizadores de textura compactada DXTn Valor Formatar
D3DFMT_DXT1 MAKEFOURCC('D', 'X', 'T', '1') Formato de textura de compactação DXT1
D3DFMT_DXT2 MAKEFOURCC('D', 'X', 'T', '2') Formato de textura de compactação DXT2
D3DFMT_DXT3 MAKEFOURCC('D', 'X', 'T', '3') Formato de textura de compactação DXT3
D3DFMT_DXT4 MAKEFOURCC('D', 'X', 'T', '4') Formato de textura de compactação DXT4
D3DFMT_DXT5 MAKEFOURCC('D', 'X', 'T', '5') Formato de textura de compactação DXT5

 

O runtime não permitirá que um aplicativo crie uma superfície usando um formato DXTn, a menos que as dimensões de superfície sejam múltiplas de 4. Isso se aplica a superfícies sem tela, destinos de renderização, texturas 2D, texturas de cubo e texturas de volume.

Formatos de Floating-Point

Esses sinalizadores são usados para formatos de superfície de ponto flutuante. Esses formatos de 16 bits por canal também são conhecidos como formatos s10e5.

Sinalizadores de ponto flutuante Valor Formatar
D3DFMT_R16F 111 Formato float de 16 bits usando 16 bits para o canal vermelho.
D3DFMT_G16R16F 112 Formato float de 32 bits usando 16 bits para o canal vermelho e 16 bits para o canal verde.
D3DFMT_A16B16G16R16F 113 Formato float de 64 bits usando 16 bits para cada canal (alfa, azul, verde, vermelho).

 

Formatos FOURCC

Os dados em um formato FOURCC são dados compactados.

MAKEFOURCC

Uma macro para gerar códigos de quatro caracteres segue:

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

Aqui estão os formatos FOURCC definidos:

Sinalizadores FOURCC Valor Formatar
D3DFMT_MULTI2_ARGB8 MAKEFOURCC('M','E','T','1') Textura MultiElement (não compactada)
D3DFMT_G8R8_G8B8 MAKEFOURCC('G', 'R', 'G', 'B') Um formato RGB empacotado de 16 bits análogo ao YUY2 (Y0U0, Y1V0, Y2U2 e assim por diante). Ele requer um par de pixels para representar corretamente o valor de cor. O primeiro pixel no par contém 8 bits de verde (nos 8 bits altos) e 8 bits de vermelho (nos 8 bits baixos). O segundo pixel contém 8 bits de verde (nos 8 bits altos) e 8 bits de azul (nos 8 bits baixos). Juntos, os dois pixels compartilham os componentes vermelho e azul, enquanto cada um tem um componente verde exclusivo (G0R0, G1B0, G2R2 e assim por diante). O sampler de textura não normaliza as cores ao examinar um sombreador de pixel; eles permanecem no intervalo de 0,0f a 255,0f. Isso vale para todos os modelos de sombreador de pixel programáveis. Para o sombreador de pixel de função fixa, o hardware deve normalizar para o intervalo de 0.f a 1.f e essencialmente tratá-lo como a textura YUY2. O hardware que expõe esse formato deve ter o membro PixelShader1xMaxValue de D3DCAPS9 definido como um valor capaz de lidar com esse intervalo.
D3DFMT_R8G8_B8G8 MAKEFOURCC('R', 'G', 'B', 'G') Um formato RGB empacotado de 16 bits análogo ao UYVY (U0Y0, V0Y1, U2Y2 e assim por diante). Ele requer um par de pixels para representar corretamente o valor de cor. O primeiro pixel no par contém 8 bits de verde (nos 8 bits baixos) e 8 bits de vermelho (nos 8 bits altos). O segundo pixel contém 8 bits de verde (nos 8 bits baixos) e 8 bits de azul (nos 8 bits altos). Juntos, os dois pixels compartilham os componentes vermelho e azul, enquanto cada um tem um componente verde exclusivo (R0G0, B0G1, R2G2 e assim por diante). O sampler de textura não normaliza as cores ao examinar um sombreador de pixel; eles permanecem no intervalo de 0,0f a 255,0f. Isso vale para todos os modelos de sombreador de pixel programáveis. Para o sombreador de pixel de função fixa, o hardware deve normalizar para o intervalo de 0.f a 1.f e essencialmente tratá-lo como a textura YUY2. O hardware que expõe esse formato deve ter o membro PixelShader1xMaxValue do D3DCAPS9 definido como um valor capaz de lidar com esse intervalo.
D3DFMT_UYVY MAKEFOURCC('U', 'Y', 'V', 'Y') Formato UYVY (conformidade com PC98)
D3DFMT_YUY2 MAKEFOURCC('Y', 'U', 'Y', '2') Formato YUY2 (conformidade com PC98)

 

Formatos IEEE

Esses sinalizadores são usados para formatos de superfície de ponto flutuante. Esses formatos de 32 bits por canal também são conhecidos como formatos s23e8.

Sinalizadores de ponto flutuante Valor Formatar
D3DFMT_R32F 114 Formato float de 32 bits usando 32 bits para o canal vermelho.
D3DFMT_G32R32F 115 Formato float de 64 bits usando 32 bits para o canal vermelho e 32 bits para o canal verde.
D3DFMT_A32B32G32R32F 116 Formato float de 128 bits usando 32 bits para cada canal (alfa, azul, verde, vermelho).

 

Formatos mistos

Os dados em formatos mistos podem conter uma combinação de dados não assinados e dados assinados.

Sinalizadores de formato misto Valor Formatar
D3DFMT_L6V5U5 61 Formato de mapa de colisão de 16 bits com luminância usando 6 bits para luminância e 5 bits cada para v e você.
D3DFMT_X8L8V8U8 62 Formato de mapa de colisão de 32 bits com luminância usando 8 bits para cada canal.
D3DFMT_A2W10V10U10 67 Formato de mapa de colisão de 32 bits usando 2 bits para alfa e 10 bits cada para w, v e você.

 

Formatos Assinados

Os dados em um formato assinado podem ser positivos e negativos. Os formatos assinados usam combinações de dados (U), (V), (W) e (Q).

Sinalizadores de formato assinado Valor Formatar
D3DFMT_V8U8 60 Formato de mapa de colisão de 16 bits usando 8 bits cada para você e dados v.
D3DFMT_Q8W8V8U8 63 Formato de mapa de colisão de 32 bits usando 8 bits para cada canal.
D3DFMT_V16U16 64 Formato de mapa de colisão de 32 bits usando 16 bits para cada canal.
D3DFMT_Q16W16V16U16 110 Formato de mapa de colisão de 64 bits usando 16 bits para cada componente.
D3DFMT_CxV8U8 117 Formato de compactação normal de 16 bits. O sampler de textura calcula o canal C de: C = sqrt(1 - U² - V²).

 

Formatos não assinados

Os dados em um formato não assinado devem ser positivos. Formatos não assinados usam combinações de (R)ed, (G)reen, (B)lue, (A)lpha, (L)uminance e (P)alette data. Os dados da paleta também são chamados de dados indexados por cor porque os dados são usados para indexar uma paleta de cores.

Sinalizadores de formato sem sinal Valor Formatar
D3DFMT_R8G8B8 20 Formato de pixel RGB de 24 bits com 8 bits por canal.
D3DFMT_A8R8G8B8 21 Formato de pixel ARGB de 32 bits com alfa, usando 8 bits por canal.
D3DFMT_X8R8G8B8 22 Formato de pixel RGB de 32 bits, em que 8 bits são reservados para cada cor.
D3DFMT_R5G6B5 23 Formato de pixel RGB de 16 bits com 5 bits para vermelho, 6 bits para verde e 5 bits para azul.
D3DFMT_X1R5G5B5 24 Formato de pixel de 16 bits em que 5 bits são reservados para cada cor.
D3DFMT_A1R5G5B5 25 Formato de pixel de 16 bits em que 5 bits são reservados para cada cor e 1 bit é reservado para alfa.
D3DFMT_A4R4G4B4 26 Formato de pixel ARGB de 16 bits com 4 bits para cada canal.
D3DFMT_R3G3B2 27 Formato de textura RGB de 8 bits usando 3 bits para vermelho, 3 bits para verde e 2 bits para azul.
D3DFMT_A8 28 Somente alfa de 8 bits.
D3DFMT_A8R3G3B2 29 Formato de textura ARGB de 16 bits usando 8 bits para alfa, 3 bits cada para vermelho e verde e 2 bits para azul.
D3DFMT_X4R4G4B4 30 Formato de pixel RGB de 16 bits usando 4 bits para cada cor.
D3DFMT_A2B10G10R10 31 Formato de pixel de 32 bits usando 10 bits para cada cor e 2 bits para alfa.
D3DFMT_A8B8G8R8 32 Formato de pixel ARGB de 32 bits com alfa, usando 8 bits por canal.
D3DFMT_X8B8G8R8 33 Formato de pixel RGB de 32 bits, em que 8 bits são reservados para cada cor.
D3DFMT_G16R16 34 Formato de pixel de 32 bits usando 16 bits cada para verde e vermelho.
D3DFMT_A2R10G10B10 35 Formato de pixel de 32 bits usando 10 bits cada para vermelho, verde e azul e 2 bits para alfa.
D3DFMT_A16B16G16R16 36 Formato de pixel de 64 bits usando 16 bits para cada componente.
D3DFMT_A8P8 40 Cor de 8 bits indexada com 8 bits de alfa.
D3DFMT_P8 41 Cor de 8 bits indexada.
D3DFMT_L8 50 Somente luminância de 8 bits.
D3DFMT_L16 81 Somente luminância de 16 bits.
D3DFMT_A8L8 51 16 bits usando 8 bits cada para alfa e luminância.
D3DFMT_A4L4 52 8 bits usando 4 bits cada para alfa e luminância.
D3DFMT_A1 118 Monocromático de 1 bit. Diferenças entre Direct3D 9 e Direct3D 9Ex: Esse sinalizador está disponível somente no Direct3D 9Ex.
D3DFMT_A2B10G10R10_XR_BIAS 119 Ponto fixo tendencioso de 2,8. Diferenças entre Direct3D 9 e Direct3D 9Ex: Esse sinalizador está disponível somente no Direct3D 9Ex.
D3DFMT_BINARYBUFFER 199 Formato binário que indica que os dados não têm nenhum tipo inerente. Diferenças entre Direct3D 9 e Direct3D 9Ex: Esse sinalizador está disponível somente no Direct3D 9Ex.

 

Outro

Esse sinalizador é usado para formatos indefinidos.

Outros sinalizadores Valor Formatar
D3DFMT_UNKNOWN 0 O formato surface é desconhecido

 

Requisitos

Requisito Valor
parâmetro
D3D9Types.h

Confira também

Enumerações direct3D