Platform SDK: DirectX

Direct3D へのアクセス

[C++]

C++ で記述された Direct3D アプリケーションでは、起動時に、Direct3D の最新機能を利用するために IDirect3D7 インターフェイスへのポインタを取得しなければならない。以下の手順に従って、IDirect3D7 インターフェイスへのポインタを取得する。

IDirect3D7 インターフェイスへのポインタを取得するには

  1. DirectDrawCreateEx を呼び出して DirectDraw デバイスを作成する。アプリケーションでは、DirectDrawCreateEx 関数を使用して、IDirect3D7 をサポートする DirectDraw オブジェクトを作成しなければならない。DirectDrawCreate 関数で作成した DirectDraw オブジェクトは、IDirect3D7 インターフェイスをサポートしない。
  2. IUnknown::QueryInterface メソッドを呼び出して IDirect3D7 インターフェイスへのポインタを取得する。

次の図は、これらの手順を示し、その過程を従来のアプリケーションで必要なものに関連させている。

 :  この図に示すように、DirectDraw コンポーネントは 2 つの COM オブジェクトから構成されている。DirectDrawCreateEx 関数を呼び出して作成される、DirectDraw7 と呼ばれる最新のオブジェクトのみ、IDirect3D7 インターフェイスを公開する。DirectDraw7 オブジェクトは、従来の Direct3D インターフェイスは公開しない。従来の Direct3D が必要なアプリケーションでは、DirectDrawCreate メソッドを使用して DirectDraw オブジェクトを作成し、その後でそのインターフェイスを問い合わせなければならない。

次のコードは、DirectDraw7 オブジェクトの作成方法と、IDirect3D7 インターフェイスの問い合わせ方法を示す。

LPDIRECTDRAW7   lpDD;               // IDirectDraw7 インターフェイス。
LPDIRECT3D7     lpD3D;              // IDirect3D7 インターフェイス。
HRESULT hr;
 
// IDirect3D7 インターフェイスを取得する。
// 現在のディスプレイ ドライバを使用する。
hr = DirectDrawCreateEx (NULL, (void **)&lpDD, IID_IDirectDraw7, NULL); 
if (FAILED (hr))
{
    // エラー処理コード。
}
 
// D3D インターフェイスを取得する。
hr = lpDD->QueryInterface (IID_IDirect3D7, (void **)&lpD3D);
if (FAILED (hr))
{
    // エラー処理コード
}
[Visual Basic]

Visual Basic で記述された Direct3D アプリケーションでは、起動時に、Direct3D 機能を利用するために Direct3D7 クラスへの参照を取得しなければならない。以下の手順に従って参照を取得する。

Direct3D7 クラスへの参照を取得するには

  1. DirectX7.DirectDrawCreate を呼び出して DirectDraw7 クラス オブジェクトを作成する。
  2. DirectDraw7.GetDirect3D メソッドを呼び出して、Direct3D7 クラスへの DirectDraw オブジェクトの参照を取得する。

次の図は、これらの手順を示す。

次のコードは、DirectDraw7 クラス オブジェクトから Direct3D7 クラスを取得する方法を示す。

' Direct3D7 クラスへの参照を取得する。
'
' この例では、dx は DirectX7 クラスへの有効な参照である。
On Local Error Resume Next
Dim ddraw As DirectDraw7
Dim d3d As Direct3D7
 
' デフォルトの DirectDraw7 オブジェクトを作成する。
Set ddraw = dx.DirectDrawCreate("")
If (Err.Number <> DD_OK) Then
' エラー処理
End If
 
' DirectDraw7 オブジェクトから Direct3D7 参照を取得する。
Set d3d = ddraw.GetDirect3D
If (Err.Number <> DD_OK) Then
' エラー処理
End If