IDirect3D9::CreateDevice メソッド
IDirect3D9::CreateDevice メソッド
ディスプレイ アダプタを表すためのデバイスを作成する。
構文
HRESULT CreateDevice(
UINT Adapter,
D3DDEVTYPE DeviceType,
HWND hFocusWindow,
DWORD BehaviorFlags,
D3DPRESENT_PARAMETERS *pPresentationParameters,
IDirect3DDevice9** ppReturnedDeviceInterface
);
パラメータ
Adapter
[in] ディスプレイ アダプタを示す序数。D3DADAPTER_DEFAULT は常にプライマリ ディスプレイ アダプタである。DeviceType
[in] D3DDEVTYPE 列挙型のメンバ。目的のデバイス タイプを識別する。目的のデバイス タイプが利用できない場合、このメソッドは失敗する。hFocusWindow
[in] この Microsoft® Direct3D® デバイスでフォーカスを設定するウィンドウ ハンドル。指定するウィンドウは、フルスクリーンの最上位ウィンドウでなければならない。BehaviorFlags
[in] デバイス作成を制御する 1 つまたは複数のオプションの組み合わせ。詳細については、「D3DCREATE」を参照すること。pPresentationParameters
[in, out] D3DPRESENT_PARAMETERS 構造体へのポインタ。作成するデバイスのプレゼンテーション パラメータが記述されている。Microsoft Windows® 2000 および Windows XP の場合、フルスクリーン デバイスのディスプレイ リフレッシュ レートは、次の順序で設定される。
- ユーザー定義のゼロではない ForcedRefreshRate レジストリ キー (デバイスがサポートする場合)
- プレゼンテーション パラメータにアプリケーションが指定したゼロではないリフレッシュ レート値
- 最新のデスクトップ モードのリフレッシュ レート (デバイスがサポートする場合)
- 75 Hz (デバイスがサポートする場合)
- 60 Hz (デバイスがサポートする場合)
- デバイスのデフォルト。
サポートされていないリフレッシュ レートは、それより小さいサポートされている最大のリフレッシュ レートに置き換えられる。たとえば、アプリケーションで 63 Hz を指定した場合には、60 Hz が使われる。57 Hz より小さいリフレッシュ レートはサポートされない。
このメソッドを呼び出すと、D3DPRESENT_PARAMETERS の複数のメンバの値が変わる。
- ウィンドウ モードおよびフルスクリーン モードについて、BackBufferCount、BackBufferWidth、および BackBufferHeight = 0。
- ウィンドウ モードのみについて、BackBufferFormat = D3DFMT_UNKNOWN。フルスクリーン モードの場合はフォーマットを指定する必要がある。
D3DCREATE_ADAPTERGROUP_DEVICE を設定した場合、pPresentationParameters は配列である。存在するヘッドの数にかかわらず、1 つの深度/ステンシル サーフェイスのみが自動的に作成される。
ppReturnedDeviceInterface
[out, retval] 返される IDirect3DDevice9 インターフェイスへのポインタのアドレス。作成されたデバイスを表す。
戻り値
成功した場合は、D3D_OK を返す。
失敗した場合は、次のいずれかの値を返す。
D3DERR_INVALIDCALL | メソッドの呼び出しが無効である。たとえば、メソッドのパラメータに無効な値が設定されている場合などである。 |
D3DERR_NOTAVAILABLE | このデバイスは、問い合わせたテクニックをサポートしていない。 |
D3DERR_OUTOFVIDEOMEMORY | Direct3D が処理を行うのに十分なディスプレイ メモリがない。 |
注意
このメソッドからは、要求したディスプレイ モード (またはウィンドウ) に設定されて、適切なバック バッファが割り当てられた、完全に動作するデバイス インターフェイスが返る。アプリケーションは、必要に応じて深度バッファを作成して設定するだけでよい (D3DPRESENT_PARAMETERS の EnableAutoDepthStencil が FALSE であると想定する)。
このメソッドは、WM_CREATE の処理中に実行すべきではない。アプリケーションは、WM_CREATE の処理中に Direct3D にウィンドウ ハンドルを渡してはならない。デバイスの作成・解放・リセットのための呼び出しは、フォーカス ウィンドウのウィンドウ プロシージャと同じスレッドを使って実行する必要がある。
D3DCREATE_HARDWARE_VERTEXPROCESSING、D3DCREATE_MIXED_VERTEXPROCESSING、D3DCREATE_SOFTWARE_VERTEXPROCESSING は相互に排他的なフラグであり、このメソッドを呼び出すときは、これらの頂点処理フラグの少なくとも 1 つを必ず指定しなければならない。
デバイスの一部として作成されたバック バッファは、プレゼンテーション パラメータで D3DPRESENTFLAG_LOCKABLE_BACKBUFFER が指定されている場合にのみロック可能である。マルチサンプル バック バッファおよび深度サーフェイスはロックできない。
IDirect3DDevice9::Reset、IUnknown::Release、IDirect3DDevice9::TestCooperativeLevel メソッドは、このメソッドを使ってデバイスを作成したスレッドと同じスレッドから呼び出さなければならない。
ウィンドウ モードのバック バッファ フォーマットに対しては、IDirect3D9::CreateDevice、IDirect3DDevice9::Reset、IDirect3DDevice9::CreateAdditionalSwapChain の呼び出しで D3DFMT_UNKNOWN を指定できる。つまり、アプリケーションでは、ウィンドウ モードに対する IDirect3D9::CreateDevice を呼び出す前に、現在のデスクトップ フォーマットを問い合わせる必要はない。フルスクリーン モードに対しては、バック バッファ フォーマットを指定する必要がある。
参照
Direct3DCreate9、D3DDEVICE_CREATION_PARAMETERS、IDirect3DDevice9::Reset、マルチヘッド