Platform SDK: DirectX

ステップ 6 : シャットダウン

[Visual Basic]

ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「Direct3D 直接モード Visual Basic チュートリアル」を参照すること。

[C++]

アプリケーションは、実行中のある時点で、シャット ダウンしなければならない。DirectX アプリケーションをシャット ダウンするとは、アプリケーション ウィンドウを破壊するだけでなく、アプリケーションが使用しているすべての DirectX オブジェクトの割り当てを解除し、オブジェクトへのポインタを無効にすることを意味する。Triangle では、WM_DESTROY メッセージを受け取ったときに、Cleanup3Denvironment というアプリケーション定義関数を呼び出して、このクリーンアップ (整理作業) を行っている。

HRESULT Cleanup3DEnvironment()
{
    // シーンに作成されたすべてのオブジェクトのクリーンアップを行う。
    App_DeleteDeviceObjects( g_pd3dDevice );
 
    // アプリケーションが使用していた DDraw とD3D のオブジェクトを解放する。
    if( g_pD3D )           g_pD3D->Release();
    if( g_pddsBackBuffer ) g_pddsBackBuffer->Release();
    if( g_pddsPrimary )    g_pddsPrimary->Release();
 
    // D3DDEVICE を解放する際に安全チェックを行う。RefCount はゼロのはずである。
    if( g_pd3dDevice )
        if( 0 < g_pd3dDevice->Release() )
            return E_FAIL;
 
    // DDRAW を解放する際に安全チェックを行う。RefCount はゼロのはずである。
    if( g_pDD )
        if( 0 < g_pDD->Release() )
            return E_FAIL;
 
    g_pd3dDevice     = NULL;
    g_pD3D           = NULL;
    g_pddsBackBuffer = NULL;
    g_pddsPrimary    = NULL;
    g_pDD            = NULL;
 
    return S_OK;
}

上記の関数は、各オブジェクトに対して IUnknown::Release メソッドを呼び出して、アプリケーションが使用している DirectX オブジェクトの割り当てを解除している。このチュートリアルは COM 規則に従っているため、ほとんどのオブジェクトに対する参照カウントはゼロのはずで、自動的にメモリから削除される。

シャット ダウンするとき以外にも、ユーザーがデスクトップ解像度や色深度を変更したときなどの通常の実行時に、使用中の DirectX オブジェクトを破棄して再作成する必要が生じることもある。そのため、必要な場合に呼び出すことができるよう、アプリケーションのクリーンアップ コードを 1 箇所に維持しておくと便利である。