Microsoft DirectX 8.0 (C++) |
CreateDevice サンプル プロジェクトでは、ウィンドウの作成後、WinMain から呼び出されるアプリケーション定義関数 InitD3D で Microsoft® Direct3D® の初期化を実行する。アプリケーション ウィンドウを作成すると、シーンのレンダリングに使用する Direct3D オブジェクトの初期化を開始できる。この処理には、Direct3D オブジェクトの作成、プレゼンテーション パラメータの設定、および Direct3D デバイスの作成が含まれる。
Direct3D オブジェクトを作成した後、IDirect3D8::CreateDevice メソッドを使用して Direct3D デバイスを作成できる。また、Direct3D オブジェクトを使って、デバイス、タイプ、モードなどを列挙することもできる。次のサンプル コードでは、Direct3DCreate8 関数を使用して Direct3D オブジェクトを作成している。
if( NULL == ( g_pD3D = Direct3DCreate8( D3D_SDK_VERSION ) ) ) return E_FAIL;
Direct3DCreate8 に渡されるパラメータは、常に D3D_SDK_VERSION だけである。これによって、使用する正しいヘッダー ファイルが Direct3D に通知される。ヘッダーまたはほかの変更によりアプリケーションのリビルドが必要になるたびに、この値はインクリメントされる。バージョンが一致しない場合、Direct3DCreate8 は失敗する。
次のステップでは、IDirect3D8::GetAdapterDisplayMode メソッドを使用して現在のディスプレイ モードを検出する。次のサンプル コードにそれを示す。
D3DDISPLAYMODE d3ddm; if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) ) return E_FAIL;
Direct3D デバイスを作成するときは、D3DDISPLAYMODE 構造体の Format メンバが使用される。ウィンドウ モードで実行する場合は、アダプタの現在のモードと一致するバック バッファを作成するために Format メンバが使用される。
D3DPRESENT_PARAMETERS のフィールドに入力することによって、3D アプリケーションの動作を指定できる。CreateDevice サンプル プロジェクトでは、Windowed メンバに TRUE、SwapEffect メンバに D3DSWAPEFFECT_DISCARD、および BackBufferFormat メンバに d3ddm.Format を設定している。
D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = d3ddm.Format;
最後のステップは、次のサンプル コードに示されているように、IDirect3D8::CreateDevice メソッドを使って Direct3D デバイスを作成することである。
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice ) ) )
上記のサンプル コードでは、D3DADAPTER_DEFAULT フラグを使って、デフォルトのアダプタを指定してデバイスを作成している。システムに複数のグラフィックス ハードウェア カードがインストールされていない限り、ほとんどの場合、システムのアダプタは 1 つだけである。ハードウェア デバイスをソフトウェア デバイスよりも優先することを指定するには、DeviceType パラメータに D3DDEVTYPE_HAL を指定する。このサンプル コードでは、D3DCREATE_SOFTWARE_VERTEXPROCESSING を使って、ソフトウェア頂点処理を使用することをシステムに指示している。D3DCREATE_HARDWARE_VERTEXPROCESSING を指定してハードウェア頂点処理を使用することをシステムに指示した場合、ハードウェア頂点処理をサポートするビデオ カードではパフォーマンスが大幅に向上することに注意すること。
Direct3D が初期化されたので、次のステップでは、システム メッセージを処理するメカニズムを作成する。これについては、「ステップ 3 : システム メッセージの処理」で説明する。