Программирование графики с использованием Direct3D

         

Функция OnCreate()


Функция OnCreate() вызывается MFC для выполнения инициализации окна. В оконной версии RMWin, мы использовали OnCreate() только для инициализации интерфейса Direct3DRM. В полноэкранной версии функция OnCreate() инициализирует Direct3D, DirectDraw, поверхности DirectDraw и устройство Direct3D. Функция также создает любые, специфичные для конкретного приложения элементы. Код функции OnCreate() приведен в листинге10.2.

Листинг 10.2. Функция OnCreate()

int RMWin::OnCreate(LPCREATESTRUCT) { ShowCursor(FALSE); Direct3DRMCreate(&d3drm); DirectDrawCreate(0, &ddraw, 0); ddraw->SetCooperativeLevel(GetSafeHwnd(), DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN | DDSCL_ALLOWMODEX); InitDisplayMode(); InitMainSurfaces(); InstallPalette(); CreateDevice(); d3drm->CreateFrame(0, &scene); CreateScene(); return 0; }

Сначала используется функция Win32 ShowCursor(), чтобы скрыть указатель мыши. Мышь можно использовать в полноэкранном режиме, но не столь надежно, как в оконном. Некоторые видеорежимы (особенно видеорежимы Mode X) искажают вид указателя мыши.

Затем для инициализации Direct3D вызывается функция Direct3DRMCreate(), а для инициализации DirectDraw вызывается функция DirectDrawCreate(). Сразу после инициализации DirectDraw вызывается функция SetCooperativeLevel() для включения полноэкранного монопольного режима. Константа DDSCL_ALLOWMODEX добавлена, чтобы разрешить использование любых поддерживаемых видеорежимов Mode X.

Далее расположен вызов функции InitDisplayMode(). Эта функция создает список поддерживаемых видеорежимов и выбирает видеорежим, включаемый при запуске приложения.

Функция InitMainSurfaces() создает первичную и вторичную поверхности вместе с Z-буфером. Эти три поверхности (Z-буфер это поверхность специального типа) всегда имеют одинаковые высоту и ширину. Эти параметры определяются текущим видеорежимом, поэтому важно, чтобы требуемый видеорежим был активирован до создания поверхностей.

Функция InstallPalette() используется для создания палитры и ее присоединения к первичной и вторичной поверхностям. Она извлекает палитру из файла BMP. Имя файла BMP должно быть сначала получено функцией UsePalette().

Затем вызывается функция CreateDevice() для создания и настройки устройства Direct3D.

После выполнения всех описанных действий создается корневой фрейм (используется указатель scene), и вызывается функция CreateScene(). Вы должны помнить функцию CreateScene() на которой сосредотачивалось наше изучение в предыдущих главах.



Содержание раздела