Platform SDK: DirectX |
ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「Direct3D 直接モード Visual Basic チュートリアル」を参照すること。
アプリケーション ウィンドウの作成後、最初に作成するオブジェクトは、DirectDraw オブジェクトである。これは、アプリケーションの協調レベルを設定する場合や、表示やレンダリング デバイスのレンダリング ターゲットとして使用するサーフェスを作成する場合に必要となる。
サンプル Triangle は、次のコードに示すように、DirectDraw オブジェクトを作成し、アプリケーションの協調レベルを設定して、初期化の実行を開始する。
HRESULT Initialize3DEnvironment( HWND hWnd ) { HRESULT hr; hr = DirectDrawCreateEx( NULL, (VOID**)&g_pDD, IID_IDirectDraw7, NULL ); if( FAILED( hr ) ) return hr;
上記のコードでは、DirectDraw グローバル関数 DirectDrawCreateEx を呼び出して DirectDraw オブジェクトを作成している。最初のパラメータとして NULL を渡して、DirectDraw オブジェクトをアクティブなディスプレイ ドライバ用に作成するよう関数に要求する。3D 専用ハードウェアなどの、GDI をサポートしないハードウェアに対しては、最初のパラメータに、適切なドライバのグローバル ユニーク識別子 (GUID) を明示的に指定する必要がある。GUID は通常、列挙型から取得する。2 番目のパラメータはグローバル変数のアドレスで、DirectDrawCreateEx が DirectDraw オブジェクトに対する IDirectDraw7 インターフェイスのアドレスを設定する。最後のパラメータには NULL を設定して、新しいオブジェクトが COM 集約機能で使用されないことを示す。
サンプル コードは、引き続き、次のようにしてアプリケーションの協調レベルを設定する。
hr = g_pDD->SetCooperativeLevel( hWnd, DDSCL_NORMAL ); if( FAILED( hr ) ) return hr;
サンプルでは、IDirectDraw7::SetCooperativeLevel メソッドを呼び出して協調レベルを設定している。協調レベルを設定することで、アプリケーションでレンダリングをフルスクリーン モードまたはウィンドウのどちらで実行するかがシステムに通知される。(ハードウェアによってはウィンドウにレンダリングできない場合がある。そのようなハードウェアは、IDirectDraw7::GetCaps を呼び出してチェックしてみると、DDCAPS2_CANRENDERWINDOWED 能力フラグが設定されていない)。このコードでは、SetCooperativeLevel に渡される DDSCL_NORMAL フラグを第 2 パラメータに設定して、"標準" 協調レベルとも呼ばれるウィンドウ協調レベルを要求している。SetCooperativeLevel メソッドは、別のアプリケーションが排他モードでフルスクリーンを既に制御している場合には失敗することがある。
注 : DDSCL_FPUSETUP 協調レベル フラグを指定すると、パフォーマンスが向上する。この協調フラグ レベルの詳細については、「DirectDraw 協調レベルと FPU 精度」を参照すること。一般的な説明については、DirectDraw の「協調レベル」を参照すること。
DirectDraw オブジェクトを作成し、協調レベルを設定すると、レンダリングされるシーンを含み、表示に使用するサーフェスの準備が可能な状態になる。サンプル Triangle では、このタスクを「ステップ 2.2 : DirectDraw サーフェスをセットアップする」で説明する方法によって行う。