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;

Remarks

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

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

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

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

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

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

BackBuffer или форматы отображения

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

Формат Задний буфер Отображение
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. Это относится к поверхностям без экрана, целевым объектам отрисовки, двумерным текстурам, текстурам куба и текстурам тома.

Форматы 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 и вы.
D3DFMT_X8L8V8U8 62 32-разрядный формат карты удара с яркостью с использованием 8 бит для каждого канала.
D3DFMT_A2W10V10U10 67 32-разрядный формат карты удара с использованием 2 бита для альфа-и 10 бит каждый для w, v и you.

 

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

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

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

 

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

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

Флаги формата без знака Значение Формат
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