Share via


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 는 호환되지 않는 디바이스 인터페이스 ID3D10Device, ID3D10Device1, ID3D11DeviceID3D11Device1을 사용하지 않도록 설정합니다. 컨텍스트 상태 개체가 활성 상태이면 런타임은 디바이스 및 컨텍스트 인터페이스에서 특정 메서드를 사용하지 않도록 설정합니다. Direct3D 10 디바이스 인터페이스의 대부분을 사용 __uuidof(ID3D11Device1) 하거나 __uuidof(ID3D11Device) 해제하는 컨텍스트 상태 개체입니다. 대부분의 ID3D11DeviceContext 메서드를 사용하여 __uuidof(ID3D10Device1) 만들거나 __uuidof(ID3D10Device) 해제하는 컨텍스트 상태 개체입니다. 이 동작에 대한 자세한 내용은 ID3D11Device1::CreateDeviceContextState를 참조하세요.

SwapDeviceContextState는 pState 에 지정된 컨텍스트 상태 개체를 활성화 합니다. 즉, 컨텍스트 상태 개체의 기능 수준 및 호환 인터페이스와 연결된 디바이스 동작은 SwapDeviceContextState에 대한 다음 호출까지 Direct3D 디바이스에서 활성화됩니다. 또한 이 컨텍스트 상태 개체가 마지막으로 활성 상태였을 때 저장된 모든 상태가 이제 다시 활성화되어 이전 상태가 대체됩니다.

SwapDeviceContextStateppPreviousState 를 가장 최근에 활성화된 컨텍스트 상태 개체로 설정합니다. 개체를 사용하면 호출자가 이전 디바이스 상태를 저장한 다음 나중에 복원할 수 있습니다. 이 동작은 Direct3D 디바이스를 플러그 인과 공유하는 Direct2D와 같은 플러그 인 아키텍처에서 유용합니다. Direct2D 인터페이스는 컨텍스트 상태 개체를 사용하여 애플리케이션의 상태를 저장하고 복원할 수 있습니다.

호출자가 이전에 ID3D11Device1::CreateDeviceContextState 메서드를 호출하여 이전 컨텍스트 상태 개체를 만들지 않은 경우 SwapDeviceContextStateppPreviousState 를 기본 컨텍스트 상태 개체로 설정합니다. 두 경우 모두 SwapDeviceContextState 사용은 동일합니다.

애플리케이션에서 지정하고 애플리케이션이 ID3D11Device1::CreateDeviceContextState에 제공하는 허용 가능한 목록에서 컨텍스트 상태 개체에 의해 선택된 기능 수준은 컨텍스트 상태 개체가 활성화될 때마다 바로 컨텍스트의 기능 수준을 제어합니다. Direct3D 11 디바이스는 자유 스레드이므로 디바이스 메서드는 현재 직접 컨텍스트 기능 수준을 쿼리할 수 없습니다. 대신 디바이스는 이전에 만든 모든 컨텍스트 상태 개체의 기능 수준 최대값인 기능 수준에서 실행됩니다. 즉, 디바이스의 기능 수준이 동적으로 증가할 수 있습니다.

컨텍스트 상태 개체의 기능 수준은 즉각적인 컨텍스트에서 사용할 수 있는 기능을 제어합니다. 그러나 Direct3D 11 디바이스 메서드의 자유 스레드 계약(특히 리소스 생성 방법)을 유지하기 위해 만들어진 모든 컨텍스트 상태 개체의 상한 기능 수준은 디바이스가 만드는 리소스 집합을 제어합니다.

컨텍스트 상태 개체 인터페이스는 직접 컨텍스트에 의해 게시되므로 인터페이스에는 직접 컨텍스트와 동일한 스레딩 모델이 필요합니다. 특히 SwapDeviceContextState 는 다른 직접 컨텍스트 메서드 및 ID3D10Device의 동등한 메서드와 관련하여 단일 스레드입니다.

결정적으로 Direct3D 10 또는 Direct3D 11 ref-count 동작 중 하나만 한 번에 사용할 수 있기 때문에 Direct3D 10 및 Direct3D 11 인터페이스 중 하나는 ref-count 계약을 중단해야 합니다. 이러한 상황을 방지하기 위해 컨텍스트 상태 개체의 활성화는 호환되지 않는 버전 인터페이스를 해제합니다. 또한 호환되지 않는 버전 인터페이스의 메서드를 호출하는 경우 메서드에 반환 형식 void가 있거나, E_INVALIDARGHRESULT 값을 반환하거나, out 매개 변수를 NULL로 설정하면 호출이 자동으로 실패합니다.

Direct3D 11 모드에서 Direct3D 10 모드 또는 Direct3D 10.1 모드로 전환하면 디바이스의 바인딩 동작이 변경됩니다. 특히 리소스의 최종 릴리스는 Direct3D 10 모드 또는 Direct3D 10.1 모드에서 바인딩 해제를 유도합니다. 최종 릴리스 중에 애플리케이션은 보기에서 리소스로의 연결, 컨텍스트 상태 개체에서 컨텍스트 상태 개체의 바인딩된 리소스에 대한 링크와 같은 간접 참조를 포함하여 모든 리소스 참조를 해제합니다. Direct3D 10 동작을 유지하기 위해 애플리케이션에 참조가 없는 바인딩된 리소스는 바인딩되지 않고 제거됩니다.

SwapDeviceContextStateID3D11VideoContext 가 설정하는 상태에 영향을 주지 않습니다.

지연된 컨텍스트에서 생성된 명령 목록은 컨텍스트 상태 개체에 대한 참조를 포함하지 않으며 컨텍스트 상태 개체에 대한 향후 업데이트의 영향을 받지 않습니다.

SwapDeviceContextState의 영향을 받는 비동기 개체는 없습니다. 예를 들어 SwapDeviceContextState를 호출하기 전에 쿼리가 활성 상태이면 호출 후에도 여전히 활성화됩니다.

요구 사항

   
지원되는 최소 클라이언트 Windows 7용 Windows 8 및 플랫폼 업데이트 [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2012 및 Windows Server 2008 R2용 플랫폼 업데이트 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 d3d11_1.h
라이브러리 D3D11.lib

추가 정보

ID3D11DeviceContext1