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플래그를 사용하여 해당 디바이스의 모든 컨텍스트 상태 개체를 만들어야 합니다.
컨텍스트 상태 개체와 디바이스 모두에 대해 단일 스레드 플래그를 설정하는 경우 하나의 스레드에서만 컨텍스트 메서드 및 디바이스 메서드의 전체 집합을 호출하도록 보장합니다. 따라서 중요한 섹션을 사용하여 디바이스 컨텍스트에 대한 액세스를 동기화할 필요가 없으며 런타임은 프로세서를 많이 사용하는 중요한 섹션으로 작업하지 않을 수 있습니다.
[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(Globally Unique Identifier)입니다. 이 값은 컨텍스트 상태 개체가 활성 상태일 때 디바이스의 동작을 지정합니다. 유효한 값은 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 인터페이스를 함수에 즉시 전달할 수 없습니다. Direct3D 10 호환 컨텍스트 상태 개체를 활성화하려면 먼저 SwapDeviceContextState 를 호출해야 합니다.
다음 표에서는 각 에뮬레이트된 인터페이스에 대해 활성 및 비활성 메서드를 보여 줍니다.
에뮬레이트된 인터페이스 | 활성 디바이스 또는 직접 컨텍스트 인터페이스 | 비활성 디바이스 또는 직접 컨텍스트 인터페이스 |
---|---|---|
ID3D11디바이스 또는 |
ID3D10Device | |
ID3D11DeviceContext (직접 컨텍스트에서 게시한 대로) Direct3D 10 또는 Microsoft Direct3D 10.1 에뮬레이트된 인터페이스는 지연된 컨텍스트에 영향을 주지 않습니다.) |
다음 표에서는 표시된 컨텍스트 상태 개체가 활성 상태일 때 런타임에서 사용하지 않도록 설정하는 바로 가기 컨텍스트 메서드를 보여 줍니다.
또는 __uuidof(ID3D10Device) 가 활성 상태인 경우 ID3D11DeviceContext__uuidof(ID3D10Device1) 의 메서드 |
가 활성 상태인 경우 __uuidof(ID3D11Device) ID3D10Device의 메서드 |
---|---|
IAGetVertexBuffers | |
IASetIndexBuffer | |
IASetInputLayout | |
IASetPrimitiveTopology | |
IASetVertexBuffers | |
다음 표에서는 표시된 컨텍스트 상태 개체가 활성 상태일 때 런타임에서 사용하지 않도록 설정하지 않는 바로 가기 컨텍스트 메서드를 보여 줍니다.
또는 __uuidof(ID3D10Device) 가 활성 상태인 경우 ID3D11DeviceContext__uuidof(ID3D10Device1) 의 메서드 |
가 활성 상태인 경우 __uuidof(ID3D11Device) ID3D10Device의 메서드 |
---|---|
다음 표에서는 런타임이 즉각적인 컨텍스트 메서드가 아니므로 사용하지 않도록 설정하지 않는 ID3D10Device 인터페이스 메서드를 보여 줍니다.
ID3D10Device의 메서드 |
---|
CreateQuery와 같은 Create* |
Windows Phone 8: 이 API가 지원됩니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 7용 Windows 8 및 플랫폼 업데이트 [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows Server 2008 R2용 Windows Server 2012 및 플랫폼 업데이트 [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | d3d11_1.h |
라이브러리 | D3D11.lib |