IDirect3D9::CreateDevice メソッド (d3d9.h)

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

構文

HRESULT CreateDevice(
  [in]          UINT                  Adapter,
  [in]          D3DDEVTYPE            DeviceType,
  [in]          HWND                  hFocusWindow,
  [in]          DWORD                 BehaviorFlags,
  [in, out]     D3DPRESENT_PARAMETERS *pPresentationParameters,
  [out, retval] IDirect3DDevice9      **ppReturnedDeviceInterface
);

パラメーター

[in] Adapter

型: UINT

ディスプレイ アダプターを表す序数。 D3DADAPTER_DEFAULT は常にプライマリ ディスプレイ アダプターです。

[in] DeviceType

種類: D3DDEVTYPE

目的のデバイスの種類を示す D3DDEVTYPE 列挙型のメンバー。 目的のデバイスの種類が使用できない場合、 メソッドは失敗します。

[in] hFocusWindow

種類: HWND

フォーカス ウィンドウでは、アプリケーションがフォアグラウンド モードからバックグラウンド モードに切り替わると、Direct3D にアラートが表示されます。 「解説」を参照してください。

  • 全画面表示モードの場合、指定するウィンドウは最上位のウィンドウである必要があります。
  • ウィンドウ モードの場合、pPresentationParameters の hDeviceWindow メンバーが有効な NULL 以外の値に設定されている場合にのみ、このパラメーターを NULL にすることができます。

[in] BehaviorFlags

種類: DWORD

デバイスの作成を制御する 1 つ以上のオプションの組み合わせ。 詳細については、「 D3DCREATE」を参照してください。

[in, out] pPresentationParameters

種類: D3DPRESENT_PARAMETERS*

作成するデバイスのプレゼンテーション パラメーターを記述する、 D3DPRESENT_PARAMETERS 構造体へのポインター。 BehaviorFlags で D3DCREATE_ADAPTERGROUP_DEVICEが指定されている場合、pPresentationParameters は配列です。 存在するヘッドの数に関係なく、1 つの深度/ステンシル サーフェスのみが自動的に作成されます。

Windows 2000 および Windows XP の場合、全画面表示デバイスの表示更新速度は次の順序で設定されます。

  1. デバイスでサポートされている場合、ユーザー指定の 0 以外の ForcedRefreshRate レジストリ キー。
  2. プレゼンテーション パラメーターのアプリケーション指定の 0 以外の更新レート値。
  3. デバイスでサポートされている場合は、最新のデスクトップの更新速度。
  4. デバイスでサポートされている場合は 75 ヘルツ。
  5. デバイスでサポートされている場合は 60 ヘルツ。
  6. デバイスの既定値。
サポートされていない更新レートは、既定でサポートされている最も近い更新レートの下に設定されます。 たとえば、アプリケーションで 63 ヘルツが指定されている場合、60 ヘルツが使用されます。 57 ヘルツ未満の更新レートはサポートされていません。

pPresentationParameters は、入力パラメーターと出力パラメーターの両方です。 このメソッドを呼び出すと、次のようないくつかのメンバーが変更される場合があります。

  • BackBufferCount、BackBufferWidth、および BackBufferHeight が 0 の場合は、メソッドが呼び出される前に、メソッドが返されるときに変更されます。
  • BackBufferFormat がメソッドを呼び出 す前にD3DFMT_UNKNOWN と等しい場合は、メソッドが返されるときに変更されます。

[out, retval] ppReturnedDeviceInterface

種類: IDirect3DDevice9**

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

戻り値

種類: HRESULT

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

注釈

このメソッドは、完全に動作するデバイス インターフェイスを返し、必要な表示モード (またはウィンドウ化) に設定し、適切なバック バッファーを使用して割り当てられます。 レンダリングを開始するには、アプリケーションで深度バッファーを作成して設定するだけで済みます (enableAutoDepthStencil がD3DPRESENT_PARAMETERSFALSE であると仮定します)。

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

  • フォーカス ウィンドウは、アプリケーションがフォアグラウンド モードからバックグラウンド モードに切り替えたときに Direct3D に通知します (Alt キーを押しながら Tab キーを押すか、マウスをクリックするか、またはその他の方法を使用)。 1 つのフォーカス ウィンドウは、アプリケーションによって作成された各デバイスによって共有されます。
  • デバイス ウィンドウは、画面上のバック バッファーの場所とサイズを決定します。 これは、バック バッファーの内容が Present の間にフロント バッファーにコピーされるときに Direct3D によって使用されます。
このメソッドは、WM_CREATEの処理中に実行しないでください。 アプリケーションは、WM_CREATEの処理中にウィンドウ ハンドルを Direct3D に渡すべきではありません。 デバイスを作成、解放、またはリセットするための呼び出しは、フォーカス ウィンドウのウィンドウ プロシージャと同じスレッドを使用して行う必要があります。

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

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

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

D3DFMT_UNKNOWNは、 CreateDeviceResetCreateAdditionalSwapChain を呼び出すときに、ウィンドウ モードのバック バッファー形式に指定できます。 つまり、ウィンドウ モードで CreateDevice を呼び出す前に、アプリケーションで現在のデスクトップ形式に対してクエリを実行する必要はありません。 全画面表示モードの場合は、バック バッファー形式を指定する必要があります。

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

要件

要件
対象プラットフォーム Windows
ヘッダー d3d9.h (D3D9.h を含む)
Library D3D9.lib

こちらもご覧ください

D3DDEVICE_CREATION_PARAMETERS

Direct3DCreate9

IDirect3D9

マルチヘッド (Direct3D 9)

リセット