Platform SDK: DirectX |
ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「Direct3D 直接モード Visual Basic チュートリアル」を参照すること。
ウィンドウで実行される DirectX アプリケーションは、システムが送るすべての WM_SIZE メッセージに応答しなければならない。レンダリング ターゲット サーフェスは、通常、メモリの節約のために最小限に維持されている。その最小サイズは、通常、ウィンドウのクライアント領域のサイズとなる。ウィンドウ サイズが大きくなった場合、レンダリング ターゲット サーフェスと関連オブジェクトを破棄して、適切なサイズで再作成する必要が生じる。実際には、アプリケーションがこの処理を実行するのは、ウィンドウが大きくなった場合だけでよい。ウィンドウ サイズが小さくなった場合には、その程度に応じて、ビューポートを調節し、ブリットのサイズを縮小することにより対応できる。このチュートリアルでは、理解しやすくするため、WM_SIZE メッセージを受け取ると必ず使用しているオブジェクトを破棄して、再作成するようにしている。
. . . case WM_SIZE: // ウィンドウが使用可能かどうかの確認を行う。 // アクティブ フラグに対応する値を設定する。 if( SIZE_MAXHIDE==wParam || SIZE_MINIMIZED==wParam ) g_bActive = FALSE; else g_bActive = TRUE; // 新しいウィンドウ サイズにより、新しいバック バッファ サイズが必要になる。 // これを行う最も簡単な方法は、すべてを解放し、再作成することである。 // 注 : ウィンドウが大きくなりすぎた場合には、メモリ不足になり、 // 終了する必要が生じる可能性がある。この単純なアプリケーションは、 // エラー メッセージを表示しないで終了するが、 // 実際のアプリケーションでは、もっとうまく動作する必要がある。 if( g_bActive && g_bReady ) { g_bReady = FALSE; if( FAILED( Cleanup3DEnvironment() ) ) DestroyWindow( hWnd ); if( FAILED( Initialize3DEnvironment( hWnd ) ) ) DestroyWindow( hWnd ); g_bReady = TRUE; } break; . . .
上記のコードでは、グローバル変数を設定して、使用中の DirectX オブジェクトが無効化されていることを、コードのほかの部分に通知していることに注意する。さらに、このコードは、アプリケーションのシャット ダウン時にも呼び出されるアプリケーション定義関数 Cleanup3Denvironment を呼び出している。アプリケーションの終了については、「ステップ 6 : シャットダウン」で説明する。