ID3D11Device1::CreateDeviceContextState メソッド (d3d11_1.h)
すべての Microsoft Direct3D 状態といくつかの Direct3D 動作を保持するコンテキスト状態オブジェクトを作成します。
構文
HRESULT CreateDeviceContextState(
UINT Flags,
[in] const D3D_FEATURE_LEVEL *pFeatureLevels,
UINT FeatureLevels,
UINT SDKVersion,
REFIID EmulatedInterface,
[out, optional] D3D_FEATURE_LEVEL *pChosenFeatureLevel,
[out, optional] ID3DDeviceContextState **ppContextState
);
パラメーター
Flags
型: UINT
ビットごとの OR 演算を使用して結合されるD3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG値の組み合わせ。 結果の値は、コンテキスト状態オブジェクトを作成する方法を指定します。 現在、D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED フラグは定義されている唯一のフラグです。 元のデバイスが D3D11_CREATE_DEVICE_SINGLETHREADED で作成された場合は、そのデバイスからすべてのコンテキスト状態オブジェクトを D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED フラグで作成する必要があります。
コンテキスト状態オブジェクトとデバイスの両方にシングルスレッド フラグを設定する場合は、コンテキスト メソッドとデバイス メソッドのセット全体を 1 つのスレッドからのみ呼び出すようにします。 そのため、重要なセクションを使用してデバイス コンテキストへのアクセスを同期する必要はありません。ランタイムは、プロセッサを集中的に使用するクリティカル セクションの操作を回避できます。
[in] pFeatureLevels
型: const D3D_FEATURE_LEVEL*
D3D_FEATURE_LEVEL値の配列へのポインター。 配列には、次の一覧の要素を含め、作成が試行される機能レベルの順序を決定できます。 D3D11CreateDevice とは異なり、既定の機能レベル配列がないため、pFeatureLevelsを NULL に設定することはできません。
{
D3D_FEATURE_LEVEL_11_1,
D3D_FEATURE_LEVEL_11_0,
D3D_FEATURE_LEVEL_10_1,
D3D_FEATURE_LEVEL_10_0,
D3D_FEATURE_LEVEL_9_3,
D3D_FEATURE_LEVEL_9_2,
D3D_FEATURE_LEVEL_9_1,
};
FeatureLevels
型: UINT
pFeatureLevels 内の要素の数。 D3D11CreateDevice とは異なり、pFeatureLevels を NULL に設定できないため、FeatureLevels を 0 より大きい値に設定する必要があります。
SDKVersion
型: UINT
SDK のバージョン。 このパラメーターは 、D3D11_SDK_VERSIONに設定する必要があります。
EmulatedInterface
型: REFIID
エミュレートされたインターフェイスのグローバル一意識別子 (GUID)。 この値は、コンテキスト状態オブジェクトがアクティブな場合のデバイスの動作を指定します。 有効な値は、ID3D10Device、ID3D10Device1、ID3D11Device、ID3D11Device1 インターフェイスの __uuidof 演算子を使用して取得されます。 「解説」を参照してください。
[out, optional] pChosenFeatureLevel
種類: D3D_FEATURE_LEVEL*
pFeatureLevels 配列からD3D_FEATURE_LEVEL値を受け取る変数へのポインター。 これは、 CreateDeviceContextState がコンテキスト状態オブジェクトの作成に成功した最初の配列値です。 CreateDeviceContextState の呼び出しが失敗した場合、pChosenFeatureLevel が指す変数は 0 に設定されます。
[out, optional] ppContextState
種類: ID3DDeviceContextState**
Direct3D デバイスの状態を表す ID3DDeviceContextState オブジェクトへのポインターのアドレス。
戻り値
型: HRESULT
このメソッドは、 Direct3D 11 リターン コードのいずれかを返します。
注釈
エミュレートされたインターフェイスの REFIID 値は、 __uuidof 演算子を使用して取得された GUID です。 たとえば、 は、 __uuidof(ID3D11Device)
Microsoft Direct3D 11 デバイスへのインターフェイスの GUID を取得します。
ID3D11DeviceContext1::SwapDeviceContextState メソッドを呼び出して、コンテキスト状態オブジェクトをアクティブにします。 コンテキスト状態オブジェクトがアクティブな場合、コンテキスト状態オブジェクトの機能レベルとその互換性のあるインターフェイスの両方に関連付けられているデバイスの動作は、 次に SwapDeviceContextState を呼び出すまで Direct3D デバイスでアクティブ化されます。
コンテキスト状態オブジェクトがアクティブな場合、ランタイムはデバイスインターフェイスとコンテキストインターフェイス上の特定のメソッドを無効にします。 たとえば、 で__uuidof(ID3D11Device)
作成されたコンテキスト状態オブジェクトを使用すると、ランタイムは Microsoft Direct3D 10 デバイス インターフェイスの大部分をオフにし、または __uuidof(ID3D10Device)
で作成された__uuidof(ID3D10Device1)
コンテキスト状態オブジェクトを使用すると、ランタイムはほとんどの ID3D11DeviceContext メソッドをオフにします。
この動作により、いずれかのエミュレートされたインターフェイスのユーザーが、他のエミュレートされたインターフェイスが表現できないデバイス状態を設定できなくなります。 この制限は、 ID3D10Device1 エミュレートインターフェイスがパイプラインの完全な状態を正確に反映し、エミュレートされたインターフェイスが元のインターフェイス定義に反して動作しないことを保証するのに役立ちます。
たとえば、Direct3D 10 と同等のデバイスではなく、D3D11CreateDevice または D3D11CreateDeviceAndSwapChain を使用してデバイスを作成するときに、テセレーション ステージが ID3D11DeviceContext インターフェイスを介してアクティブになるとします。 Direct3D 11 コンテキストはアクティブであるため、 最初に QueryInterface を使用して取得すると、Direct3D 10 インターフェイスは非アクティブになります。 つまり、Direct3D 11 デバイスから取得した Direct3D 10 インターフェイスを関数にすぐに渡すことはできません。 最初に SwapDeviceContextState を呼び出して、Direct3D 10 互換のコンテキスト状態オブジェクトをアクティブにする必要があります。
次の表は、エミュレートされた各インターフェイスでアクティブで非アクティブなメソッドを示しています。
エミュレートされたインターフェイス | アクティブなデバイスまたはイミディエイト コンテキスト インターフェイス | 非アクティブなデバイスまたはイミディエイト コンテキスト インターフェイス |
---|---|---|
ID3D11Device または |
ID3D10Device | |
ID3D10Device1 または |
ID3D11DeviceContext (イミディエイト コンテキストによって公開されます。Direct3D 10 または Microsoft Direct3D 10.1 エミュレートインターフェイスは、遅延コンテキストには影響しません)。 |
次の表は、指定されたコンテキスト状態オブジェクトがアクティブな場合にランタイムが無効にする即時コンテキスト メソッドを示しています。
または __uuidof(ID3D10Device) がアクティブな場合__uuidof(ID3D10Device1) の ID3D11DeviceContext のメソッド |
がアクティブな場合__uuidof(ID3D11Device) の ID3D10Device のメソッド |
---|---|
IAGetVertexBuffers | |
IASetIndexBuffer | |
IASetInputLayout | |
IASetPrimitiveTopology | |
IASetVertexBuffers | |
次の表は、指定されたコンテキスト状態オブジェクトがアクティブな場合にランタイムが無効にしない即時コンテキスト メソッドを示しています。
または __uuidof(ID3D10Device) がアクティブな場合__uuidof(ID3D10Device1) の ID3D11DeviceContext のメソッド |
がアクティブな場合__uuidof(ID3D11Device) の ID3D10Device のメソッド |
---|---|
次の表は、ランタイムが即時コンテキスト メソッドではないので無効にしない ID3D10Device インターフェイス メソッドを示しています。
ID3D10Device のメソッド |
---|
Create* (CreateQuery など) |
Windows Phone 8: この API はサポートされています。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 7 のWindows 8とプラットフォーム更新プログラム [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2008 R2 のWindows Server 2012とプラットフォーム更新プログラム [デスクトップ アプリ |UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | d3d11_1.h |
Library | D3D11.lib |