IDirect3D9::CreateDevice

ディスプレイ アダプターを表すデバイスを作成します。

HRESULT 
CreateDevice(
  UINT Adapter,
  D3DDEVTYPE DeviceType,
  HWND hFocusWindow,
  DWORD BehaviorFlags,
  D3DPRESENT_PARAMETERS * pPresentationParameters,
  IDirect3DDevice9 ** ppReturnedDeviceInterface
);

パラメータ

  • Adapter
    クエリするディスプレイ アダプターを示す序数。D3DADAPTER_DEFAULT は常にプライマリ ディスプレイ アダプターです。
  • DeviceType
    D3DDEVTYPE 列挙型のメンバー。目的のデバイス タイプを指定します。目的のデバイス タイプが使用できない場合、メソッドは失敗します。
  • hFocusWindow
    アプリケーションでフォアグラウンド モードからバックグラウンド モードに切り替えるときに、フォーカス ウィンドウは Direct3D に警告を通知します。「解説」を参照してください。
    • フルスクリーン モードの場合、指定されたウィンドウは最上位ウィンドウである必要があります。
    • ウィンドウ表示モードの場合、pPresentationParameters の hDeviceWindow メンバーを NULL 以外の有効な値に設定した場合のみ、このパラメーターに NULL を指定できます。
  • BehaviorFlags
    デバイスの作成を制御する 1 つ以上のオプションの組み合わせ。詳細については、「D3DCREATE」を参照してください。
  • pPresentationParameters
    D3DPRESENT_PARAMETERS 構造体へのポインターです。作成するデバイスのプレゼンテーション パラメーターを記述します。BehaviorFlags に D3DCREATE_ADAPTERGROUP_DEVICE を指定した場合、pPresentationParameters は配列です。存在するヘッド数に関係なく、1 つの深度/ステンシル サーフェスが自動的に作成されます。 Windows 2000 および Windows XP の場合、フルスクリーン デバイス ディスプレイのリフレッシュ レートは以下の順に設定されます。
  1. ユーザーが指定したゼロ以外の ForcedRefreshRate レジストリ キーです (デバイスでサポートされる場合)。
  2. プレゼンテーション パラメーターのアプリケーションで指定されたゼロ以外のリフレッシュ レート値です。
  3. 最新のデスクトップ モードのリフレッシュ レートです (デバイスでサポートされる場合)。
  4. 75 Hz (デバイスでサポートされる場合)。
  5. 60 Hz (デバイスでサポートされる場合)。
  6. デバイスの既定値。
    サポートされないリフレッシュ レートは、それ以下の直近のサポートされるリフレッシュ レートに既定で設定されます。たとえば、アプリケーションで 63 Hz が指定された場合、60 Hz が使用されます。57 Hz 以下のリフレッシュ レートはサポートされていません。 pPresentationParameters は、入力および出力パラメーターです。このメソッドを呼び出すと、以下のように複数のメンバーが変更される可能性があります。
  • メソッドが呼び出される前に、BackBufferCount、BackBufferWidth、および BackBufferHeight が 0 の場合、これらはメソッドが返すときに変更されます。
  • メソッドが呼び出される前に、BackBufferFormat が D3DFMT_UNKNOWN である場合、これはメソッドが返すときに変更されます。

ppReturnedDeviceInterface

  • 返された IDirect3DDevice9 インターフェイスへのポインターのアドレス。作成されたデバイスを示します。

戻り値

メソッドが成功した場合は、D3D_OK を返します。失敗した場合は、次の戻り値のいずれかを返します。D3DERR_DEVICELOST、D3DERR_INVALIDCALL、D3DERR_NOTAVAILABLE、D3DERR_OUTOFVIDEOMEMORY。

解説 

このメソッドは、必要な表示モード (またはウィンドウ表示モード) が設定され、適切なバック バッファーが割り当てられた、十分に動作するデバイス インターフェイスを返します。レンダリングの開始に必要なことは、深度バッファーを作成して設定することだけです (D3DPRESENT_PARAMETERS の EnableAutoDepthStencil メンバーが FALSE である場合)。

Direct3D デバイスを作成するときは、次の 2 種類のウィンドウ パラメーターを指定します。フォーカス ウィンドウ (hFocusWindow) およびデバイス ウィンドウ (D3DPRESENT_PARAMETERS の hDeviceWindow)。各ウィンドウの目的は以下のとおりです。

  • フォーカス ウィンドウは、フォアグラウンド モードからバックグラウンド モードへの切り替え時に (Alt + Tab キー、マウス クリック、または他の方法による)、Direct3D に警告を通知します。アプリケーションで作成される各デバイスにより 1 つのフォーカス ウィンドウが共有されます。
  • 画面上のバック バッファーの位置とサイズは、デバイス ウィンドウによって決定されます。これは、IDirect3DDevice9::Present の際にバック バッファーの内容がフロント バッファーにコピーされるとき、Direct3D によって使用されます。

WM_CREATE の処理中にこのメソッドを実行してはなりません。WM_CREATE の処理中に、アプリケーションでウィンドウ ハンドルを Direct3D に渡してはなりません。 デバイスを作成、解放、またはリセットする呼び出しは、フォーカス ウィンドウのウィンドウ プロシージャと同じスレッドを使用して実行する必要があります。

D3DCREATE_HARDWARE_VERTEXPROCESSING、D3DCREATE_MIXED_VERTEXPROCESSING、および D3DCREATE_SOFTWARE_VERTEXPROCESSING は相互に排他的なフラグであり、このメソッドを呼び出すときにこれらの頂点処理フラグの少なくとも 1 つを指定する必要があります。

デバイスの一部として作成されたバック バッファーは、プレゼンテーション パラメーターに D3DPRESENTFLAG_LOCKABLE_BACKBUFFER を指定した場合のみロック可能です。(マルチサンプリングされた バック バッファーおよび深度サーフェスをロックすることはできません)。

このメソッドを使用してデバイスを作成したスレッドから、IDirect3DDevice9::ResetIUnknown、および IDirect3DDevice9::TestCooperativeLevel の各メソッドを呼び出す必要があります。

D3DFMT_UNKNOWN は、IDirect3D9::CreateDeviceIDirect3DDevice9::Reset、および IDirect3DDevice9::CreateAdditionalSwapChain を呼び出す際、ウィンドウ表示モードのバック バッファー フォーマットに対して指定できます。つまり、ウィンドウ表示モードの IDirect3D9::CreateDevice を呼び出す前に、現在のデスクトップ フォーマットをクエリする必要はありません。フルスクリーン モードの場合、バック バッファー フォーマットを指定する必要があります。

0x0 サイズのウィンドウでデバイスを作成しようとすると、IDirect3D9::CreateDevice は失敗します。

要件

ヘッダー: D3D9.h 宣言

ライブラリ: D3D9.lib 内容

関連項目

Direct3DCreate9, D3DDEVICE_CREATION_PARAMETERS, IDirect3DDevice9::Reset, マルチヘッド (Direct3D 9)