ID3D11DeviceContext1::SwapDeviceContextState メソッド (d3d11_1.h)

特定のコンテキスト状態オブジェクトをアクティブ化し、現在のデバイスの動作を Direct3D 11、Direct3D 10.1、または Direct3D 10 に変更します。

構文

void SwapDeviceContextState(
  [in]            ID3DDeviceContextState *pState,
  [out, optional] ID3DDeviceContextState **ppPreviousState
);

パラメーター

[in] pState

ID3D11Device1::CreateDeviceContextState メソッドを使用して以前に作成されたコンテキスト状態オブジェクトの ID3DDeviceContextState インターフェイスへのポインター。 pStateNULL に設定して SwapDeviceContextState を呼び出した場合、呼び出しは無効になります。

[out, optional] ppPreviousState

以前にアクティブ化されたコンテキスト状態オブジェクトの ID3DDeviceContextState インターフェイスへのポインターを受け取る変数へのポインター。

戻り値

なし

解説

SwapDeviceContextState は 、デバイスの動作を変更します。 このデバイスの動作は、コンテキスト状態オブジェクトを作成したときに ID3D11Device1::CreateDeviceContextState メソッドの EmulatedInterface パラメーターに渡したエミュレートされたインターフェイスによって異なります。

SwapDeviceContextState は、遅延コンテキストではサポートされていません。

SwapDeviceContextState は、互換性のないデバイス インターフェイス ID3D10DeviceID3D10Device1ID3D11DeviceID3D11Device1 を無効にします。 コンテキスト状態オブジェクトがアクティブな場合、ランタイムはデバイスインターフェイスとコンテキストインターフェイス上の特定のメソッドを無効にします。 Direct3D 10 デバイス インターフェイスの大部分を使用 __uuidof(ID3D11Device1) して作成または __uuidof(ID3D11Device) オフにするコンテキスト状態オブジェクト。 ID3D11DeviceContext メソッドの大部分を使用__uuidof(ID3D10Device1)して作成または__uuidof(ID3D10Device)オフにするコンテキスト状態オブジェクト。 この動作の詳細については、「 ID3D11Device1::CreateDeviceContextState」を参照してください。

SwapDeviceContextState、pState で指定されたコンテキスト状態オブジェクトをアクティブにします。 つまり、コンテキスト状態オブジェクトの機能レベルと互換性のあるインターフェイスに関連付けられているデバイスの動作は、 次に SwapDeviceContextState を呼び出すまで Direct3D デバイスでアクティブ化されます。 さらに、このコンテキスト状態オブジェクトが最後にアクティブになったときに保存された状態が再アクティブ化され、前の状態が置き換えられます。

SwapDeviceContextState、ppPreviousState を最後にアクティブ化されたコンテキスト状態オブジェクトに設定します。 オブジェクトを使用すると、呼び出し元は以前のデバイスの状態を保存し、後で復元できます。 この動作は、Direct3D デバイスをそのプラグインと共有する Direct2D などのプラグイン アーキテクチャで役立ちます。Direct2D インターフェイスでは、コンテキスト状態オブジェクトを使用して、アプリケーションの状態を保存および復元できます。

呼び出し元が以前に ID3D11Device1::CreateDeviceContextState メソッドを呼び出して以前のコンテキスト状態オブジェクトを作成しなかった場合、 SwapDeviceContextStateppPreviousState を既定のコンテキスト状態オブジェクトに設定します。 どちらの場合も、 SwapDeviceContextState の使用は同じです。

アプリケーションで指定され、アプリケーションが ID3D11Device1::CreateDeviceContextState に提供する受け入れ可能なリストからコンテキスト状態オブジェクトによって選択される機能レベルは、コンテキスト状態オブジェクトがアクティブであるたびに、即時コンテキストの機能レベルを制御します。 Direct3D 11 デバイスはフリー スレッドであるため、デバイス メソッドは現在の即時コンテキスト機能レベルを照会できません。 代わりに、デバイスは、以前に作成されたすべてのコンテキスト状態オブジェクトの機能レベルの最大値である機能レベルで実行されます。 これは、デバイスの機能レベルが動的に増加する可能性があることを意味します。

コンテキスト状態オブジェクトの機能レベルは、イミディエイト コンテキストから使用できる機能を制御します。 ただし、Direct3D 11 デバイス メソッド (特にリソース作成メソッド) のフリースレッド コントラクトを維持するために、作成されたすべてのコンテキスト状態オブジェクトの上限機能レベルは、デバイスが作成するリソースのセットを制御します。

コンテキスト状態オブジェクト インターフェイスはイミディエイト コンテキストによって発行されるため、インターフェイスにはイミディエイト コンテキストと同じスレッド モデルが必要です。 具体的には、 SwapDeviceContextState は、他の即時コンテキスト メソッドと ID3D10Device の同等のメソッドに関してシングルスレッドです。

重要なのは、一度に使用できる Direct3D 10 または Direct3D 11 の ref-count 動作の 1 つだけなので、Direct3D 10 インターフェイスと Direct3D 11 インターフェイスの 1 つで ref-count コントラクトを解除する必要があります。 この状況を回避するために、コンテキスト状態オブジェクトをアクティブ化すると、互換性のないバージョン インターフェイスがオフになります。 また、互換性のないバージョン インターフェイスのメソッドを呼び出した場合、メソッドが戻り値の型 void を持っている場合、E_INVALIDARGの HRESULT 値を返すか、out パラメーターを NULL に設定すると、呼び出しは自動的に失敗します。

Direct3D 11 モードから Direct3D 10 モードまたは Direct3D 10.1 モードに切り替えると、デバイスのバインド動作が変わります。 具体的には、リソースの最終リリースでは、Direct3D 10 モードまたは Direct3D 10.1 モードでのバインド解除が誘導されます。 最終リリース中に、アプリケーションは、ビューからリソースへのリンケージ、コンテキスト状態オブジェクトからコンテキスト状態オブジェクトのバインドされたリソースへのリンケージなどの間接参照を含む、リソースのすべての参照を解放します。 Direct3D 10 の動作を維持するために、アプリケーションが参照を持たないバインドされたリソースはバインドされておらず、破棄されます。

SwapDeviceContextState、ID3D11VideoContext が設定する状態には影響しません。

遅延コンテキストによって生成されるコマンド リストは、コンテキスト状態オブジェクトへの参照を保持せず、コンテキスト状態オブジェクトに対する今後の更新の影響を受けません。

SwapDeviceContextState の影響を受ける非同期オブジェクトはありません。 たとえば、 SwapDeviceContextState の呼び出しの前にクエリがアクティブな場合、呼び出し後もアクティブです。

要件

   
サポートされている最小のクライアント Windows 8 および Windows 7 用プラットフォーム更新プログラム [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows Server 2012 および Windows Server 2008 R2 用プラットフォーム更新プログラム [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー d3d11_1.h
Library D3D11.lib

関連項目

ID3D11DeviceContext1