Share via


SwapEffect 列挙体

[このドキュメントはプレビュー版であり、後のリリースで変更されることがあります。 空白のトピックは、プレースホルダーとして挿入されています。]

スワップ エフェクトを定義します。

名前空間:  Microsoft.WindowsMobile.DirectX.Direct3D
アセンブリ:  Microsoft.WindowsMobile.DirectX (Microsoft.WindowsMobile.DirectX.dll 内)

構文

'宣言
Public Enumeration SwapEffect
'使用
Dim instance As SwapEffect
public enum SwapEffect
public enum class SwapEffect
type SwapEffect

メンバー

メンバー名 説明
.NET Compact Framework によるサポート Discard スワップ チェーンが Flip スワップ エフェクトまたは Copy スワップ エフェクトで作成された場合、ランタイムは、PresentDevice 処理がバック バッファーの内容に影響しないことを保証します。ただし、特にウィンドウ スワップ チェーンのフリップ セマンティクスや全画面表示スワップ チェーンのコピー セマンティクスを実装する際には、この保証を満たすために、かなりのビデオ メモリのオーバーヘッドや処理のオーバーヘッドが発生することがあります。

アプリケーションでは、 Discard スワップ エフェクトを使用してこれらのオーバーヘッドを回避し、ディスプレイ ドライバーが最も効率的なスワップ チェーンのプレゼンテーション方法を選択するようにできます。

また、Discard は、NoneMultiSampleType 以外の値を指定した場合に使用できる唯一のスワップ エフェクトです。Flip を使用するスワップ チェーンと同様に、Discard を使用するスワップ チェーンは複数のバック バッファーを含んでいることがあり、これらのバック バッファーには Device.GetBackBuffer または SwapChain.GetBackBuffer を使用してアクセスできます。

スワップ チェーンは、基本的には 1 つのキューです。このキュー内では、次の Device.Present 処理で表示されるバック バッファーに常に 0 のインデックスが付けられ、いったん表示されたバッファーはキューから破棄されます。このスワップ エフェクトを使用するアプリケーションは、バック バッファーを表示する Device.Present 処理を呼び出す前にバック バッファー全体を更新する必要があります。

デバッグ バージョンのランタイムは破棄されたバック バッファーの内容をランダムなデータで上書きできるため、開発者は、アプリケーションがバック バッファー サーフェイス全体を正しく更新していることを確認できます。

全画面表示スワップ チェーンの場合、プレゼンテーションの速度は、デバイスまたはスワップ チェーンの作成時に Caps.PresentationIntervals に割り当てられた値によって決定されます。この値が Immediate でない場合、プレゼンテーションはモニターの垂直同期と同期されます。ウィンドウ スワップ チェーンの場合、プレゼンテーションはコピー処理によって実装され、常に即座に実行されます。

.NET Compact Framework によるサポート Flip スワップ チェーンは複数のバック バッファーを含んでいることがあり、基本的には、フロント バッファーを含む循環キューです。このキュー内で、バック バッファーは常に 0 から (n - 1) までの番号を順番に付けられます。n はバック バッファーの数であり、0 はプレゼンテーションされる最も古いバッファーを示します。

Device.Present が呼び出されると、キューが循環してフロント バッファーがバック バッファー (n - 1) になり、バック バッファー 0 が新しいフロント バッファーになります。

全画面表示スワップ チェーンの場合、プレゼンテーションの速度は、デバイスまたはスワップ チェーンの作成時に Caps.PresentationIntervals に割り当てられた値によって決定されます。

ウィンドウ スワップ チェーンの場合、フリッピングはコピー処理によって実装され、プレゼンテーションは常に即座に実行されます。

.NET Compact Framework によるサポート Copy このスワップ エフェクトは、1 つのバック バッファーを含むスワップ チェーンに対してのみ指定できます。

スワップ チェーンがウィンドウ スワップ チェーンである場合も全画面表示スワップ チェーンである場合も、ランタイムは Present のコピー ベースの Device 処理によるセマンティクスを保証します。つまり、フリップ ベースの Present 処理の場合のように、処理によってバック バッファーの内容がフロント バッファーの内容で置き換えられることはなく、バック バッファーの内容は変更されずに保持されます。

ウィンドウ スワップ チェーンの場合、Present 処理によって、バック バッファーの内容がコピー先ウィンドウのクライアント領域に即座にコピーされます。コピーとディスプレイ アダプターの垂直帰線期間との同期は行われないため、ティアリングが発生することがあります。

全画面表示スワップ チェーンの場合、ランタイムはフリップ処理とコピー処理の組み合わせ (必要に応じて、隠しバック バッファーでサポートされる) を使用して、Present 処理を行います。したがって、プレゼンテーションはディスプレイ アダプターの垂直帰線と同期され、その速度は選択されたプレゼンテーション間隔によって制限されます。

.NET Compact Framework によるサポート CopyVSync このスワップ エフェクトは Copy スワップ エフェクトと同様に動作しますが、ティアリングを防ぐためにコピーをモニターの垂直帰線と同期する点が異なります。

解説

PresentDevice メソッドを呼び出した後のバック バッファーの状態は、各スワップ エフェクトによって明確に定義されており、Microsoft Direct3D デバイスが全画面表示スワップ チェーンとウィンドウ スワップ チェーンのどちらで作成されたかには影響されません。特に、Flip スワップ エフェクトはウィンドウでも全画面表示でも同じように動作し、Direct3D ランタイムは追加のバッファーを作成することによってこれを保証します。そのため、パフォーマンスの低下を防ぐことができる場合は常に、アプリケーションで Discard を使用することをお勧めします。これは、現在のスワップ エフェクトが、メモリの消費やパフォーマンスの面で常に最も効率的であるためです。

全画面表示の転送先アルファは、Flip または Discard を使用するアプリケーションでは動作しません。つまり、DestinationBlendRenderStateManager は予測どおりに動作しません。これは、これらのスワップ エフェクトを持つ全画面表示スワップ チェーンに、ドライバーから見た明示的なピクセル形式がないためです。ドライバーは、アルファ チャネルのない表示形式を受け入れる必要があると推測します。

プラットフォーム

Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC

.NET Framework および .NET Compact Framework では、各プラットフォームのすべてのバージョンはサポートしていません。 サポートされているバージョンについては、「.NET フレームワークのシステム要件」を参照してください。

バージョン情報

.NET Compact Framework

サポート対象 : 3.5、2.0

参照

参照

Microsoft.WindowsMobile.DirectX.Direct3D 名前空間

その他の技術情報

.NET Compact Framework でモバイル Direct3D プログラミング