IDirect3D9Ex
COM公式ドキュメント
アプリケーションは 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。
利用可能なディスプレイモードの数を返します。
| Adapter | DWORD | in | ディスプレイモード数を取得する対象のディスプレイアダプターを示す序数。 |
| pFilter | D3DDISPLAYMODEFILTER* | in | 目的のディスプレイモードの特性を指定します。D3DDISPLAYMODEFILTER を参照してください。 |
戻り値
型: UINT
利用可能なディスプレイモードの数。このメソッドが 0 を返した場合、該当するディスプレイモードがサポートされていないか、そのモニターがすでに利用できなくなっていることを示します。
解説(Remarks)
同一ハードウェア上の他のヘッドでのディスプレイモード変更、モニターの変更や接続状態の変化、デスクトップの拡張/拡張解除といったイベントは、いずれも利用可能なディスプレイモード数に影響を与える可能性があります。
フルスクリーンアプリケーションでは、PresentEx または CheckDeviceState から返される S_PRESENT_MODE_CHANGED が、これらのイベントに起因するディスプレイモード設定の失敗を示します。
現在利用可能なディスプレイモードの設定を成功させる可能性を高めるため、フルスクリーンアプリケーションは S_PRESENT_MODE_CHANGED を受け取った時点で、利用可能なディスプレイモードの一覧を再取得することを試みてください。
このメソッドは、指定されたモードインデックスに基づいて、実際のディスプレイモード情報を返します。
| Adapter | DWORD | in | 列挙する対象のディスプレイアダプターを示す序数。D3DADAPTER_DEFAULT は常にプライマリディスプレイアダプターを表します。この値がシステム内のディスプレイアダプター数以上である場合、このメソッドは D3DERR_INVALIDCALL を返します。 |
| pFilter | D3DDISPLAYMODEFILTER* | in | D3DDISPLAYMODEFILTER を参照してください。 |
| Mode | DWORD | in | ディスプレイモードのインデックスを表します。0 から GetAdapterModeCount が返す値から 1 を引いた値までの符号なし整数です。 |
| pMode | D3DDISPLAYMODEEX* | inout | 利用可能なディスプレイモードを表す D3DDISPLAYMODEEX 型へのポインター。 |
戻り値
型: HRESULT
- このアダプターでデバイスを使用できる場合は、D3D_OK が返されます。
- Adapter がシステム内のディスプレイアダプター数以上である場合は、D3DERR_INVALIDCALL が返されます。
アダプターの現在のディスプレイモードと回転設定を取得します。
| Adapter | DWORD | in | クエリ対象のディスプレイアダプターを示す序数。D3DADAPTER_DEFAULT は常にプライマリディスプレイアダプターを表します。 |
| pMode | D3DDISPLAYMODEEX* | inout | アダプターのディスプレイモードに関するデータを格納する D3DDISPLAYMODEEX 構造体へのポインター。これはデバイスのディスプレイモードとは異なり、デバイスがフルスクリーンモードを所有していない場合、デバイスのディスプレイモードはアクティブでない可能性があります。NULL を設定できます。 |
| pRotation | D3DDISPLAYROTATION* | 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 を返します。
ディスプレイアダプターを表すデバイスを作成します。(IDirect3D9Ex.CreateDeviceEx)
| Adapter | DWORD | in | ディスプレイアダプターを示す序数。D3DADAPTER_DEFAULT は常にプライマリディスプレイアダプターを表します。 |
| DeviceType | D3DDEVTYPE | in | デバイスの種類を指定します。D3DDEVTYPE を参照してください。目的のデバイスの種類が利用できない場合、このメソッドは失敗します。 |
| hFocusWindow | HWND | in | フォーカスウィンドウは、アプリケーションがフォアグラウンドモードからバックグラウンドモードへ切り替わったことを Direct3D に通知します。フルスクリーンモードの場合、指定するウィンドウはトップレベルウィンドウでなければなりません。ウィンドウモードの場合、pPresentationParameters の hDeviceWindow メンバーに有効な非 NULL の値が設定されているときに限り、このパラメーターを NULL にできます。 |
| BehaviorFlags | DWORD | in | デバイスの作成を制御する 1 つ以上のオプション(D3DCREATE を参照)の組み合わせ。 |
| pPresentationParameters | D3DPRESENT_PARAMETERS* | inout | 作成するデバイスのプレゼンテーションパラメーターを記述する D3DPRESENT_PARAMETERS 構造体へのポインター。BehaviorFlags に D3DCREATE_ADAPTERGROUP_DEVICE を指定した場合、このパラメーターは配列になります。存在するヘッドの数にかかわらず、自動的に作成される深度/ステンシルサーフェスは 1 つだけです。 このパラメーターは入力と出力の両方を兼ねます。このメソッドを呼び出すことで、次のようなメンバーが変更される場合があります。
|
| pFullscreenDisplayMode | D3DDISPLAYMODEEX* | inout | デバイスがフルスクリーンに設定されたときのディスプレイモード。D3DDISPLAYMODEEX を参照してください。BehaviorFlags に D3DCREATE_ADAPTERGROUP_DEVICE を指定した場合、このパラメーターは配列になります。ウィンドウモードの場合、このパラメーターは NULL でなければなりません。 |
| ppReturnedDeviceInterface | IDirect3DDevice9Ex** | out | 作成されたデバイスを表す、返される IDirect3DDevice9Ex へのポインターのアドレス。 |
戻り値
型: HRESULT
レンダリングデバイスとスワップチェーンのバッファーが正常に作成された場合、このメソッドは S_OK を返します。呼び出し元の入力が無効である場合以外のエラーが発生した場合は、D3DERR_DEVICELOST が返されます。
このメソッドは、アダプターのハードウェアに固有の一意な識別子を返します。アプリケーションはこの識別子を使用して、さまざまな API(Direct3D 9、DXGI)間で堅牢な対応付けを定義できます。
| Adapter | DWORD | in | LUID を取得する対象のディスプレイアダプターを示す序数。 |
| pLUID | LUID* | inout | 指定されたアダプターの一意な識別子。 |
戻り値
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 指定が可能。#define global IID_IDirect3D9Ex "{02177241-69FC-400C-8FF1-93A44DF6861D}" #usecom global IDirect3D9Ex IID_IDirect3D9Ex "{}" #comfunc global IDirect3D9Ex_GetAdapterModeCountEx 17 int,sptr #comfunc global IDirect3D9Ex_EnumAdapterModesEx 18 int,sptr,int,sptr #comfunc global IDirect3D9Ex_GetAdapterDisplayModeEx 19 int,sptr,sptr #comfunc global IDirect3D9Ex_CreateDeviceEx 20 int,int,sptr,int,sptr,sptr,sptr #comfunc global IDirect3D9Ex_GetAdapterLUID 21 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。