Método ID3D11Device1::CreateDeviceContextState (d3d11_1.h)
Cria um objeto de estado de contexto que contém todo o estado do Microsoft Direct3D e algum comportamento Direct3D.
Sintaxe
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
);
Parâmetros
Flags
Tipo: UINT
Uma combinação de valores D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG que são combinados usando uma operação OR bit a bit. O valor resultante especifica como criar o objeto de estado de contexto. O sinalizador D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED atualmente é o único sinalizador definido. Se o dispositivo original tiver sido criado com D3D11_CREATE_DEVICE_SINGLETHREADED, você deverá criar todos os objetos de estado de contexto desse dispositivo com o sinalizador D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED .
Se você definir o sinalizador de thread único para o objeto de estado de contexto e o dispositivo, você garantirá que chamará todo o conjunto de métodos de contexto e métodos de dispositivo apenas de um thread. Portanto, você não precisa usar seções críticas para sincronizar o acesso ao contexto do dispositivo e o runtime pode evitar trabalhar com essas seções críticas com uso intensivo de processador.
[in] pFeatureLevels
Tipo: const D3D_FEATURE_LEVEL*
Um ponteiro para uma matriz de valores D3D_FEATURE_LEVEL . A matriz pode conter elementos da lista a seguir e determina a ordem dos níveis de recursos para os quais a criação é tentada. Ao contrário de D3D11CreateDevice, você não pode definir pFeatureLevels como NULL porque não há nenhuma matriz de nível de recurso padrão.
{
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
Tipo: UINT
O número de elementos em pFeatureLevels. Ao contrário de D3D11CreateDevice, você deve definir FeatureLevels como maior que 0 porque não é possível definir pFeatureLevels como NULL.
SDKVersion
Tipo: UINT
A versão do SDK. Você deve definir esse parâmetro como D3D11_SDK_VERSION.
EmulatedInterface
Tipo: REFIID
O GUID (identificador global exclusivo) para a interface emulada. Esse valor especifica o comportamento do dispositivo quando o objeto de estado de contexto está ativo. Os valores válidos são obtidos usando o operador __uuidof nas interfaces ID3D10Device, ID3D10Device1, ID3D11Device e ID3D11Device1 . Consulte Observações.
[out, optional] pChosenFeatureLevel
Tipo: D3D_FEATURE_LEVEL*
Um ponteiro para uma variável que recebe um valor D3D_FEATURE_LEVEL da matriz pFeatureLevels . Esse é o primeiro valor de matriz com o qual CreateDeviceContextState conseguiu criar o objeto de estado de contexto. Se a chamada para CreateDeviceContextState falhar, a variável apontada por pChosenFeatureLevel será definida como zero.
[out, optional] ppContextState
Tipo: ID3DDeviceContextState**
O endereço de um ponteiro para um objeto ID3DDeviceContextState que representa o estado de um dispositivo Direct3D.
Retornar valor
Tipo: HRESULT
Esse método retorna um dos códigos de retorno do Direct3D 11.
Comentários
O valor REFIID da interface emulada é um GUID obtido pelo uso do operador __uuidof . Por exemplo, __uuidof(ID3D11Device)
obtém o GUID da interface para um dispositivo Microsoft Direct3D 11.
Chame o método ID3D11DeviceContext1::SwapDeviceContextState para ativar o objeto de estado de contexto. Quando o objeto de estado de contexto está ativo, os comportamentos do dispositivo associados ao nível de recurso do objeto de estado de contexto e sua interface compatível são ativados no dispositivo Direct3D até a próxima chamada para SwapDeviceContextState.
Quando um objeto de estado de contexto está ativo, o runtime desabilita determinados métodos no dispositivo e nas interfaces de contexto. Por exemplo, um objeto de estado de contexto criado com fará com __uuidof(ID3D11Device)
que o runtime desative a maioria das interfaces de dispositivo do Microsoft Direct3D 10 e um objeto de estado de contexto criado com ou __uuidof(ID3D10Device)
fará com __uuidof(ID3D10Device1)
que o runtime desative a maioria dos métodos ID3D11DeviceContext.
Esse comportamento garante que um usuário de uma interface emulada não possa definir o estado do dispositivo que a outra interface emulada não possa expressar. Essa restrição ajuda a garantir que a interface emulada ID3D10Device1 reflita com precisão o estado completo do pipeline e que a interface emulada não funcionará de forma contrária à sua definição de interface original.
Por exemplo, suponha que o estágio de mosaico seja ativado por meio da interface ID3D11DeviceContext ao criar o dispositivo por meio de D3D11CreateDevice ou D3D11CreateDeviceAndSwapChain, em vez de por meio dos equivalentes do Direct3D 10. Como o contexto do Direct3D 11 está ativo, uma interface do Direct3D 10 fica inativa quando você a recupera pela primeira vez por meio de QueryInterface. Isso significa que você não pode passar imediatamente uma interface direct3D 10 que você recuperou de um dispositivo Direct3D 11 para uma função. Primeiro, você deve chamar SwapDeviceContextState para ativar um objeto de estado de contexto compatível com Direct3D 10.
A tabela a seguir mostra os métodos ativos e inativos para cada interface emulada.
Interface emulada | Dispositivo ativo ou interfaces de contexto imediatas | Dispositivo inativo ou interfaces de contexto imediatas |
---|---|---|
ID3D11Device ou |
ID3D10Device | |
ID3D11DeviceContext (conforme publicado pelo contexto imediato. A interface emulada direct3D 10 ou Microsoft Direct3D 10.1 não tem efeito sobre contextos adiados.) |
A tabela a seguir mostra os métodos de contexto imediatos que o runtime desabilita quando os objetos de estado de contexto indicados estão ativos.
Métodos de ID3D11DeviceContext quando __uuidof(ID3D10Device1) ou __uuidof(ID3D10Device) está ativo |
Métodos de ID3D10Device quando __uuidof(ID3D11Device) está ativo |
---|---|
IAGetVertexBuffers | |
IASetIndexBuffer | |
IASetInputLayout | |
IASetPrimitiveTopology | |
IASetVertexBuffers | |
A tabela a seguir mostra os métodos de contexto imediatos que o runtime não desabilita quando os objetos de estado de contexto indicados estão ativos.
Métodos de ID3D11DeviceContext quando __uuidof(ID3D10Device1) ou __uuidof(ID3D10Device) está ativo |
Métodos de ID3D10Device quando __uuidof(ID3D11Device) está ativo |
---|---|
A tabela a seguir mostra os métodos de interface ID3D10Device que o runtime não desabilita porque não são métodos de contexto imediatos.
Métodos de ID3D10Device |
---|
Create*, como CreateQuery |
Windows Phone 8: há suporte para essa API.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 8 e Atualização de Plataforma para Windows 7 [aplicativos da área de trabalho | Aplicativos UWP] |
Servidor mínimo com suporte | Windows Server 2012 e Atualização de Plataforma para Windows Server 2008 R2 [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | d3d11_1.h |
Biblioteca | D3D11.lib |