Platform SDK: DirectX

ステップ 2.3 : Direct3D を初期化する

[C++]

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

[Visual Basic]

アプリケーションがシーンのレンダリングと表示に必要とするサーフェスを作成すると、オブジェクトを作成して、Direct3D オブジェクトの初期化を開始することができる。このオブジェクトは、シーンのレンダリングに必要なすべてのオブジェクトを作成するために使用する。Direct3D7 オブジェクトは、DirectDraw7.GetDirect3D を呼び出して作成する。サンプル Triangle の次のコードが、このタスクを実行する。

Sub InitD3D()
Dim d3d As Direct3D7
Dim ddsd As DDSURFACEDESC2
        
' DirectDraw7 オブジェクトから
' Direct3D7 クラスへの参照を取得する。
Set d3d = g_dd.GetDirect3D

Direct3D7 オブジェクトを作成したら、レンダリング デバイスを作成して、Direct3D7.CreateDevice メソッドを呼び出す必要がある。CreateDevice メソッドは、目的のデバイスのグローバル ユニーク識別子 (GUID) と、デバイスがレンダリングする DirectDrawSurface7 オブジェクト、g_ddsBackBuffer を受け取る。このサーフェスは、DDSCAPS_3DDEVICE 能力を使って 3D デバイスとして作成しなければならない。

チュートリアルでは、GUID をコード中に書き込んで使用しているが、実際のアプリケーションでは、デバイスを列挙して GUID を取得する必要がある。デバイスの列挙については、「Direct3D デバイスの列挙」を参照すること。

(サンプル Triangle では、デバイスの作成前にディスプレイ モードをチェックしている。ディスプレイがパレット モードに設定されている場合、コードは終了する。関連するパレットを持たないパレット サーフェスを作成しようとすると、CreateDevice メソッドの失敗を引き起こすからである。これは、コードを簡単にするするためであり、実際のアプリケーションでは、レンダリング ターゲット サーフェスを作成し、パレットをアタッチするか、ディスプレイ モードを 16 ビット カラー以上に設定するようユーザーに要求する必要がある)。

サンプル Triangle の次のコードによって、ディスプレイ モードをチェックする。

g_dd.GetDisplayMode ddsd
    
If ddsd.ddpfPixelFormat.lRGBBitCount <= 8 Then
MsgBox "このアプリケーションでは、" & _
"16 ビット未満のスクリーン ディスプレイ モードをサポートしていない。"
End
End If

サンプル Triangle では次にレンダリング デバイスを作成する。

Set g_d3dDevice = d3d.CreateDevice("IID_IDirect3DHALDevice", g_ddsBackBuffer)

Direct3D7.CreateDevice の呼び出しが失敗する原因はさまざまである。最もよく見られる原因は、プライマリ ディスプレイ デバイスが 3D 機能をサポートしない場合である。ほかの可能性として、表示ハードウェアが、現在のディスプレイ モードではレンダリングができないという場合がある。これらの可能性をデバイス列挙の際にチェックしておく必要がある。コードを簡単にするため、サンプル Triangle では、ハードウェア デバイスが作成できない場合、ソフトウェア レンダリング デバイスの作成を試みることにしている。

 :  CreateDevice メソッドは DirectDrawSurface7 オブジェクトを受け付けるが、DirectDraw サーフェス オブジェクトとは別のデバイス オブジェクトを作成する。デバイスは、レンダリング ターゲットとして DirectDraw サーフェスを使用する。

デバイスを作成すると、「ステップ 2.4 : ビューポートを準備する」で説明するように、ビューポート オブジェクトを作成して、デバイスに割り当てることができるようになる。