double arrow
D3DDEVTYPE

Устройство REF

Выбор формата пикселя для оконного режима

Информация о видеорежиме хранится в структуре D3DDISPLAYMODE.

typedef struct _D3DDISPLAYMODE { UINT Width; // Ширина экрана в пикселях UINT Height; // Высота экрана в пикселях UINT RefreshRate; // Частота кадров (0 = по умолчанию) D3DFORMAT Format; // Формат цвета} D3DDISPLAYMODE;

Предположим необходимо установить видеорежим 640×480 и использовать формат цвета D3DFMT_R5G6B5. Вот как в этом случае должна выглядеть инициализация структуры D3DDISPLAYMODE:

D3DDISPLAYMODE d3ddm;d3ddm.Width = 640;d3ddm.Height = 480;d3ddm.RefreshRate = 0; // по умолчаниюd3ddm.Format = D3DFMT_R5G6B5;

После выполнения метода GetAdapterDisplayMode текущий формат пикселя можно определить через свойство Format структуры D3DDISPLAYMODE. Следующий код показывает пример вызова метода GetAdapterDisplayMode:

D3DDISPLAYMODE d3ddm;(*ppiD3D9)->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);

Далее устанавливаем параметры представления, которые специфичны для оконного режима:

d3dpp.BackBufferFormat = d3ddm.Format;d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;d3dpp.Windowed = TRUE;

Для оконных приложений оптимальным будет использование переключения между буферами D3DSWAPEFFECT_DISCARD.

При работе с DirectХ может возникнуть ситуация, когда программе с использованием Direct3D, необходимы те аппаратные возможности, которые не поддерживаются системой (видеокартой), то есть те возможности, которые не прописаны в HAL. Для этих целей Direct3D предоставляет вспомогательный растеризатор (reference rasterizer, известный также как устройство REF), который программно эмулирует все предлагаемые API Direct3D возможности. Это позволяет писать и проверять код, использующий возможности Direct3D, не поддерживаемые аппаратурой.




Если видеокарта не поддерживает какие-либо возможности DirectХ (например, шейдеры), то можно проверить работу кода с помощью устройства REF. Устройство REF предназначено только для разработчиков. Оно присутствует только в DirectX SDK и не может быть предоставлено конечным пользователям. Устройство REF работает очень медленно и не годится ни для каких целей, кроме тестирования.

В коде устройство HAL указывается константойD3DDEVTYPE_HAL, являющейся членом перечисления D3DDEVTYPE. точно так же устройство REF указывается с помощью константы D3DDEVTYPE_REF, являющейся членом того же перечисления. Очень важно помнить эти типы устройств, поскольку при создании устройства вам придется указывать, какой именно тип использовать.







Сейчас читают про: