ПРОГРАМИРУЕМ 3D ГРАФИКУ ИСПОЛЬЗУЯ DirectX


Интерфейс DirectDraw - часть 13


} ASSERT(b) ;

// Выполнить тестирование SetTimerfl, 100, NULL);

return TRUE;

»

В первой половине функции мы создаем объект CDirectDraw и тестовое окно, которое появляется на экране. Большей частью она состоит из стандартного кода Windows. После того как окно создано, объект CDirectDraw переводится в оконный или полноэкранный режим. Наиболее сложной оказывается завершающая часть. Функции SetFullScreenMode и SetWindowedMode равносильны вызову функции CDirectDraw::_SetMode, выполняющей всю работу по созданию первичного и вторичного буферов, а также связанной с ними палитры. Установка режима состоит из трех этапов:

1. Задание уровня кооперации (cooperative level), который определяет, какие действия разрешается выполнять с DirectDraw. Если приложение должно работать в окне, выбирается нормальный режим. Для полного экрана следует затребовать монопольный (exclusive) режим. Уровень кооперации помогает распределять ресурсы между системой и приложениями DirectDraw.

2. Создание первичного и вторичного буферов. Буфера являются поверхностями DirectDraw. Если мы собираемся работать в полноэкранном режиме, то создаем так называемую сложную переключаемую поверхность, состоящую из двух одинаковых буферов. Для работы в окне создается два отдельных буфера: первичный, используемый совместно с GDI, и вторичный, принадлежащий только приложению.

3. Определить, нужен ли ограничитель, и если да, то создать его.

Ниже приводится функция для установки режима:

BOOL CDirectDraw::_SetMode(HWND hWnd, int ex, int cy,

int bpp, BOOL bFullScreen) t

ASSERT(m_pIDD) ;

// Освободить все существующие буфера ReleaseAllO ;

/b> вг Глава 12. Интерфейс DirectDraw

// Задать уровень кооперации if (bFullScreen) {

if (!SetCooperativeLevel(hWnd, DDSCL_EXCLOSIVE ¦

DDSCL_FULLSCREEN)) ( return FALSE;

}

m_hr = m_pIDD-»SetDisplayMode (ex, cy, bpp) ;

if (FAILED(m_hr)) { return FALSE;

} m_bRestore = TRUE;

} else {

if (!SetCooperativeLevel(hWnd, DDSCL_NORMAL)) ( return FALSE;

} )

// Создать первичную и вторичную поверхности




Начало  Назад  Вперед



Книжный магазин