ちょっと間が空いたけど、今回はDirect3Dの初期化と解放です。ここも定型処理だね。今回使うのはDirect3Dのデバイスとオブジェクト、Direct3DXのスプライトとフォントです。ちなみにDirect3DXはDirect3Dのラッパーです。
将来的にDirectXのバージョンが変わる可能性を考慮して(もう新しいの出てるけど)、クラスは2つに分けます。CGraphicisBaseとCGraphicsです。CGraphicisBaseにはDirectXに依存する処理を入れておき、CGraphicisに継承させます。いざ環境が変わったらCGraphicisBaseだけ差し替えれば動く、という感じにします。クラス名はCGraphicisBase90cみたいにバージョン入れた方がわかりやすいかもね。
しかし今回もDirectX8時代のソースを基に組んでるけど、細かい所が色々変わってるね。同じ名前なのにクラスがオーバーロードする訳でもなく、別物になってたりするし。ゲイツめ…
//--------------------------------------------------------- // 初期化 BOOL CGraphicsBase::Init(HWND hWnd) { // 表示系初期化 if (InitD3D(hWnd)==E_FAIL) { MessageBox(NULL, "Direct3Dの初期化に失敗しました", "CGraphicsBase::Init", MB_OK); return E_FAIL; } // スプライトオブジェクトの作成 D3DXCreateSprite(D3Device, &D3Sprite); // フォント初期化 InitFont(&D3DebugFont); return S_OK; } //--------------------------------------------------------- // Direct3D初期化 BOOL CGraphicsBase::InitD3D(HWND hWnd) { D3DPRESENT_PARAMETERS d3dpp; D3DDISPLAYMODE d3ddm; // Direct3Dオブジェクトの作成 if (NULL==(D3D=Direct3DCreate9(D3D_SDK_VERSION))) { MessageBox(NULL, "Direct3Dオブジェクトの生成に失敗しました", "CGraphicsBase::InitD3D", MB_OK); return E_FAIL; } // 現在のディスプレイモードを検出する if (FAILED(D3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm))) { MessageBox(NULL, "ディスプレイモードの検出に失敗しました", "CGraphicsBase::InitD3D", MB_OK); return E_FAIL; } // 3Dアプリケーションの動作を指定する ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.BackBufferWidth=640; d3dpp.BackBufferHeight=480; d3dpp.Windowed=System->ScreenMode; // フルスクリーン:FALSE d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat=d3ddm.Format; // Direct3Dデバイスの作成 if (FAILED(D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &D3Device))) { MessageBox(NULL, "Direct3Dデバイスの生成に失敗しました", "CGraphicsBase::InitD3D", MB_OK); return E_FAIL; } return S_OK; } //--------------------------------------------------------- // フォント初期化 void CGraphicsBase::InitFont(LPD3DXFONT *D3Font) { // テキスト設定 D3DXFONT_DESCA FontDesc={ 32, // 高さ 0, // 幅 0, // 太さ 0, // ミップレベル FALSE, // イタリック SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, NULL, }; // フォントオブジェクト作成 D3DXCreateFontIndirect(D3Device, &FontDesc, D3Font); } //--------------------------------------------------------- // Direct3D解放 void CGraphicsBase::TermD3D() { // フォント解放 if (D3DebugFont!=NULL) { D3DebugFont->Release(); } // スプライト解放 if (D3Sprite!=NULL) { D3Sprite->Release(); } // Direct3Dデバイス解放 if (D3Device!=NULL) { D3Device->Release(); } // Direct3Dオブジェクト解放 if (D3D!=NULL) { D3D->Release(); } }