MFC架构下的DirectX8
2010-05-25 20:36:05 来源:WEB开发网第二章 初始化DirectX8
(DX8MFC1)
本例将以第一章的MFC框架为基础对CFrameWin类进行扩展。主要加入了DrawScene()、InitDirect3D(HWND hwnd)和ShutdownDirect3D()三个函数。
InitDirect3D(HWND hwnd)函数对Direct3D进行初始化:
HRESULT CFrameWin::InitDirect3D(HWND hwnd)
{
pID3D = Direct3DCreate8(D3D_SDK_VERSION);
HRESULT hr;
do
{
// we need the display mode so we can get
// the properties of our back buffer
D3DDISPLAYMODE d3ddm;
hr = pID3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);
if(FAILED(hr))
break;
D3DPRESENT_PARAMETERS present;
ZeroMemory(&present, sizeof(present));
present.SwapEffect = D3DSWAPEFFECT_COPY;
present.Windowed = TRUE;
present.BackBufferFormat = d3ddm.Format;
hr = pID3D->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hwnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&present,
&pID3DDevice);
if(FAILED(hr))
break;
// we do our own coloring, so disable lighting
hr = pID3DDevice->SetRenderState(D3DRS_LIGHTING,
FALSE);
} while(0);
return hr;
}
IDirect3D是我们首先要用到的接口,你可以这样写:
IDirect3D8 * pID3D = Direct3Dcreate8(D3D_SDK_VERSION);
在你使用pID3D以前,请检查pID3D是否为非空。
你下一步通常是创建D3D设备,但在创建D3D设备之前你要调用GetAdapterDisplayMode方法取得必须的信息:
D3DDISPLAYMODE d3ddm;
pID3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);
接下来是取得当前显示模式参数。下面的参数是Surface格式。你可以用这些参数来创建一个D3DPRESENT_PARAMETERS结构:
D3DPRESENT_PARAMETERS present;
ZeroMemory(&present, sizeof(present));
present.SwapEffect = D3DSWAPEFFECT_COPY;
present.Windowed = TRUE;
present.BackBufferFormat = d3ddm.Format;
D3DPRESENT_PARAMETERS描述了显示器Surface的信息,交换机制的类型,应用程序是窗口的还是全屏模式等信息。
在本例中,Surface是以拷贝方法代替页面翻转的,因为它是一个窗口模式的应用程序。把后台表面设置成与当前显示模式相匹配的格式,一个准备显示的Surface可以Draw在后台表面上。
现在你可以创建一个IDirect3DDevice8接口了:
pID3D->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hwnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&present,
&pID3DDevice);
更多精彩
赞助商链接