D3DPRESENT_PARAMETERS
プレゼンテーション パラメーターを記述します。
typedef struct D3DPRESENT_PARAMETERS {
UINT BackBufferWidth, BackBufferHeight;
D3DFORMAT BackBufferFormat;
UINT BackBufferCount;
D3DMULTISAMPLE_TYPE MultiSampleType;
DWORD MultiSampleQuality;
D3DSWAPEFFECT SwapEffect;
HWND hDeviceWindow;
BOOL Windowed;
BOOL EnableAutoDepthStencil;
D3DFORMAT AutoDepthStencilFormat;
DWORD Flags;
UINT FullScreen_RefreshRateInHz;
UINT PresentationInterval;
} D3DPRESENT_PARAMETERS, *LPD3DPRESENT_PARAMETERS;
メンバ
BackBufferWidth, BackBufferHeight
新しいスワップ チェーンのバック バッファーの幅および高さ (ピクセル単位) です。Windowed が FALSE (プレゼンテーションが全画面) の場合、これらの値は IDirect3D9::EnumAdapterModes によって検出され列挙された表示モードの 1 つの幅および高さに等しくなければなりません。Windowed が TRUE で、これらの値のいずれかがゼロの場合は、hDeviceWindow (hDeviceWindow が NULL の場合はフォーカス ウィンドウ) のクライアント領域の対応するディメンションが使用されます。BackBufferFormat
バック バッファーのフォーマットです。フォーマットの詳細については、「D3DFORMAT」を参照してください。この値は、IDirect3D9::CheckDeviceType により検証されたいずれかのレンダー ターゲット フォーマットでなければなりません。現在のフォーマットは、IDirect3DDevice9::GetDisplayMode を使用して取得できます。
実際、ウィンドウ モードの場合、BackBufferFormat では D3DFMT_UNKNOWN を指定できます。これにより、ランタイムは現在の表示モード フォーマットを使用するよう指示されるので、IDirect3DDevice9::GetDisplayMode を呼び出す必要がありません。 ウィンドウ アプリケーションの場合、カラー変換はハードウェアによって実行できるようになっている (カラー変換をハードウェアがサポートしている場合) ので、バック バッファー フォーマットは表示モード フォーマットに一致する必要はありません。可能なバック バッファー フォーマットのセットは制限されていますが、実行時には、すべての有効なバック バッファー フォーマットが各デスクトップ フォーマットで表現されます。デバイスは、通常、ピクセルあたり 8 ビットのモードでは動作しないので、デスクトップ モードで動作するための追加要件があります。 フルスクリーン アプリケーションはカラー変換を実行できません。BackBufferCount
この値には、0 ~ D3DPRESENT_BACK_BUFFERS_MAX (Direct3D 9Ex の使用時は D3DPRESENT_BACK_BUFFERS_MAX_EX) の範囲の値を指定することができます。値 0 は、値 1 として処理されます。指定された数だけバック バッファーを作成することができないと、ランタイムはメソッドの呼び出しに失敗し、作成できたバック バッファーの数をこの値に設定します。そのため、アプリケーションは、メソッドを同じ D3DPRESENT_PARAMETERS 構造体を使用して 2 回呼び出し、2 回目に機能するのを待つことがあります。
メソッドは、バック バッファーを 1 つ作成できないと、失敗します。BackBufferCount の値は、許可されるスワップ エフェクトのセットに影響を与えます。具体的に言うと、D3DSWAPEFFECT_COPY スワップ エフェクトの場合は常に、バック バッファーが 1 つだけ存在する必要があります。MultiSampleType
D3DMULTISAMPLE_TYPE 列挙型のメンバーです。SwapEffect が D3DSWAPEFFECT_DISCARD に設定されていない場合、この値は D3DMULTISAMPLE_NONE でなければなりません。スワップ エフェクトが D3DSWAPEFFECT_DISCARD の場合のみ、マルチサンプリングがサポートされます。MultiSampleQuality
品質レベルです。有効な範囲は、0 から、IDirect3D9::CheckDeviceMultiSampleType の pQualityLevels が返すレベル - 1 までです。それより大きな値を渡すと、エラー D3DERR_INVALIDCALL が返されます。レンダー ターゲットまたは深度ステンシル サーフェスと D3DMULTISAMPLE_TYPE の対になる値は、一致する必要があります。SwapEffect
D3DSWAPEFFECT 列挙型のメンバーです。バッファーのスワップ動作に関する暗黙的なセマンティクスは、ランタイムによって保証されます。そのため、Windowed が TRUE で SwapEffect が D3DSWAPEFFECT_FLIP に設定されている場合、ランタイムはバック バッファーを 1 つ余分に作成し、プレゼンテーション時にフロント バッファーになったものをコピーします。
D3DSWAPEFFECT_COPY の場合は、BackBufferCount を 1 に設定する必要があります。 D3DSWAPEFFECT_DISCARD は、デバッグ ランタイム時、プレゼンテーション後にバッファーにノイズを格納することにより適用されます。Direct3D9 と Direct3D9Ex の違い
Direct3D9Ex では、アプリケーションでフリップ モードを使用するときに指定する D3DSWAPEFFECT_FLIPEX が追加されています。これは、画面を合成するためにウィンドウ モードでアプリケーションのフレームをデスクトップ ウィンドウ マネージャー (DWM) に (コピーするのではなく) 渡すときに指定するフラグです。フリップ モードでは、メモリー帯域幅を効率的に使用でき、アプリケーションで全画面表示の統計情報を活用できるようになります。フリップ モードでも全画面の動作は変わりません。フリップ モードの動作は Windows 7 以降で利用できます。
hDeviceWindow
画面上のバック バッファーの位置とサイズは、デバイス ウィンドウによって決定されます。これは、IDirect3DDevice9::Present の際にバック バッファーの内容がフロント バッファーにコピーされるとき、Direct3D によって使用されます。全画面アプリケーションの場合は、最上位ウィンドウ (フォーカス ウィンドウ) へのハンドルです。
全画面デバイスを複数使用するアプリケーション (マルチモニター システムなど) の場合、フォーカス ウィンドウをデバイス ウィンドウとして使用できるデバイスは 1 つだけです。他のデバイスはすべて、一意なデバイス ウィンドウを持つ必要があります。
ウィンドウ モードのアプリケーションの場合、このハンドルは IDirect3DDevice9::Present の既定のターゲット ウィンドウになります。このハンドルが NULL の場合は、フォーカス ウィンドウが使用されます。
ユーザーによるウィンドウ サイズの変更を反映するために、ランタイムは何も実行しない点に注意してください。このウィンドウのリセット時、バック バッファーは暗黙的にリセットされません。ただし、IDirect3DDevice9::Present メソッドは、ウィンドウの位置の変更を自動的に追跡します。
Windowed
アプリケーションがウィンドウ モードで実行される場合は TRUE。アプリケーションが全画面モードで実行される場合は FALSE。EnableAutoDepthStencil
この値に TRUE を指定すると、Direct3D がアプリケーションの深度バッファーを管理します。作成したデバイスによって、深度ステンシル バッファーが作成されます。深度ステンシル バッファーは、デバイスのレンダー ターゲットとして自動的に設定されます。デバイスがリセットされると、深度ステンシル バッファーは自動的に破棄され、新たなサイズで再作成されます。 EnableAutoDepthStencil が TRUE の場合、AutoDepthStencilFormat には有効な深度ステンシル フォーマットを指定する必要があります。AutoDepthStencilFormat
D3DFORMAT 列挙型のメンバーです。デバイスが作成する自動深度ステンシル サーフェスのフォーマットです。EnableAutoDepthStencil が TRUE でない場合、このメンバーは無視されます。Flags
D3DPRESENTFLAG 定数の 1 つです。FullScreen_RefreshRateInHz
ディスプレイ アダプターによるスクリーンのリフレッシュ レートです。この値は、アプリケーションの実行モードによって異なります。- ウィンドウ モードの場合、リフレッシュ レートは 0 でなければなりません。
- 全画面モードの場合、リフレッシュ レートは IDirect3D9::EnumAdapterModes によって返されるリフレッシュ レートの 1 つです。
PresentationInterval
スワップ チェーンのバック バッファーをフロント バッファーに表示できる最大速度です。サポートされているモードと間隔の詳細については、「D3DPRESENT」を参照してください。
要件
ヘッダー: D3D9Types.h 宣言
関連項目
IDirect3D9::CreateDevice, IDirect3DDevice9::CreateAdditionalSwapChain, IDirect3DDevice9::Present, IDirect3DDevice9::Reset, IDirect3DDevice9::Reset