Поделиться через


Метод ID3D11DeviceContext1::SwapDeviceContextState (d3d11_1.h)

Активирует заданный объект состояния контекста и изменяет текущее поведение устройства на Direct3D 11, Direct3D 10.1 или Direct3D 10.

Синтаксис

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

Параметры

[in] pState

Указатель на интерфейс ID3DDeviceContextState для объекта состояния контекста, созданного ранее с помощью метода ID3D11Device1::CreateDeviceContextState . Если метод SwapDeviceContextState вызывается с параметром pState , для которого задано значение NULL, вызов не оказывает никакого влияния.

[out, optional] ppPreviousState

Указатель на переменную, получающую указатель на интерфейс ID3DeviceContextState для ранее активированного объекта состояния контекста.

Возвращаемое значение

None

Remarks

SwapDeviceContextState изменяет поведение устройства. Это поведение устройства зависит от эмулированного интерфейса, переданного в параметр EmulatedInterface метода ID3D11Device1::CreateDeviceContextState при создании объекта состояния контекста.

SwapDeviceContextState не поддерживается в отложенном контексте.

SwapDeviceContextState отключает несовместимые интерфейсы устройств ID3D10Device, ID3D10Device1, ID3D11Device и ID3D11Device1. Если объект состояния контекста активен, среда выполнения отключает определенные методы в интерфейсе устройства и контекста. Объект состояния контекста, который создается с __uuidof(ID3D11Device1) помощью или __uuidof(ID3D11Device) отключает большинство интерфейсов устройств Direct3D 10. Объект состояния контекста, который создается с __uuidof(ID3D10Device1) помощью или __uuidof(ID3D10Device) отключает большинство методов ID3D11DeviceContext . Дополнительные сведения об этом поведении см. в разделе ID3D11Device1::CreateDeviceContextState.

SwapDeviceContextState активирует объект состояния контекста, заданный pState. Это означает, что поведение устройства, связанное с уровнем функций объекта состояния контекста и совместимым интерфейсом, активируется на устройстве Direct3D до следующего вызова SwapDeviceContextState. Кроме того, все состояния, которые были сохранены, когда этот объект состояния контекста был последним активным, теперь повторно активируется, чтобы заменить предыдущее состояние.

SwapDeviceContextState задает для параметра ppPreviousState последний активированный объект состояния контекста. Объект позволяет вызывающей объекту сохранить, а затем восстановить предыдущее состояние устройства. Это поведение полезно в архитектуре подключаемых модулей, таких как Direct2D, которая совместно использует устройство Direct3D со своими подключаемыми модулями. Интерфейс Direct2D может использовать объекты контекстного состояния для сохранения и восстановления состояния приложения.

Если вызывающий объект ранее не вызывал метод ID3D11Device1::CreateDeviceContextState для создания предыдущего объекта состояния контекста, SwapDeviceContextState устанавливает ppPreviousState в объект состояния контекста по умолчанию. В любом случае использование SwapDeviceContextState одинаково.

Уровень компонентов, заданный приложением и выбранный объектом состояния контекста из допустимого списка, который приложение предоставляет id3D11Device1::CreateDeviceContextState, управляет уровнем компонентов непосредственного контекста при каждом активном объекте состояния контекста. Так как устройство Direct3D 11 является свободным потоком, методы устройства не могут запрашивать текущий уровень функций немедленного контекста. Вместо этого устройство работает на уровне компонентов, который является максимальным для всех ранее созданных уровней компонентов объектов состояния контекста. Это означает, что уровень функций устройства может динамически увеличиваться.

Уровень компонентов объекта состояния контекста управляет функциональными возможностями, доступными из непосредственного контекста. Однако для поддержания свободнопотокового контракта методов устройства Direct3D 11 (в частности, методов создания ресурсов) уровень компонентов верхней границы всех созданных объектов состояния контекста управляет набором ресурсов, создаваемых устройством.

Так как интерфейс объекта состояния контекста публикуется непосредственным контекстом, интерфейсу требуется та же модель потоков, что и непосредственный контекст. В частности, SwapDeviceContextState является однопоточным по отношению к другим методам непосредственного контекста и по отношению к эквивалентным методам ID3D10Device.

Важно отметить, что, поскольку одновременно может быть доступно только одно из поведений счетчика ссылок Direct3D 10 или Direct3D 11, один из интерфейсов Direct3D 10 и Direct3D 11 должен разорвать контракт счетчика ссылок. Чтобы избежать этой ситуации, активация объекта состояния контекста отключает несовместимый интерфейс версии. Кроме того, при вызове метода несовместимого интерфейса версии вызов автоматически завершается ошибкой, если метод имеет возвращаемый тип void, возвращает значение HRESULTE_INVALIDARG или задает для любого параметра 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
Header d3d11_1.h
Библиотека D3D11.lib

См. также раздел

ID3D11DeviceContext1