Win32 API 日本語リファレンス
ホームGraphics.Direct3D9 › IDirect3D9Ex

IDirect3D9Ex

COM
IID02177241-69fc-400c-8ff1-93a44df6861d継承元IDirect3D9自前メソッド開始 vtbl17

公式ドキュメント

アプリケーションは IDirect3D9Ex インターフェイス(IDirect3D9 を継承しています)のメソッドを使用して、Microsoft Direct3D 9Ex オブジェクトを作成し、環境をセットアップします。

解説(Remarks)

IDirect3D9Ex インターフェイスは、Direct3DCreate9Ex 関数を呼び出すことで取得します。

LPDIRECT3D9EX 型および PDIRECT3D9EX 型は、IDirect3D9Ex インターフェイスへのポインターとして次のように定義されています。


typedef struct IDirect3D9Ex *LPDIRECT3D9EX, *PDIRECT3D9EX;

メソッド 5

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 17 DWORD GetAdapterModeCountEx(DWORD Adapter, D3DDISPLAYMODEFILTER* pFilter)

利用可能なディスプレイモードの数を返します。

AdapterDWORDinディスプレイモード数を取得する対象のディスプレイアダプターを示す序数。
pFilterD3DDISPLAYMODEFILTER*in目的のディスプレイモードの特性を指定します。D3DDISPLAYMODEFILTER を参照してください。

戻り値

型: UINT

利用可能なディスプレイモードの数。このメソッドが 0 を返した場合、該当するディスプレイモードがサポートされていないか、そのモニターがすでに利用できなくなっていることを示します。

解説(Remarks)

同一ハードウェア上の他のヘッドでのディスプレイモード変更、モニターの変更や接続状態の変化、デスクトップの拡張/拡張解除といったイベントは、いずれも利用可能なディスプレイモード数に影響を与える可能性があります。

フルスクリーンアプリケーションでは、PresentEx または CheckDeviceState から返される S_PRESENT_MODE_CHANGED が、これらのイベントに起因するディスプレイモード設定の失敗を示します。

現在利用可能なディスプレイモードの設定を成功させる可能性を高めるため、フルスクリーンアプリケーションは S_PRESENT_MODE_CHANGED を受け取った時点で、利用可能なディスプレイモードの一覧を再取得することを試みてください。

vtbl 18 HRESULT EnumAdapterModesEx(DWORD Adapter, D3DDISPLAYMODEFILTER* pFilter, DWORD Mode, D3DDISPLAYMODEEX* pMode)

このメソッドは、指定されたモードインデックスに基づいて、実際のディスプレイモード情報を返します。

AdapterDWORDin列挙する対象のディスプレイアダプターを示す序数。D3DADAPTER_DEFAULT は常にプライマリディスプレイアダプターを表します。この値がシステム内のディスプレイアダプター数以上である場合、このメソッドは D3DERR_INVALIDCALL を返します。
pFilterD3DDISPLAYMODEFILTER*inD3DDISPLAYMODEFILTER を参照してください。
ModeDWORDinディスプレイモードのインデックスを表します。0 から GetAdapterModeCount が返す値から 1 を引いた値までの符号なし整数です。
pModeD3DDISPLAYMODEEX*inout利用可能なディスプレイモードを表す D3DDISPLAYMODEEX 型へのポインター。

戻り値

型: HRESULT

vtbl 19 HRESULT GetAdapterDisplayModeEx(DWORD Adapter, D3DDISPLAYMODEEX* pMode, D3DDISPLAYROTATION* pRotation)

アダプターの現在のディスプレイモードと回転設定を取得します。

AdapterDWORDinクエリ対象のディスプレイアダプターを示す序数。D3DADAPTER_DEFAULT は常にプライマリディスプレイアダプターを表します。
pModeD3DDISPLAYMODEEX*inoutアダプターのディスプレイモードに関するデータを格納する D3DDISPLAYMODEEX 構造体へのポインター。これはデバイスのディスプレイモードとは異なり、デバイスがフルスクリーンモードを所有していない場合、デバイスのディスプレイモードはアクティブでない可能性があります。NULL を設定できます。
pRotationD3DDISPLAYROTATION*inoutアプリケーションが行う画面回転の種類を示す D3DDISPLAYROTATION 構造体へのポインター。このポインターを通じて返される値は、D3DPRESENTFLAG_NOAUTOROTATE フラグを使用する場合に重要となります。それ以外の場合は NULL を設定できます。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。

Adapter が範囲外である場合、または pMode が無効である場合、このメソッドは D3DERR_INVALIDCALL を返します。

解説(Remarks)

ディスプレイが 2:10:10:10 などの拡張フォーマットになっている場合、GetAdapterDisplayModeEx は正しいフォーマットを返しません。代わりに X8R8G8B8 フォーマットを返します。

ウィンドウモードのアプリケーションでは、PresentEx または CheckDeviceState から S_PRESENT_MODE_CHANGED が返された場合、ディスプレイモードが変更され、現在のディスプレイモードのフォーマットが異なる可能性があることを示します。色変換を伴う Present の blt を避けるため、ウィンドウモードのアプリケーションは、必要に応じてこのメソッドで新しいディスプレイモード情報を取得し、スワップチェーンのフォーマットを適宜調整できます。このヘッドがすでにデスクトップの一部でなくなっている場合、またはモニターが切断されている場合、このメソッドは D3DERR_NOTAVAILABLE を返します。

vtbl 20 HRESULT CreateDeviceEx(DWORD Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, D3DDISPLAYMODEEX* pFullscreenDisplayMode, IDirect3DDevice9Ex** ppReturnedDeviceInterface)

ディスプレイアダプターを表すデバイスを作成します。(IDirect3D9Ex.CreateDeviceEx)

AdapterDWORDinディスプレイアダプターを示す序数。D3DADAPTER_DEFAULT は常にプライマリディスプレイアダプターを表します。
DeviceTypeD3DDEVTYPEinデバイスの種類を指定します。D3DDEVTYPE を参照してください。目的のデバイスの種類が利用できない場合、このメソッドは失敗します。
hFocusWindowHWNDinフォーカスウィンドウは、アプリケーションがフォアグラウンドモードからバックグラウンドモードへ切り替わったことを Direct3D に通知します。フルスクリーンモードの場合、指定するウィンドウはトップレベルウィンドウでなければなりません。ウィンドウモードの場合、pPresentationParameters の hDeviceWindow メンバーに有効な非 NULL の値が設定されているときに限り、このパラメーターを NULL にできます。
BehaviorFlagsDWORDinデバイスの作成を制御する 1 つ以上のオプション(D3DCREATE を参照)の組み合わせ。
pPresentationParametersD3DPRESENT_PARAMETERS*inout

作成するデバイスのプレゼンテーションパラメーターを記述する D3DPRESENT_PARAMETERS 構造体へのポインター。BehaviorFlagsD3DCREATE_ADAPTERGROUP_DEVICE を指定した場合、このパラメーターは配列になります。存在するヘッドの数にかかわらず、自動的に作成される深度/ステンシルサーフェスは 1 つだけです。

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

  • メソッド呼び出し前に BackBufferCount、BackBufferWidth、BackBufferHeight が 0 であった場合、メソッドから戻る際に変更されます。
  • メソッド呼び出し前に BackBufferFormat が D3DFMT_UNKNOWN であった場合、メソッドから戻る際に変更されます。
pFullscreenDisplayModeD3DDISPLAYMODEEX*inoutデバイスがフルスクリーンに設定されたときのディスプレイモード。D3DDISPLAYMODEEX を参照してください。BehaviorFlagsD3DCREATE_ADAPTERGROUP_DEVICE を指定した場合、このパラメーターは配列になります。ウィンドウモードの場合、このパラメーターは NULL でなければなりません。
ppReturnedDeviceInterfaceIDirect3DDevice9Ex**out作成されたデバイスを表す、返される IDirect3DDevice9Ex へのポインターのアドレス。

戻り値

型: HRESULT

レンダリングデバイスとスワップチェーンのバッファーが正常に作成された場合、このメソッドは S_OK を返します。呼び出し元の入力が無効である場合以外のエラーが発生した場合は、D3DERR_DEVICELOST が返されます。

vtbl 21 HRESULT GetAdapterLUID(DWORD Adapter, LUID* pLUID)

このメソッドは、アダプターのハードウェアに固有の一意な識別子を返します。アプリケーションはこの識別子を使用して、さまざまな API(Direct3D 9、DXGI)間で堅牢な対応付けを定義できます。

AdapterDWORDinLUID を取得する対象のディスプレイアダプターを示す序数。
pLUIDLUID*inout指定されたアダプターの一意な識別子。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IDirect3D9Ex "{02177241-69FC-400C-8FF1-93A44DF6861D}"
#usecom global IDirect3D9Ex IID_IDirect3D9Ex "{}"
#comfunc global IDirect3D9Ex_GetAdapterModeCountEx    17 int,var
#comfunc global IDirect3D9Ex_EnumAdapterModesEx       18 int,var,int,var
#comfunc global IDirect3D9Ex_GetAdapterDisplayModeEx  19 int,var,var
#comfunc global IDirect3D9Ex_CreateDeviceEx           20 int,int,sptr,int,var,var,sptr
#comfunc global IDirect3D9Ex_GetAdapterLUID           21 int,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。