Поделиться через


D3DFORMAT

Определяет различные типы форматов поверхностей.

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;

Комментарии

Существует несколько типов форматов:

Все форматы перечислены слева направо, от наиболее значимого до наименее значимого бита. Например, D3DFORMAT_ARGB упорядочено от наиболее значимого битового канала A (альфа) до наименее значимого битового канала B (синий). При обходе данных поверхности данные хранятся в памяти от наименьшего до наиболее значимого бита. Это означает, что порядок каналов в памяти — от наименее значимого бита (синий) до наиболее значимого бита (альфа).

Значение по умолчанию для форматов, содержащих неопределенные каналы (G16R16, A8 и т. д.), равно 1. Единственным исключением является формат A8, который инициализируется значением 000 для трех цветовых каналов.

Порядок битов относится к самому значительному байту, поэтому D3DFMT_A8L8 указывает, что высокий байт этого 2-байтового формата является альфа- . D3DFMT_D16 указывает 16-разрядное целое значение и область, доступную для приложения.

Форматы пикселей были выбраны для включения выражения форматов расширений, определяемых поставщиком оборудования, а также для включения хорошо зарекомендовавший себя метод FOURCC. Набор форматов, распознаемых средой выполнения Direct3D, определяется D3DFORMAT.

Обратите внимание, что форматы предоставляются независимыми поставщиками оборудования (IHV), а многие коды FOURCC не указаны. Форматы в этом перечислении уникальны тем, что они санкционированы средой выполнения, что означает, что растеризатор ссылок будет работать со всеми этими типами. Форматы, предоставляемые IHV, будут поддерживаться отдельными IHV на карта карта основе.

Форматы backBuffer или display

Эти форматы являются единственными допустимыми форматами для заднего буфера или дисплея.

Формат Задний буфер Отображение
A2R10G10B10 x x (только в полноэкранном режиме)
A8R8G8B8 x
X8R8G8B8 x x
A1R5G5B5 x
X1R5G5B5 x x
R5G6B5 x x

 

Форматы буфера

Буферы глубины, трафарета, вершин и индексов имеют уникальные форматы.

Флаги буфера Значение Формат
D3DFMT_D16_LOCKABLE 70 16-разрядная глубина z-буфера.
D3DFMT_D32 71 32-разрядная глубина z-буфера.
D3DFMT_D15S1 73 16-разрядная глубина z-буфера, где 15 бит зарезервированы для канала глубины, а 1 бит — для канала трафарета.
D3DFMT_D24S8 75 32-разрядная глубина z-буфера, использующий 24 бита для канала глубины и 8 бит для канала трафарета.
D3DFMT_D24X8 77 32-разрядная глубина z-буфера с 24 битами для канала глубины.
D3DFMT_D24X4S4 79 32-разрядная глубина z-буфера с использованием 24 бит для канала глубины и 4 бита для канала трафарета.
D3DFMT_D32F_LOCKABLE 82 Блокируемый формат, в котором значение глубины представлено в виде стандартного числа с плавающей запятой IEEE.
D3DFMT_D24FS8 83 Неблокируемый формат, содержащий 24 бита глубины (в 24-разрядном формате с плавающей запятой — 20e4) и 8 бит трафарета.
D3DFMT_D32_LOCKABLE 84 Блокируемый 32-разрядный буфер глубины. Различия между Direct3D 9 и Direct3D 9Ex: Этот флаг доступен только в Direct3D 9Ex.
D3DFMT_S8_LOCKABLE 85 Блокируемый 8-разрядный буфер трафарета. Различия между Direct3D 9 и Direct3D 9Ex: Этот флаг доступен только в Direct3D 9Ex.
D3DFMT_D16 80 16-разрядная глубина z-буфера.
D3DFMT_VERTEXDATA 100 Описывает поверхность буфера вершин.
D3DFMT_INDEX16 101 16-битовая глубина буфера индекса.
D3DFMT_INDEX32 102 32-разрядная глубина буфера индекса.

 

Все форматы трафаретов глубины, кроме D3DFMT_D16_LOCKABLE указывают на отсутствие определенного битового упорядочения на пиксель, и драйвер может использовать больше указанного количества битов на канал глубины (но не канал трафарета).

Форматы сжатых текстур DXTn

Эти флаги используются для сжатых текстур:

Флаги сжатых текстур DXTn Значение Формат
D3DFMT_DXT1 MAKEFOURCC('D', 'X', 'T', '1') Формат текстуры сжатия DXT1
D3DFMT_DXT2 MAKEFOURCC('D', 'X', 'T', '2') Формат текстуры сжатия DXT2
D3DFMT_DXT3 MAKEFOURCC('D', 'X', 'T', '3') Формат текстуры сжатия DXT3
D3DFMT_DXT4 MAKEFOURCC('D', 'X', 'T', '4') Формат текстуры сжатия DXT4
D3DFMT_DXT5 MAKEFOURCC('D', 'X', 'T', '5') Формат текстуры сжатия DXT5

 

Среда выполнения не позволит приложению создавать поверхность в формате DXTn, если размеры поверхности кратны 4. Это относится к поверхностям без экрана, целевым объектам отрисовки, двухD-текстурам, текстурам куба и текстурам объема.

Форматы Floating-Point

Эти флаги используются для форматов поверхностей с плавающей запятой. Эти 16-разрядные форматы на канал также называются форматами s10e5.

Флаги с плавающей запятой Значение Формат
D3DFMT_R16F 111 16-разрядный формат с плавающей точкой с 16 битами для красного канала.
D3DFMT_G16R16F 112 32-разрядный формат с плавающей точкой с 16 битами для красного канала и 16 битами для зеленого канала.
D3DFMT_A16B16G16R16F 113 64-разрядный формат с плавающей точкой с 16 битами для каждого канала (альфа-, синий, зеленый, красный).

 

Форматы FOURCC

Данные в формате FOURCC — это сжатые данные.

MAKEFOURCC

Ниже приведен макрос для создания кодов из четырех символов:

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

Ниже приведены определенные форматы FOURCC:

Флаги FOURCC Значение Формат
D3DFMT_MULTI2_ARGB8 MAKEFOURCC('M';'E';'T';'1') Текстура MultiElement (без сжатия)
D3DFMT_G8R8_G8B8 MAKEFOURCC('G', 'R', 'G', 'B') 16-разрядный формат RGB, аналогичный YUY2 (Y0U0, Y1V0, Y2U2 и т. д.). Для правильного представления значения цвета требуется пара пикселей. Первый пиксель в паре содержит 8 битов зеленого (в высоких 8 бит) и 8 битов красного (в низких 8 бит). Второй пиксель содержит 8 битов зеленого (в высоких 8 бит) и 8 битов синего (в низких 8 бит). Вместе эти два пикселя совместно используют красный и синий компоненты, а каждый из них имеет уникальный зеленый компонент (G0R0, G1B0, G2R2 и т. д.). Средство выборки текстур не нормализует цвета при поиске в пиксельном шейдере; они остаются в диапазоне от 0,0f до 255,0f. Это верно для всех программируемых моделей пиксельных шейдеров. Для шейдера пикселей с фиксированной функцией оборудование должно нормализоваться в диапазоне от 0,f до 1,f и рассматривать его как текстуру YUY2. Для оборудования, предоставляющего этот формат, для элемента PixelShader1xMaxValue D3DCAPS9 должно быть задано значение, которое может обрабатывать этот диапазон.
D3DFMT_R8G8_B8G8 MAKEFOURCC('R', 'G', 'B', 'G') 16-разрядный формат RGB, аналогичный UYVY (U0Y0, V0Y1, U2Y2 и т. д.). Для правильного представления значения цвета требуется пара пикселей. Первый пиксель в паре содержит 8 битов зеленого (в низких 8 бит) и 8 битов красного (в высоких 8 бит). Второй пиксель содержит 8 бит зеленого (в низких 8 бит) и 8 бит синего (в высоких 8 бит). Вместе два пикселя разделяют красный и синий компоненты, а каждый из них имеет уникальный зеленый компонент (R0G0, B0G1, R2G2 и т. д.). Средство выборки текстур не нормализует цвета при поиске в пиксельном шейдере; они остаются в диапазоне от 0,0f до 255,0f. Это верно для всех программируемых моделей пиксельных шейдеров. Для шейдера пикселей с фиксированной функцией оборудование должно нормализоваться в диапазоне от 0,f до 1,f и рассматривать его как текстуру YUY2. Оборудование, предоставляющее этот формат, должно иметь элемент PixelShader1xMaxValue из D3DCAPS9 со значением, способным обрабатывать этот диапазон.
D3DFMT_UYVY MAKEFOURCC('U', 'Y', 'V', 'Y') Формат UYVY (соответствие PC98)
D3DFMT_YUY2 MAKEFOURCC('Y', 'U', 'Y', '2') Формат YUY2 (соответствие PC98)

 

Форматы IEEE

Эти флаги используются для форматов поверхностей с плавающей запятой. Эти 32-разрядные форматы на канал также называются форматами s23e8.

Флаги с плавающей запятой Значение Формат
D3DFMT_R32F 114 32-разрядный формат с плавающей точкой с 32 битами для красного канала.
D3DFMT_G32R32F 115 64-разрядный формат с плавающей запятой, использующий 32 бита для красного канала и 32 бита для зеленого канала.
D3DFMT_A32B32G32R32F 116 128-разрядный формат с плавающей точкой с 32 битами для каждого канала (альфа-, синий, зеленый, красный).

 

Смешанные форматы

Данные в смешанных форматах могут содержать сочетание неподписанных и подписанных данных.

Флаги смешанного формата Значение Формат
D3DFMT_L6V5U5 61 Формат 16-разрядной карты с яркостью, использующей 6 бит для яркости, и по 5 бит для v и you.
D3DFMT_X8L8V8U8 62 Формат 32-разрядной карты с яркостью, использующей 8 бит для каждого канала.
D3DFMT_A2W10V10U10 67 Формат 32-разрядной схемы ударов, в котором используется 2 бита для альфа-канала и 10 бит для w, v и you.

 

Подписанные форматы

Данные в формате со знаком могут быть как положительными, так и отрицательными. В подписанных форматах используются сочетания данных (U), (V), (W) и (Q).

Флаги подписанного формата Значение Формат
D3DFMT_V8U8 60 16-разрядный формат bump-map с использованием 8 бит каждый для вас и v данных.
D3DFMT_Q8W8V8U8 63 32-разрядный формат bump-map с 8 битами для каждого канала.
D3DFMT_V16U16 64 32-разрядный формат bump-map с использованием 16 бит для каждого канала.
D3DFMT_Q16W16V16U16 110 Формат 64-разрядной схемы bump-map с 16 битами для каждого компонента.
D3DFMT_CxV8U8 117 16-разрядный формат нормального сжатия. Средство выборки текстур вычисляет канал C из: C = sqrt(1 - U² - V²).

 

Неподписанные форматы

Данные в неподписаемом формате должны быть положительными. В форматах без знака используются сочетания данных (R)ed, (G)reen, (B)lue, (A)lpha, (L)uminance и (P)alette. Данные палитры также называются данными с индексированием цвета, так как они используются для индексирования цветовой палитры.

Флаги неподписаного формата Значение Формат
D3DFMT_R8G8B8 20 24-разрядный формат rgb-пикселей с 8 битами на канал.
D3DFMT_A8R8G8B8 21 32-разрядный формат пикселей ARGB с альфа-каналом с 8 битами.
D3DFMT_X8R8G8B8 22 32-разрядный формат rgb-пикселей, где для каждого цвета зарезервировано 8 бит.
D3DFMT_R5G6B5 23 16-разрядный формат rgb-пикселей с 5 битами для красного, 6 битами для зеленого и 5 битами для синего.
D3DFMT_X1R5G5B5 24 16-разрядный формат пикселей, в котором для каждого цвета зарезервировано по 5 бит.
D3DFMT_A1R5G5B5 25 16-разрядный формат пикселей, где для каждого цвета зарезервировано 5 битов, а для альфа-канала — 1 бит.
D3DFMT_A4R4G4B4 26 16-разрядный формат пикселей ARGB с 4 битами для каждого канала.
D3DFMT_R3G3B2 27 Формат 8-разрядной текстуры RGB: 3 бита для красного, 3 бита для зеленого и 2 бита для синего.
D3DFMT_A8 28 Только 8-разрядный альфа-канал.
D3DFMT_A8R3G3B2 29 16-разрядный формат текстуры ARGB, использующий 8 битов для альфа- и 3 бита для красного и зеленого и 2 бита для синего.
D3DFMT_X4R4G4B4 30 16-разрядный формат пикселей RGB с использованием 4 бит для каждого цвета.
D3DFMT_A2B10G10R10 31 Формат 32-разрядного пикселя с использованием 10 бит для каждого цвета и 2 бита для альфа-канала.
D3DFMT_A8B8G8R8 32 32-разрядный формат пикселей ARGB с альфа-каналом с 8 битами.
D3DFMT_X8B8G8R8 33 32-разрядный формат rgb-пикселей, где для каждого цвета зарезервировано 8 бит.
D3DFMT_G16R16 34 32-разрядный формат пикселей с 16 битами для зеленого и красного цвета.
D3DFMT_A2R10G10B10 35 Формат 32-разрядного пикселя с использованием 10 битов для красного, зеленого и синего и 2 бита для альфа-канала.
D3DFMT_A16B16G16R16 36 64-разрядный формат пикселей с использованием 16 бит для каждого компонента.
D3DFMT_A8P8 40 8-разрядный цвет, индексируется с 8 битами альфа-канала.
D3DFMT_P8 41 Индексируется 8-разрядный цвет.
D3DFMT_L8 50 Только 8-разрядная яркость.
D3DFMT_L16 81 Только 16-разрядная яркость.
D3DFMT_A8L8 51 16-разрядная версия с 8 битами для альфа-канала и яркости.
D3DFMT_A4L4 52 8-разрядные, использующие по 4 бита для альфа-канала и яркости.
D3DFMT_A1 118 1-разрядный монохромный. Различия между Direct3D 9 и Direct3D 9Ex: Этот флаг доступен только в Direct3D 9Ex.
D3DFMT_A2B10G10R10_XR_BIAS 119 2.8 смещением фиксированной точки. Различия между Direct3D 9 и Direct3D 9Ex: Этот флаг доступен только в Direct3D 9Ex.
D3DFMT_BINARYBUFFER 199 Двоичный формат, указывающий, что данные не имеют присущего типа. Различия между Direct3D 9 и Direct3D 9Ex: Этот флаг доступен только в Direct3D 9Ex.

 

Другое

Этот флаг используется для неопределенных форматов.

Другие флаги Значение Формат
D3DFMT_UNKNOWN 0 Формат Surface неизвестен

 

Требования

Требование Значение
Заголовок
D3D9Types.h

См. также раздел

Перечисления Direct3D