IDirect3DDevice9Ex
COM公式ドキュメント
アプリケーションは IDirect3DDevice9Ex インターフェイスのメソッドを使用して、プリミティブの描画、リソースの作成、システムレベルの変数の操作、ガンマランプレベルの調整、パレットの操作、シェーダーの作成を行います。
解説(Remarks)
IDirect3DDevice9Ex インターフェイスは、IDirect3D9Ex::CreateDeviceEx を呼び出すことで取得します。
LPDIRECT3DDEVICE9EX 型および PDIRECT3DDEVICE9EX 型は、IDirect3DDevice9Ex インターフェイスへのポインターとして定義されています。
typedef struct IDirect3DDevice9Ex *LPDIRECT3DDEVICE9EX, *PDIRECT3DDEVICE9EX;
デバイスの作成
Direct3D デバイスを初期化するには、次の 2 つの手順に従います。- Direct3DCreate9Ex を呼び出して Direct3D オブジェクトを作成します。
- CreateDeviceEx を呼び出して Direct3D デバイスを作成します。
IDirect3D9Ex *pDirect3DEx;
LPDIRECT3DDEVICE9EX pDeviceEx;
DWORD behaviorFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING;
Direct3DCreate9Ex(D3D_SDK_VERSION, &pDirect3DEx);
pDirect3DEx->CreateDeviceEx(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, behaviorFlags, &d3dpp, NULL, &pDeviceEx);
メソッド 15
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
単色テクスチャーに対するモノクロコンボリューションフィルタリング用にテクスチャーサンプラーを準備します。
| width | DWORD | in | フィルターカーネルの幅。1 から D3DCONVOLUTIONMONO_MAXWIDTH までの範囲です。既定値は 1 です。 |
| height | DWORD | in | フィルターカーネルの高さ。1 から D3DCONVOLUTIONMONO_MAXHEIGHT までの範囲です。既定値は 1 です。 |
| rows | FLOAT* | inout | 重みの配列で、幅方向のカーネル各要素に対して 1 つの重みを指定します。このパラメーターは NULL でなければならず、その場合、重みは既定値に設定されます。 |
| columns | FLOAT* | inout | 重みの配列で、高さ方向のカーネル各要素に対して 1 つの重みを指定します。このパラメーターは NULL でなければならず、その場合、重みは既定値に設定されます。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。
解説(Remarks)
このメソッドは単色テクスチャーをフィルタリングするために設計されています。モノクロコンボリューションフィルターは、すべての重みが 1.0 に設定された 2D ボックスフィルターです。フィルターカーネルの解像度は 1 x 1 から 7 x 7 までの範囲です。テクスチャーサンプラーにモノクロテクスチャーフィルタリングが設定され、ある位置でテクスチャーサンプリングが実行されると、Direct3D はコンボリューションを実行します。
制限事項は次のとおりです。
- このメソッドで指定されたフィルターは、D3DSBT_PIXELSTATE の一部としてステートブロックに記録されます。
- サポートされるテクスチャーアドレスモードは D3DPTADDRESSCAPS_BORDER のみです。境界色は常に 0 です。
- このメソッドはミップマップではサポートされません。
- モノクロ以外のテクスチャーをコンボリューションフィルタリングで使用すると、ドライバーエラーが発生します。
一方のサーフェス上にあるグリフのアルファベットを使用して、もう一方のサーフェスにテキスト文字列をコピーします。合成はビット演算を用いて GPU で行われます。
| pSrc | IDirect3DSurface9* | in | アルファベットのグリフを提供するソースサーフェス (IDirect3DSurface9 で準備) へのポインター。このサーフェスは D3DUSAGE_TEXTAPI フラグを指定して作成する必要があります。 |
| pDst | IDirect3DSurface9* | in | グリフデータを受け取る出力先サーフェス (IDirect3DSurface9 で準備) へのポインター。このサーフェスはテクスチャーの一部である必要があります。 |
| pSrcRectDescs | IDirect3DVertexBuffer9* | in | ソースサーフェス内の目的のグリフを囲む矩形 (D3DCOMPOSERECTDESC を参照) を格納した頂点バッファー (IDirect3DVertexBuffer9 を参照) へのポインター。 |
| NumRects | DWORD | in | 操作で使用される矩形またはグリフの数。この数はソースサーフェスと出力先サーフェスの両方に適用されます。範囲は 0 から D3DCOMPOSERECTS_MAXNUMRECTS までです。 |
| pDstRectDescs | IDirect3DVertexBuffer9* | in | ソースサーフェスから指定されたグリフをコピーする出力先を記述する矩形 (D3DCOMPOSERECTDESTINATION を参照) を格納した頂点バッファー (IDirect3DVertexBuffer9 を参照) へのポインター。 |
| Operation | D3DCOMPOSERECTSOP | in | ソースサーフェスと出力先サーフェスをどのように結合するかを指定します。D3DCOMPOSERECTSOP を参照してください。 |
| Xoffset | INT | in | すべての出力先矩形の x 座標に加算される値。この値は負にすることもできますが、その結果がサーフェスの範囲外になる場合、グリフは破棄されるかクリップされる可能性があります。 |
| Yoffset | INT | in | すべての出力先矩形の y 座標に加算される値。この値は負にすることもできますが、その結果がサーフェスの範囲外になる場合、グリフは破棄されるかクリップされる可能性があります。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。
解説(Remarks)
このメソッドにより、1 ビットのソースサーフェスのグリフが、別の 1 ビットのテクスチャーサーフェスにまとめて配置されます。その出力先サーフェスは、通常のテクスチャリング処理のソースとして使用でき、テキスト文字列をフィルタリングおよびスケーリングして、モノクロ以外の別のサーフェスに描画できます。
このメソッドにはいくつかの制約があります (StretchRect と同様です)。
- サーフェスをロックすることはできません。
- ソースサーフェスと出力先サーフェスを同一のサーフェスにすることはできません。
- ソースサーフェスと出力先サーフェスは D3DFMT_A1 形式で作成する必要があります。
- ソースサーフェスと 2 つの頂点バッファーは D3DPOOL_DEFAULT フラグを指定して作成する必要があります。
- 出力先サーフェスは D3DPOOL_DEFAULT または D3DPOOL_SYSTEMMEM のいずれかのフラグを指定して作成する必要があります。
- ソース矩形はソースサーフェスの内部になければなりません。
スワップチェーンの次のバッファーをフロントバッファーと入れ替えます。
| pSourceRect | RECT* | in | コピー元のサーフェス上の領域をウィンドウクライアント座標で示す RECT 構造体へのポインター。スワップチェーンが D3DSWAPEFFECT_COPY フラグで作成された場合のみ適用されます。NULL の場合、ソースサーフェス全体がプレゼントされます。矩形がソースサーフェスを超える場合は、ソースサーフェスにクリップされます。 |
| pDestRect | RECT* | in | 出力先サーフェス上の対象領域をウィンドウクライアント座標で示す RECT 構造体へのポインター。スワップチェーンが D3DSWAPEFFECT_COPY フラグで作成された場合のみ適用されます。NULL の場合、クライアント領域全体が塗りつぶされます。矩形が出力先クライアント領域を超える場合は、出力先クライアント領域にクリップされます。 |
| hDestWindowOverride | HWND | in | このプレゼンテーションの対象としてクライアント領域が使用される出力先ウィンドウへのポインター。この値が NULL の場合、ランタイムはプレゼンテーションに D3DPRESENT_PARAMETERS の hDeviceWindow メンバーを使用します。 メモ D3DSWAPEFFECT_FLIPEX を指定してスワップチェーンを作成した場合、hDestWindowOverride には NULL を渡す必要があります。
|
| pDirtyRegion | RGNDATA* | in | 転送が必要な最小のピクセル集合を示す RGNDATA 構造体へのポインター。スワップチェーンが D3DSWAPEFFECT_COPY フラグで作成されていない限り、この値は NULL でなければなりません。スワップチェーンの詳細については、Flipping Surfaces (Direct3D 9) を参照してください。 この値が NULL 以外の場合、含まれる領域はバックバッファー座標で表されます。このメソッドはこれらの矩形を考慮し、領域内のピクセルのみ、または適切に拡張された矩形の集合のみをコピーすることでプレゼンテーションを最適化します。これは最適化の補助にすぎず、アプリケーションは領域が正確にコピーされることに依存すべきではありません。実装はソース矩形全体をコピーすることを選択する場合があります。 |
| dwFlags | DWORD | in | ドライバーがプレゼンテーションをスケジュールできないと報告した場合に、メソッドが直ちに戻るようアプリケーションが要求できるようにします。有効な値は 0、または D3DPRESENT フラグの任意の組み合わせです。
|
戻り値
型: HRESULT
返される可能性のある値: S_OK、D3DERR_DEVICELOST、D3DERR_DEVICEHUNG、D3DERR_DEVICEREMOVED、D3DERR_OUTOFVIDEOMEMORY (D3DERR を参照)、または S_PRESENT_OCCLUDED、S_PRESENT_MODE_CHANGED (S_PRESENT を参照)。ロスト状態、ハング状態、削除されたデバイスの詳細については、Lost Device Behavior Changes を参照してください。
|
Direct3D 9 と Direct3D 9Ex の違い:
D3DSWAPEFFECT_FLIPEX は、Windows 7 (またはそれ以降のオペレーティングシステム) 上で動作する Direct3D9Ex でのみ利用できます。 |
解説(Remarks)
IDirect3DDevice9::Present メソッドと同様ですが、PresentEx には dwflags パラメーターが追加されています。
スワップチェーンが D3DSWAPEFFECT_FLIPEX フラグで作成されている場合、pSourceRect、pDestRect、pDirtyRegion の値は NULL に設定する必要があります。
GPU スレッドの優先度を取得します。
| pPriority | INT* | inout | 現在の GPU 優先度。有効な値の範囲は -7 から 7 です。 |
戻り値
解説(Remarks)
スレッドの優先度を設定するには IDirect3DDevice9Ex::SetGPUThreadPriority を使用します。
このメソッドは、Direct3D デバイスが D3DCREATE_PUREDEVICE フラグを指定して作成されていた場合でも、デバイスに格納されているスレッドの優先度を取得します。
GPU スレッドの優先度を設定します。
| Priority | INT | in | スレッドの優先度。範囲は -7 から 7 です。 |
戻り値
解説(Remarks)
GPU スレッドの優先度は、デバイスがロストしてもリセットされません。このメソッドの呼び出しによる効果はステートブロックには記録されません。
次の垂直帰線信号が発生するまで、呼び出し元スレッドの実行を中断します。
| iSwapChain | DWORD | in | スワップチェーンのインデックス。マルチヘッドカード上のスワップチェーンを指定するために使用する、省略可能な 0 から始まるインデックスです。 |
戻り値
型: HRESULT
このメソッドは常に D3D_OK を返します。
解説(Remarks)
このメソッドにより、アプリケーションはフレームレートをデバイスに関連付けられたモニターのリフレッシュレートに効率的に合わせることができます。垂直帰線の後、スレッドが起床するまでに要する時間は通常きわめて短くなります。
状況によっては、モニターに何も表示されていないときにハードウェアが垂直帰線信号の生成を停止することがあります。この場合、このメソッドは約 100ms 待機してから D3D_OK を返します。
リソースの配列を調べ、システムがそれらのリソースを GPU からアクセス可能にする必要があるために、Draw 実行時に大きなストールが発生する可能性が高いかどうかを判定します。
| pResourceArray | IDirect3DResource9** | out | 確認対象のリソースを示す IDirect3DResource9 ポインターの配列。 |
| NumResources | DWORD | in | pResourceArray パラメーターに渡されるリソースの数を示す値。最大 65535 までです。 |
戻り値
型: HRESULT
すべてのリソースが GPU からアクセス可能なメモリ上にある場合、このメソッドは S_OK を返します。システムはリソースを昇格させるために再マッピング操作を実行する必要がある場合がありますが、データのコピーは不要です。
リソースを構成するアロケーションがいずれもディスク上になく、少なくとも 1 つのアロケーションが GPU からアクセス可能なメモリ上にない場合、このメソッドは S_RESIDENT_IN_SHARED_MEMORY を返します。システムはリソースを昇格させるためにコピーを実行する必要がある場合があります。
リソースを構成するアロケーションのうち少なくとも 1 つがディスク上にある場合、このメソッドは S_NOT_RESIDENT を返します。システムはリソースを昇格させるためにコピーを実行する必要がある場合があります。
解説(Remarks)
この API は常駐状態についての妥当な推測にすぎません。アプリケーションがリソースを使用する時点では、すでに降格されている可能性があるためです。
想定される使用パターンは次のとおりです。アプリケーションが一連のリソースが常駐していないと判断した場合、より低い LOD のリソースで代用して描画を継続します。ビデオメモリマネージャー API には、これらの低 LOD リソースを GPU からアクセス可能なメモリに常駐したままにしやすくするようアプリケーションが要求できる機能があります。これらの低 LOD 版の作成、内容の設定、破棄はアプリケーションの責任です。
また、常駐チェックによりリソースが GPU からアクセス可能なメモリに常駐していないことが示された場合、アプリケーションは高 LOD 版の昇格を開始する必要もあります。カーネルモードにはプロセスごとのロックが存在するため、性能の高い実装ではリソースの昇格のみを担当する別プロセスを起動します。アプリケーションは Sharing Resources の共有サーフェス API によって 2 つのプロセス間でリソースの同一性を伝達し、SetPriority によってそれらを昇格させます。
システムが描画のためにキューに入れることを許可されるフレーム数を設定します。
| MaxLatency | DWORD | in | ドライバーがキューに入れることのできるバックバッファーフレームの最大数。通常は 3 ですが、1 から 20 の範囲を取り得ます。値 0 を指定すると、レイテンシは既定値にリセットされます。マルチヘッドデバイスの場合、MaxLatency はヘッドごとに指定されます。 |
戻り値
解説(Remarks)
フレームレイテンシとは、描画のために送信される前にキューに格納しておくことが許可されるフレーム数のことです。レイテンシは、CPU がユーザー入力への応答と描画キュー内のフレームのどちらを優先するかを制御するためによく使用されます。
ユーザー入力のないアプリケーション (たとえば動画再生) では、3 フレームを超えるデータをキューに入れることが有益な場合がよくあります。
システムがキューに入れることを許可されるデータのフレーム数を取得します。
| pMaxLatency | DWORD* | inout | 描画のためにキューに入れることができるフレーム数を返します。通常は 3 ですが、1 から 20 の範囲を取り得ます。 |
戻り値
型: HRESULT
返される可能性のある値: D3D_OK、D3DERR_DEVICELOST、D3DERR_DEVICEREMOVED、D3DERR_DRIVERINTERNALERROR、D3DERR_INVALIDCALL、または D3DERR_OUTOFVIDEOMEMORY (D3DERR を参照)。
解説(Remarks)
フレームレイテンシとは、描画のために送信される前にキューに格納しておくことが許可されるフレーム数のことです。レイテンシは、CPU がユーザー入力への応答と描画キュー内のフレームのどちらを優先するかを制御するためによく使用されます。
ユーザー入力のないアプリケーション (たとえば動画再生) では、3 フレームを超えるデータをキューに入れることが有益な場合がよくあります。
ウィンドウモードまたはフルスクリーンモードのアプリケーションに対して、Direct3D デバイスの現在の協調レベルの状態を報告します。(IDirect3DDevice9Ex.CheckDeviceState)
| hDestinationWindow | HWND | in | オクルージョンを確認する出力先ウィンドウのハンドル。このパラメーターが NULL の場合、別のデバイスがフルスクリーンの所有権を持っているときに S_PRESENT_OCCLUDED が返されます。ウィンドウハンドルが NULL でない場合は、そのウィンドウのクライアント領域のオクルージョンが確認されます。ウィンドウの一部が他のアプリケーションによって覆われている場合、そのウィンドウはオクルードされているとみなされます。 |
戻り値
型: HRESULT
返される可能性のある値: D3D_OK、D3DERR_DEVICELOST、D3DERR_DEVICEHUNG、D3DERR_DEVICEREMOVED、D3DERR_OUTOFVIDEOMEMORY (D3DERR を参照)、または S_PRESENT_MODE_CHANGED、S_PRESENT_OCCLUDED (S_PRESENT を参照)。
解説(Remarks)
このメソッドは IDirect3DDevice9::TestCooperativeLevel を置き換えるものです。TestCooperativeLevel は Direct3D 9Ex アプリケーションでは常に S_OK を返します。
CheckDeviceState をフレームごとに呼び出すことは推奨されません。代わりに、IDirect3DDevice9Ex::PresentEx メソッドが失敗コードを返した場合にのみ CheckDeviceState を呼び出してください。
ロスト状態、ハング状態、削除されたデバイスの詳細については、Lost Device Behavior Changes を参照してください。
レンダーターゲットサーフェスを作成します。(IDirect3DDevice9Ex.CreateRenderTargetEx)
| Width | DWORD | in | レンダーターゲットサーフェスの幅 (ピクセル単位)。 |
| Height | DWORD | in | レンダーターゲットサーフェスの高さ (ピクセル単位)。 |
| Format | D3DFORMAT | in | レンダーターゲットの形式を記述する D3DFORMAT 列挙型のメンバー。 |
| MultiSample | D3DMULTISAMPLE_TYPE | in | マルチサンプリングバッファーの種類を記述する D3DMULTISAMPLE_TYPE 列挙型のメンバー。このパラメーターは、このレンダーターゲットのアンチエイリアシングの種類を指定します。このサーフェスを IDirect3DDevice9::SetRenderTarget に渡す場合、そのマルチサンプルの種類は IDirect3DDevice9::SetDepthStencilSurface で設定される深度ステンシルのものと同一でなければなりません。 |
| MultisampleQuality | DWORD | in | 品質レベル。有効な範囲は 0 から、IDirect3D9::CheckDeviceMultiSampleType で使用される pQualityLevels が返すレベルより 1 小さい値までです。より大きな値を渡すと、エラー D3DERR_INVALIDCALL が返されます。対になるレンダーターゲット、深度ステンシルサーフェス、マルチサンプルの種類の MultisampleQuality 値は、すべて一致している必要があります。 |
| Lockable | BOOL | in | アプリケーションが Lockable に TRUE を指定しない限り、レンダーターゲットはロックできません。 ロック可能なレンダーターゲットは、一部のグラフィックスハードウェアではパフォーマンスを低下させることに注意してください。リードバックのパフォーマンス (ビデオメモリからシステムメモリへのデータ移動) は使用するハードウェアの種類 (AGP か PCI Express か) に依存し、通常はアップロードのパフォーマンス (システムメモリからビデオメモリへのデータ移動) よりはるかに低くなります。レンダーターゲットへの読み取りアクセスが必要な場合は、ロック可能なレンダーターゲットの代わりに GetRenderTargetData を使用してください。 |
| ppSurface | IDirect3DSurface9** | out | IDirect3DSurface9 インターフェイスへのポインターのアドレス。 |
| pSharedHandle | HANDLE* | inout | 予約済み。このパラメーターは NULL に設定してください。このパラメーターは、Windows Vista 用の Direct3D 9 でリソースを共有するために使用できます。 |
| Usage | DWORD | in | 1 つ以上の D3DUSAGE 定数の組み合わせ (OR で結合可能)。値 0 は用途を指定しないことを示します。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_NOTAVAILABLE、D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY。
解説(Remarks)
レンダーターゲットサーフェスは D3DPOOL_DEFAULT メモリクラスに配置されます。
ロック可能なマルチサンプルレンダーターゲットの作成はサポートされていません。
オフスクリーンサーフェスを作成します。(IDirect3DDevice9Ex.CreateOffscreenPlainSurfaceEx)
| Width | DWORD | in | サーフェスの幅。 |
| Height | DWORD | in | サーフェスの高さ。 |
| Format | D3DFORMAT | in | サーフェスの形式。D3DFORMAT を参照してください。 |
| Pool | D3DPOOL | in | サーフェスのプールの種類。D3DPOOL を参照してください。 |
| ppSurface | IDirect3DSurface9** | out | 作成された IDirect3DSurface9 インターフェイスへのポインター。 |
| pSharedHandle | HANDLE* | inout | 予約済み。このパラメーターは NULL に設定してください。このパラメーターは、Windows Vista 用の Direct3D 9 でリソースを共有するために使用できます。 |
| Usage | DWORD | in | 1 つ以上の D3DUSAGE 定数の組み合わせ (OR で結合可能)。値 0 は用途を指定しないことを示します。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のとおりです: D3DERR_INVALIDCALL。
解説(Remarks)
D3DPOOL_SCRATCH を指定すると、DirectX 8.x のメソッド CreateImageSurface で作成されるサーフェスと同一の特性を持つサーフェスが返されます。
D3DPOOL_DEFAULT は、IDirect3DDevice9::StretchRect および IDirect3DDevice9::ColorFill と併用するのに適したプールです。
オフスクリーンプレーンサーフェスの作成時に D3DPOOL_MANAGED を指定することはできません。メモリプールの詳細については、D3DPOOL を参照してください。
オフスクリーンプレーンサーフェスは、プールの種類にかかわらず常にロック可能です。
深度ステンシルサーフェスを作成します。
| Width | DWORD | in | 深度ステンシルサーフェスの幅 (ピクセル単位)。 |
| Height | DWORD | in | 深度ステンシルサーフェスの高さ (ピクセル単位)。 |
| Format | D3DFORMAT | in | 深度ステンシルサーフェスの形式を記述する D3DFORMAT 列挙型のメンバー。この値は、このデバイスで列挙される深度ステンシル形式のいずれかでなければなりません。 |
| MultiSample | D3DMULTISAMPLE_TYPE | in | マルチサンプリングバッファーの種類を記述する D3DMULTISAMPLE_TYPE 列挙型のメンバー。この値は許可されたマルチサンプルの種類のいずれかでなければなりません。このサーフェスを IDirect3DDevice9::SetDepthStencilSurface に渡す場合、そのマルチサンプルの種類は IDirect3DDevice9::SetRenderTarget で設定されるレンダーターゲットのものと同一でなければなりません。 |
| MultisampleQuality | DWORD | in | 品質レベル。有効な範囲は 0 から、IDirect3D9::CheckDeviceMultiSampleType で使用される pQualityLevels が返すレベルより 1 小さい値までです。より大きな値を渡すと、エラー D3DERR_INVALIDCALL が返されます。対になるレンダーターゲット、深度ステンシルサーフェス、および MultiSample の種類の MultisampleQuality 値は、すべて一致している必要があります。 |
| Discard | BOOL | in | z バッファーの破棄を有効にするにはこのフラグを TRUE に設定し、それ以外の場合は FALSE に設定します。 このフラグが設定されている場合、IDirect3DDevice9::Present を呼び出した後、または異なる深度サーフェスで IDirect3DDevice9::SetDepthStencilSurface を呼び出した後、深度ステンシルバッファーの内容は無効になります。 このフラグは、D3DPRESENTFLAG の定数 D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL と同じ動作をします。 |
| ppSurface | IDirect3DSurface9** | out | 作成された深度ステンシルサーフェスリソースを表す IDirect3DSurface9 インターフェイスへのポインターのアドレス。 |
| pSharedHandle | HANDLE* | inout | 予約済み。このパラメーターは NULL に設定してください。このパラメーターは、Windows Vista 用の Direct3D 9 でリソースを共有するために使用できます。 |
| Usage | DWORD | in | 1 つ以上の D3DUSAGE 定数の組み合わせ (OR で結合可能)。値 0 は用途を指定しないことを示します。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_NOTAVAILABLE、D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY。
解説(Remarks)
深度ステンシルバッファーのメモリクラスは常に D3DPOOL_DEFAULT です。
他のすべてのサーフェスを保持したまま、スワップチェーンの種類、サイズ、形式をリセットします。
| pPresentationParameters | D3DPRESENT_PARAMETERS* | inout | 新しいプレゼンテーションパラメーターを記述する D3DPRESENT_PARAMETERS 構造体へのポインター。この値を NULL にすることはできません。 フルスクリーンモードに切り替える際、Direct3D はバックバッファー形式に一致するデスクトップ形式を探し、バックバッファーとフロントバッファーの形式が同一になるようにします (色変換を不要にするため)。 このメソッドが戻るとき:
|
| pFullscreenDisplayMode | D3DDISPLAYMODEEX* | inout | 目的のディスプレイモードのプロパティを記述する D3DDISPLAYMODEEX 構造体へのポインター。フルスクリーンアプリケーションではこの値を指定する必要がありますが、ウィンドウアプリケーションでは NULL にできます。 |
戻り値
型: HRESULT
このメソッドは次を返す可能性があります: D3D_OK、D3DERR_DEVICELOST、D3DERR_DEVICEHUNG (D3DERR を参照)。
このメソッドが D3DERR_DEVICELOST または D3DERR_DEVICEHUNG を返した場合、アプリケーションは IDirect3DDevice9Ex::ResetEx、IDirect3DDevice9Ex::CheckDeviceState の呼び出し、またはインターフェイスポインターの解放しか行えません。それ以外の API 呼び出しは例外を引き起こします。
解説(Remarks)
IDirect3DDevice9Ex::ResetEx の呼び出しが失敗すると、デバイスはロスト状態になります (IDirect3DDevice9Ex::CheckDeviceState の呼び出しが D3DERR_DEVICELOST を返すことで示されます)。ロストしたデバイスにおける IDirect3DDevice9Ex::ResetEx の使用については、IDirect3DDevice9Ex::CheckDeviceState および Lost Device Behavior Changes を参照してください。
DirectX の以前のバージョンとは異なり、IDirect3DDevice9Ex::ResetEx を呼び出してもサーフェス、テクスチャー、ステート情報が失われることはありません。
Direct3D 9 では、ピクセルシェーダーおよび頂点シェーダーは IDirect3DDevice9Ex::ResetEx の呼び出し後も保持されます。アプリケーションが明示的に再作成する必要はありません。
スワップチェーンにはフルスクリーンとウィンドウの 2 種類があります。新しいスワップチェーンがフルスクリーンの場合、アダプターは新しいサイズに一致するディスプレイモードに設定されます。
この呼び出しの間 (たとえば、この呼び出しが戻る前) にアプリケーションへメッセージが送信されることがあります。アプリケーションはこの時点で Direct3D を呼び出さないよう注意する必要があります。
リセット対象のデバイスを作成したスレッドとは異なるスレッドで IDirect3DDevice9Ex::ResetEx を呼び出すと、呼び出しは失敗します。
IDirect3D9Ex::CreateDeviceEx、IDirect3DDevice9Ex::ResetEx、IDirect3DDevice9::CreateAdditionalSwapChain を呼び出す際、ウィンドウモードのバックバッファー形式には D3DFMT_UNKNOWN を指定できます。つまり、ウィンドウモードで IDirect3D9Ex::CreateDeviceEx を呼び出す前に、アプリケーションが現在のデスクトップ形式を照会する必要はありません。フルスクリーンモードの場合は、バックバッファー形式を指定する必要があります。BackBufferCount を 0 に設定すると (BackBufferCount = 0)、バックバッファーは 1 つになります。
グループ内の複数のディスプレイアダプターをリセットする場合は、pPresentationParameters がアダプターグループ内のディスプレイごとに 1 つの D3DPRESENT_PARAMETERS 構造体を持つ配列を指すように設定します。
マルチヘッドデバイスが D3DCREATE_ADAPTERGROUP_DEVICE で作成された場合、IDirect3DDevice9Ex::ResetEx には D3DPRESENT_PARAMETERS 構造体の配列が必要であり、各構造体はフルスクリーンディスプレイを指定する必要があります。ウィンドウモードに戻すには、アプリケーションはデバイスを破棄し、ウィンドウモードでマルチヘッドでないデバイスを再作成する必要があります。
ディスプレイモードの空間解像度、色解像度、リフレッシュレート、回転設定を取得します。(IDirect3DDevice9Ex.GetDisplayModeEx)
| iSwapChain | DWORD | in | スワップチェーンを指定する符号なし整数。 |
| pMode | D3DDISPLAYMODEEX* | inout | アダプターのディスプレイモードに関するデータを格納する D3DDISPLAYMODEEX 構造体へのポインター。これはデバイスのディスプレイモードとは異なり、デバイスがフルスクリーンモードを所有していない場合はアクティブでない可能性があります。NULL を設定できます。 |
| pRotation | D3DDISPLAYROTATION* | inout | アプリケーションが行う画面回転の種類を示す D3DDISPLAYROTATION へのポインター。このポインターを通じて返される値は、D3DPRESENTFLAG_NOAUTOROTATE フラグを使用する場合に重要になります。それ以外の場合は NULL を設定できます。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になることがあります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDirect3DDevice9Ex "{B18B10CE-2649-405A-870F-95F777D4313A}" #usecom global IDirect3DDevice9Ex IID_IDirect3DDevice9Ex "{}" #comfunc global IDirect3DDevice9Ex_SetConvolutionMonoKernel 119 int,int,var,var #comfunc global IDirect3DDevice9Ex_ComposeRects 120 sptr,sptr,sptr,int,sptr,int,int,int #comfunc global IDirect3DDevice9Ex_PresentEx 121 var,var,sptr,var,int #comfunc global IDirect3DDevice9Ex_GetGPUThreadPriority 122 var #comfunc global IDirect3DDevice9Ex_SetGPUThreadPriority 123 int #comfunc global IDirect3DDevice9Ex_WaitForVBlank 124 int #comfunc global IDirect3DDevice9Ex_CheckResourceResidency 125 sptr,int #comfunc global IDirect3DDevice9Ex_SetMaximumFrameLatency 126 int #comfunc global IDirect3DDevice9Ex_GetMaximumFrameLatency 127 var #comfunc global IDirect3DDevice9Ex_CheckDeviceState 128 sptr #comfunc global IDirect3DDevice9Ex_CreateRenderTargetEx 129 int,int,int,int,int,int,sptr,sptr,int #comfunc global IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx 130 int,int,int,int,sptr,sptr,int #comfunc global IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx 131 int,int,int,int,int,int,sptr,sptr,int #comfunc global IDirect3DDevice9Ex_ResetEx 132 var,var #comfunc global IDirect3DDevice9Ex_GetDisplayModeEx 133 int,var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IDirect3DDevice9Ex "{B18B10CE-2649-405A-870F-95F777D4313A}" #usecom global IDirect3DDevice9Ex IID_IDirect3DDevice9Ex "{}" #comfunc global IDirect3DDevice9Ex_SetConvolutionMonoKernel 119 int,int,sptr,sptr #comfunc global IDirect3DDevice9Ex_ComposeRects 120 sptr,sptr,sptr,int,sptr,int,int,int #comfunc global IDirect3DDevice9Ex_PresentEx 121 sptr,sptr,sptr,sptr,int #comfunc global IDirect3DDevice9Ex_GetGPUThreadPriority 122 sptr #comfunc global IDirect3DDevice9Ex_SetGPUThreadPriority 123 int #comfunc global IDirect3DDevice9Ex_WaitForVBlank 124 int #comfunc global IDirect3DDevice9Ex_CheckResourceResidency 125 sptr,int #comfunc global IDirect3DDevice9Ex_SetMaximumFrameLatency 126 int #comfunc global IDirect3DDevice9Ex_GetMaximumFrameLatency 127 sptr #comfunc global IDirect3DDevice9Ex_CheckDeviceState 128 sptr #comfunc global IDirect3DDevice9Ex_CreateRenderTargetEx 129 int,int,int,int,int,int,sptr,sptr,int #comfunc global IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx 130 int,int,int,int,sptr,sptr,int #comfunc global IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx 131 int,int,int,int,int,int,sptr,sptr,int #comfunc global IDirect3DDevice9Ex_ResetEx 132 sptr,sptr #comfunc global IDirect3DDevice9Ex_GetDisplayModeEx 133 int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。