当窗口被创建以后,CreateDevice示例工程通过在WinMain中调用InitD3D自定义函数,展示了Direct3D的初始化过程。当你创建好一个应用程序窗口之后,你就已经准备好初始化用来渲染场景的那些Direct3D对象了。这个过程包括:创建对象,设置显示参数(presentation parameters)最终创建Direct3D设备。
在创建一个Direct3D对象之后,使用IDirect3D9::CreateDevice方法来创建一个设备,并且用来枚举设备,类型,模式等等。
if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
return E_FAIL;
需要传递给Direct3DCreate9函数的唯一参数总应该是D3D_SDK_VERSION。这样可以通知Direct3D包含了正确的头文件。它的值是不断递增的,一旦头文件或者其它发生改变都需要重新生成应用程序。如果版本不匹配,Direct3DCreate9函数调用将会失败。
通过填充D3DPRESENT_PARAMETERS的各个字段,你可以指定你的3D应用程序的各种行为。CreateDevice示例工程设置Windowed字段为TRUE,SwapEffect字段为D3DSWAPEFFECT_DESCARD,BackBufferFormat字段为D3DFMT_UNKNOWN。
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
最后一步使用IDirect3D9::CreateDevice方法来创建Direct3D设备,如下所示:
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice ) ) )
前面的代码片段使用D3DADAPTER_DEFAULT标志,表示使用默认的显示适配器(显卡)来创建设备。在大多数情况下,系统仅仅有一块显示适配器,除非安装有多块显卡。指定DeviceType字段为D3DDEVTYPE_HAL,表明你要使用硬件设备而不是软件设备。这段代码使用D3DCREATE_SOFTWARE_VERTEXPROCESSING来告诉系统使用软件顶点处理。请注意这里,如果你使用D3DCREATE_HARDWARE_VERTEXPROCESSING来告知系统使用硬件顶点处理,你将在那些能够支持硬件顶点处理的显卡上获得很大的性能提升。
到现在为止,Direct3D已经被初始化了,下一步是要确保你有一种机制来处理系统消息。详见第三步:处理系统消息。