//-------------------------------------------------------------------
class CD3DFramework7 { //程序框架类别的内部变量 HWND //窗口对象 BOOL
m_bIsFullscreen;
m_hWnd;
//全屏幕
BOOL
m_bIsStereo;
//立体检视模式 DWORD m_dwRenderWidth; //绘制目标物的尺寸
DWORD m_dwRenderHeight; //
RECT
m_rcScreenRect; //窗口的屏幕矩形区域
LPDIRECTDRAW7 m_pDD;
//DirectDraw物件 LPDIRECTDRAWSURFACE7 m_pddsFrontBuffer; //主绘图页 LPDIRECTDRAWSURFACE7 m_pddsBackBuffer;
//后缓冲区绘图
页 LPDIRECTDRAWSURFACE7 m_pddsBackBufferLeft; //立体模式使用 DWORD
m_dwDeviceMemType;
DDPIXELFORMAT
m_ddpfBackBufferPixelFormat;
//程序框架类别的内部函式
HRESULT CreateFullscreenBuffers(DDSURFACEDESC2*); HRESULT CreateWindowedBuffers(); HRESULT CreateDirectDraw(GUID*,DWORD);
HRESULT CreateEnvironment
(GUID*,GUID*,DDSURFACEDESC2*,DWORD); public: // DirectX物件的存取函式 LPDIRECTDRAW7 GetDirectDraw()
{return m_pDD;}
//
};
LPDIRECTDRAWSURFACE7 GetFrontBuffer() {return m_pddsFrontBuffer;}
LPDIRECTDRAWSURFACE7 GetBackBuffer() {return m_pddsBackBuffer;}
LPDIRECTDRAWSURFACE7 GetRenderSurface() {return m_pddsBackBuffer;}
LPDIRECTDRAWSURFACE7 GetRenderSurfaceLeft() {return m_pddsBackBufferLeft;} //绘制目标物的尺寸 DWORD DWORD
GetRenderWidth() GetRenderHeight()
{return m_dwRenderWidth;} {return m_dwRenderHeight;} //有助于绘制的函式
HRESULT RestoreSurfaces(); HRESULT ShowFrame();
HRESULT FlipToGDISurface(BOOL bDrawFrame =FALSE); //管理屏幕和检视端口范围的函式 BOOL BOOL VOID //建立程序框架
HRESULT Initialize(HWND hWnd,GUID*pDriverGUID, GUID*pDeviceGUID,DDSURFACEDESC2*pddsd, DWORD dwFlags);
HRESULT DestroyObjects();
CD3DFramework7(); ~CD3DFramework7();
IsFullscreen() IsStereo()
{return m_bIsFullscreen;} {return m_bIsStereo;}
Move(INT x,INT y);
在呼叫D3DEnum_EnumerateDevices和D3DEnum_SelectDefaultDevice后,
CD3DApplication::Create会呼叫CD3DApplication::Initialize3DEnvironment。这个成员函
式会初始化程序框架并且设定为全屏幕或窗口模式。 CD3DApplication::Initialize3DEnvironment函式的定义如下:
//-------------------------------------------------------------------
//名称:Initialize3DEnvironment //说明:将范例程序框架初始化,然后呼叫 // // // ---
HRESULT CD3DApplication::Initialize3DEnvironment() { {
m_pDD =m_pFramework->GetDirectDraw(); m_pD3D =m_pFramework->GetDirect3D(); m_pd3dDevice =m_pFramework->GetD3DDevice();
m_pddsRenderTarget =m_pFramework->GetRenderSurface(); m_pddsRenderTargetLeft =m_pFramework->GetRenderSurfaceLeftm_ddsdRenderTarget.dwSize =sizeof(m_ddsdRenderTarget); m_pddsRenderTarget->GetSurfaceDesc(&m_ddsdRenderTarget); //让程序执行其启始(startup)程序,以建立3D场景 //将Direct3D程序框架初始化
if(SUCCEEDED(hr =m_pFramework->Initialize(m_hWnd, &m_pDeviceInfo->ddsdFullscreenMode, dwFrameworkFlags))) HRESULT hr;
DWORD dwFrameworkFlags =0L; dwFrameworkFlags|= dwFrameworkFlags|= dwFrameworkFlags|=
(!m_pDeviceInfo->bWindowed ?D3DFW_FULLSCREEN :0L); (m_pDeviceInfo->bStereo ?D3DFW_STEREO :0L); (m_bAppUseZBuffer ?D3DFW_ZBUFFER :0L);
程序指定函式来初始化特定装置对象。 本程序架构中可以处理初始化过程中可能 发生的任何错误。
//----------------------------------------------------------------
m_pDeviceInfo->pDriverGUID, m_pDeviceInfo->pDeviceGUID,
();
}
if(SUCCEEDED(hr =InitDeviceObjects())) return S_OK; else { }
//假如您走到这,表示第一遍的初始化流程失败了。如果 //原先是用硬件装置的话,改试软件扫描装置再试一次。 //
if(m_pDeviceInfo->bHardware) { }
return hr;
//Try again with a software rasterizer. DisplayFrameworkError
D3DEnum_SelectDefaultDevice(&m_pDeviceInfo, D3DENUM_SOFTWAREONLY);
return Initialize3DEnvironment();
DeleteDeviceObjects(); }
m_pFramework->DestroyObjects();
(hr,MSGWARN_SWITCHEDTOSOFTWARE);
CD3DFramework7::Initialize成员函式会设定一些程序框架成员变量,并呼叫
CD3DFramework7::CreateEnvironment来建立游戏或应用程序所需的基本DirectX对象。
//-------------------------------------------------------------------
//名称:Initialize
//说明:建立程序框架的内部对象
//-------------------------------------------------------------------
HRESULT CD3DFramework7::Initialize(HWND hWnd,GUID*pDriverGUID, GUID*pDeviceGUID, DDSURFACEDESC2*pMode, DWORD dwFlags) {
HRESULT hr;
//检查参数。只有在窗口模式下,NULL模式才是有效的 if((NULL==hWnd)||(NULL==pDeviceGUID)||
}
(NULL==pMode &&(dwFlags&D3DFW_FULLSCREEN))) return E_INVALIDARG;
//建立窗口/全屏幕模式下的状态 m_hWnd =hWnd; m_bIsStereo =FALSE;
m_bIsFullscreen =(dwFlags &D3DFW_FULLSCREEN)?TRUE :FALSE; //提供立体模式检视(stereoscopic viewing)给能够 //支持的全屏幕模式
if((dwFlags &D3DFW_STEREO)&&(dwFlags
if(pMode->ddsCaps.dwCaps2
m_bIsStereo =TRUE;
&D3DFW_FULLSCREEN))
&DDSCAPS2_STEREOSURFACELEFT)
//建立D3D绘制环境 (绘图页、装置、检视端口等等)。
if(FAILED(hr =CreateEnvironment(pDriverGUID,pDeviceGUID, pMode,dwFlags))) { }
return S_OK;
DestroyObjects(); return hr;
CD3DFramework7::CreateEnvironment成员函式可以让您在程序框架中建立内部对象。它首先会选择您已挑定的显示内存型态。如果您是用HAL装置在执行,请选择视讯内存;否则的话,使用系统主存储器。视讯内存较快,但是如果系统上没有加速卡时您只得选择系统内存。
然后您可以呼叫程序来建立主要DirectDraw对象及全屏幕缓冲区(如果您在全屏幕模式)或是窗口缓冲区(如果您在窗口模式)。CreateEnvironment的完整版本也会建立Direct3D对象、Direct3D装置和深度缓冲区。
//-------------------------------------------------------------------
//名称:CreateEnvironment //说明:建立程序框架的内部对象
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库设定Direct 3D应用程序中的DirectDraw(5)在线全文阅读。
相关推荐: