Compartilhar via


Método ID3D11DeviceContext1::SwapDeviceContextState (d3d11_1.h)

Ativa o objeto de estado de contexto fornecido e altera o comportamento do dispositivo atual para Direct3D 11, Direct3D 10.1 ou Direct3D 10.

Sintaxe

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

Parâmetros

[in] pState

Um ponteiro para a interface ID3DDeviceContextState para o objeto de estado de contexto que foi criado anteriormente por meio do método ID3D11Device1::CreateDeviceContextState . Se SwapDeviceContextState for chamado com pState definido como NULL, a chamada não terá efeito.

[out, optional] ppPreviousState

Um ponteiro para uma variável que recebe um ponteiro para a interface ID3DDeviceContextState para o objeto de estado de contexto ativado anteriormente.

Valor retornado

Nenhum

Comentários

SwapDeviceContextState altera o comportamento do dispositivo. Esse comportamento do dispositivo depende da interface emulada que você passou para o parâmetro EmulatedInterface do método ID3D11Device1::CreateDeviceContextState quando você criou o objeto de estado de contexto.

SwapDeviceContextState não tem suporte em um contexto adiado.

SwapDeviceContextState desabilita as interfaces de dispositivo incompatíveis ID3D10Device, ID3D10Device1, ID3D11Device e ID3D11Device1. Quando um objeto de estado de contexto está ativo, o runtime desabilita determinados métodos no dispositivo e nas interfaces de contexto. Um objeto de estado de contexto criado com __uuidof(ID3D11Device1) ou __uuidof(ID3D11Device) desativa a maioria das interfaces do dispositivo Direct3D 10. Um objeto de estado de contexto criado com __uuidof(ID3D10Device1) ou __uuidof(ID3D10Device) desativa a maioria dos métodos ID3D11DeviceContext . Para obter mais informações sobre esse comportamento, consulte ID3D11Device1::CreateDeviceContextState.

SwapDeviceContextState ativa o objeto de estado de contexto especificado por pState. Isso significa que os comportamentos do dispositivo associados ao nível de recurso e à interface compatível do objeto de estado de contexto são ativados no dispositivo Direct3D até a próxima chamada para SwapDeviceContextState. Além disso, qualquer estado salvo quando esse objeto de estado de contexto estava ativo pela última vez agora é reativado, para que o estado anterior seja substituído.

SwapDeviceContextState define ppPreviousState como o objeto de estado de contexto ativado mais recentemente. O objeto permite que o chamador salve e, em seguida, restaure o estado anterior do dispositivo. Esse comportamento é útil em uma arquitetura de plug-in, como Direct2D, que compartilha um dispositivo Direct3D com seus plug-ins. Uma interface Direct2D pode usar objetos de estado de contexto para salvar e restaurar o estado do aplicativo.

Se o chamador não chamou anteriormente o método ID3D11Device1::CreateDeviceContextState para criar um objeto de estado de contexto anterior, SwapDeviceContextState define ppPreviousState como o objeto de estado de contexto padrão. Em ambos os casos, o uso de SwapDeviceContextState é o mesmo.

O nível de recurso especificado pelo aplicativo e que é escolhido pelo objeto de estado de contexto da lista aceitável que o aplicativo fornece a ID3D11Device1::CreateDeviceContextState controla o nível de recurso do contexto imediato sempre que o objeto de estado de contexto estiver ativo. Como o dispositivo Direct3D 11 é de thread livre, os métodos do dispositivo não podem consultar o nível de recurso de contexto imediato atual. Em vez disso, o dispositivo é executado em um nível de recurso que é o máximo de todos os níveis de recursos de objetos de estado de contexto criados anteriormente. Isso significa que o nível de recurso do dispositivo pode aumentar dinamicamente.

O nível de recurso do objeto de estado de contexto controla a funcionalidade disponível no contexto imediato. No entanto, para manter o contrato de thread livre dos métodos de dispositivo Direct3D 11 — os métodos de criação de recursos em particular — o nível de recurso de associação superior de todos os objetos de estado de contexto criados controla o conjunto de recursos que o dispositivo cria.

Como a interface do objeto de estado de contexto é publicada pelo contexto imediato, a interface requer o mesmo modelo de threading que o contexto imediato. Especificamente, SwapDeviceContextState é de thread único em relação aos outros métodos de contexto imediatos e em relação aos métodos equivalentes de ID3D10Device.

Crucialmente, como apenas um dos comportamentos de contagem de ref count do Direct3D 10 ou Direct3D 11 pode estar disponível por vez, uma das interfaces Direct3D 10 e Direct3D 11 deve interromper seu contrato de ref count. Para evitar essa situação, a ativação de um objeto de estado de contexto desativa a interface de versão incompatível. Além disso, se você chamar um método de uma interface de versão incompatível, a chamada falhará silenciosamente se o método tiver o tipo de retorno nulo, retornará um valor HRESULT de E_INVALIDARG ou definirá qualquer parâmetro out como NULL.

Quando você alterna do modo Direct3D 11 para o modo Direct3D 10 ou Direct3D 10.1, o comportamento de associação do dispositivo muda. Especificamente, a versão final de um recurso induz a desassociação no modo Direct3D 10 ou no modo Direct3D 10.1. Durante a versão final, um aplicativo libera todas as referências do recurso, incluindo referências indiretas, como a vinculação da exibição para o recurso, e a vinculação do objeto de estado de contexto para qualquer um dos recursos associados do objeto de estado de contexto. Qualquer recurso associado ao qual o aplicativo não tem referência é desvinculado e destruído, a fim de manter o comportamento do Direct3D 10.

SwapDeviceContextState não afeta nenhum estado que ID3D11VideoContext define.

As listas de comandos geradas por contextos adiados não contêm uma referência a objetos de estado de contexto e não são afetadas por atualizações futuras para objetos de estado de contexto.

Nenhum objeto assíncrono é afetado por SwapDeviceContextState. Por exemplo, se uma consulta estiver ativa antes de uma chamada para SwapDeviceContextState, ela ainda estará ativa após a chamada.

Requisitos

   
Cliente mínimo com suporte Windows 8 e Platform Update para Windows 7 [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2012 e Platform Update para Windows Server 2008 R2 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho d3d11_1.h
Biblioteca D3D11.lib

Confira também

ID3D11DeviceContext1