Метод 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
Сочетание D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG значений , объединенных с помощью побитовой операции OR . Полученное значение указывает, как создать объект состояния контекста. Флаг 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, необходимо задать для FeatureLevels значение больше 0, так как нельзя задать для pFeatureLevelsзначение NULL.
SDKVersion
Тип: UINT
Версия пакета SDK. Для этого параметра необходимо задать значение D3D11_SDK_VERSION.
EmulatedInterface
Тип: REFIID
Глобальный уникальный идентификатор (GUID) для эмулированного интерфейса. Это значение указывает поведение устройства при активном объекте состояния контекста. Допустимые значения получаются с помощью оператора __uuidof в интерфейсах ID3D10Device, ID3D10Device1, ID3D11Device и ID3D11Device1 . См. заметки.
[out, optional] pChosenFeatureLevel
Тип: D3D_FEATURE_LEVEL*
Указатель на переменную, которая получает значение D3D_FEATURE_LEVEL из массива pFeatureLevels . Это первое значение массива, с помощью которого CreateDeviceContextState удалось создать объект состояния контекста. Если вызов CreateDeviceContextState завершается ошибкой , переменная, на которую указывает pChosenFeatureLevel , имеет значение 0.
[out, optional] ppContextState
Тип: ID3DDeviceContextState**
Адрес указателя на объект ID3DDeviceContextState , представляющий состояние устройства Direct3D.
Возвращаемое значение
Тип: HRESULT
Этот метод возвращает один из кодов возврата Direct3D 11.
Комментарии
Значение REFIID эмулированного интерфейса — это GUID, полученный с помощью оператора __uuidof . Например, __uuidof(ID3D11Device)
получает GUID интерфейса для устройства Microsoft Direct3D 11.
Вызовите метод ID3D11DeviceContext1::SwapDeviceContextState , чтобы активировать объект состояния контекста. Если объект состояния контекста активен, поведение устройства, связанное как с уровнем функций объекта состояния контекста, так и с совместимым интерфейсом, активируются на устройстве Direct3D до следующего вызова SwapDeviceContextState.
Если объект состояния контекста активен, среда выполнения отключает определенные методы в интерфейсе устройства и контекста. Например, объект состояния контекста, созданный с __uuidof(ID3D11Device)
помощью , приведет к тому, что среда выполнения отключит большинство интерфейсов устройств Microsoft Direct3D 10, а объект состояния контекста, созданный с __uuidof(ID3D10Device1)
помощью или __uuidof(ID3D10Device)
, приведет к отключению среды выполнения большинства методов ID3D11DeviceContext .
Такое поведение гарантирует, что пользователь эмулированного интерфейса не сможет задать состояние устройства, которое другой эмулированный интерфейс не может выразить. Это ограничение гарантирует, что эмулированный интерфейс ID3D10Device1 точно отражает полное состояние конвейера и что эмулированный интерфейс не будет работать в соответствии с исходным определением интерфейса.
Например, предположим, что этап тесселяции активируется через интерфейс ID3D11DeviceContext при создании устройства с помощью D3D11CreateDevice или D3D11CreateDeviceAndSwapChain, а не через эквиваленты Direct3D 10. Так как контекст Direct3D 11 активен, интерфейс Direct3D 10 неактивен при первом получении с помощью QueryInterface. Это означает, что невозможно сразу передать интерфейс Direct3D 10, полученный с устройства Direct3D 11, в функцию. Сначала необходимо вызвать SwapDeviceContextState , чтобы активировать объект состояния контекста, совместимый с Direct3D 10.
В следующей таблице показаны активные и неактивные методы для каждого эмулированного интерфейса.
Эмулированный интерфейс | Интерфейсы активного устройства или непосредственного контекста | Интерфейсы неактивного устройства или непосредственного контекста |
---|---|---|
ID3D11Device или |
ID3D10Device | |
ID3D10Device1 или |
ID3D11DeviceContext (опубликовано непосредственным контекстом. Эмулированный интерфейс Direct3D 10 или Microsoft Direct3D 10.1 не влияет на отложенные контексты.) |
В следующей таблице показаны непосредственные методы контекста, которые среда выполнения отключает, когда указанные объекты состояния контекста активны.
Методы ID3D11DeviceContext , если __uuidof(ID3D10Device1) или __uuidof(ID3D10Device) активен |
Методы ID3D10Device , если __uuidof(ID3D11Device) активен |
---|---|
IAGetVertexBuffers | |
IASetIndexBuffer | |
IASetInputLayout | |
IASetPrimitiveTopology | |
IASetVertexBuffers | |
В следующей таблице показаны непосредственные методы контекста, которые среда выполнения не отключает, когда указанные объекты контекстного состояния активны.
Методы ID3D11DeviceContext , если __uuidof(ID3D10Device1) или __uuidof(ID3D10Device) активна |
Методы ID3D10Device , если __uuidof(ID3D11Device) активен |
---|---|
В следующей таблице показаны методы интерфейса ID3D10Device , которые среда выполнения не отключает, так как они не являются непосредственными методами контекста.
Методы ID3D10Device |
---|
Create*, например CreateQuery |
Windows Phone 8. Этот API поддерживается.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 8 и обновление платформы для Windows 7 [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2012 и обновление платформы для Windows Server 2008 R2 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | d3d11_1.h |
Библиотека | D3D11.lib |