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



         

Функция RMWin::CreateDevice()


Изменения, внесенные в класс RMWin, не ограничиваются добавлением новых переменных и функций. Кроме того, был изменен ряд функций, одна из которых— CreateDevice(). Функция CreateDevice() отвечает за создание нескольких ключевых элементов программ, использующих Direct3D. Версия CreateDevice() используемая в приложении MultiView представлена в листинге 9.6.

Листинг 9.6. Функция RMWin::CreateDevice()

BOOL RMWin::CreateDevice() { HRESULT r;

r = DirectDrawCreateClipper(0, &clipper, NULL); if (r != D3DRM_OK) { AfxMessageBox("DirectDrawCreateClipper() failed"); return FALSE; }

r = clipper->SetHWnd(NULL, m_hWnd); if (r != DD_OK) { AfxMessageBox("clipper->SetHWnd() failed"); return FALSE; }

RECT rect; ::GetClientRect(m_hWnd, &rect);

r = d3drm->CreateDeviceFromClipper(clipper, GetGUID(), rect.right, rect.bottom, &device); if (r != D3DRM_OK) { AfxMessageBox("CreateDeviceFromClipper() failed"); return FALSE; }

device->SetQuality(D3DRMRENDER_GOURAUD);

HDC hdc = ::GetDC(m_hWnd); int bpp = ::GetDeviceCaps(hdc, BITSPIXEL); ::ReleaseDC(m_hWnd, hdc);

switch (bpp) { case 1: device->SetShades(4); d3drm->SetDefaultTextureShades(4); device->SetDither(TRUE); break; case 8: // ... break; case 16: device->SetShades(32); d3drm->SetDefaultTextureColors(64); d3drm->SetDefaultTextureShades(32); device->SetDither(FALSE); break; case 24: case 32: device->SetShades(256); d3drm->SetDefaultTextureColors(64); d3drm->SetDefaultTextureShades(256); device->SetDither(FALSE); break; } d3drm->CreateFrame(NULL, &scene);

if (CreateScene() == FALSE) { AfxMessageBox("CreateScene() failed"); return FALSE; }

d3drm->CreateFrame(scene, &camera1); ConfigViewport(camera1, view1setting);

d3drm->CreateFrame(scene, &camera2); ConfigViewport(camera2, view2setting);

d3drm->CreateFrame(scene, &camera3); ConfigViewport(camera3, view3setting);

CreateViewports();

return TRUE; }

<


Содержание  Назад  Вперед