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

Activa el objeto de estado de contexto especificado y cambia el comportamiento actual del dispositivo a Direct3D 11, Direct3D 10.1 o Direct3D 10.

Sintaxis

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

Parámetros

[in] pState

Puntero a la interfaz ID3DDeviceContextState para el objeto de estado de contexto que se creó anteriormente mediante el método ID3D11Device1::CreateDeviceContextState . Si se llama a SwapDeviceContextState con pState establecido en NULL, la llamada no tiene ningún efecto.

[out, optional] ppPreviousState

Puntero a una variable que recibe un puntero a la interfaz ID3DDeviceContextState para el objeto de estado de contexto activado previamente.

Valor devuelto

None

Observaciones

SwapDeviceContextState cambia el comportamiento del dispositivo. Este comportamiento del dispositivo depende de la interfaz emulada que pasó al parámetro EmulatedInterface del método ID3D11Device1::CreateDeviceContextState al crear el objeto de estado de contexto.

SwapDeviceContextState no se admite en un contexto diferido.

SwapDeviceContextState deshabilita las interfaces de dispositivo incompatibles ID3D10Device, ID3D10Device1, ID3D11Device e ID3D11Device1. Cuando un objeto de estado de contexto está activo, el tiempo de ejecución deshabilita determinados métodos en las interfaces de dispositivo y contexto. Objeto de estado de contexto que se crea con __uuidof(ID3D11Device1) o __uuidof(ID3D11Device) desactiva la mayoría de las interfaces de dispositivo direct3D 10. Objeto de estado de contexto que se crea con __uuidof(ID3D10Device1) o __uuidof(ID3D10Device) desactiva la mayoría de los métodos ID3D11DeviceContext . Para obtener más información sobre este comportamiento, vea ID3D11Device1::CreateDeviceContextState.

SwapDeviceContextState activa el objeto de estado de contexto especificado por pState. Esto significa que los comportamientos del dispositivo asociados con el nivel de característica del objeto de estado de contexto y la interfaz compatible se activan en el dispositivo Direct3D hasta la siguiente llamada a SwapDeviceContextState. Además, se reactiva ahora cualquier estado que se guardó cuando este objeto de estado de contexto estaba activo por última vez, de modo que se reemplace el estado anterior.

SwapDeviceContextState establece ppPreviousState en el objeto de estado de contexto activado más recientemente. El objeto permite que el autor de la llamada guarde y, a continuación, restaure el estado del dispositivo anterior. Este comportamiento es útil en una arquitectura de complemento como Direct2D que comparte un dispositivo Direct3D con sus complementos. Una interfaz de Direct2D puede usar objetos de estado de contexto para guardar y restaurar el estado de la aplicación.

Si el llamador no llamó previamente al método ID3D11Device1::CreateDeviceContextState para crear un objeto de estado de contexto anterior, SwapDeviceContextState establece ppPreviousState en el objeto de estado de contexto predeterminado. En cualquier caso, el uso de SwapDeviceContextState es el mismo.

El nivel de característica especificado por la aplicación y elegido por el objeto de estado de contexto de la lista aceptable que la aplicación proporciona a ID3D11Device1::CreateDeviceContextState controla el nivel de característica del contexto inmediato siempre que el objeto de estado de contexto esté activo. Dado que el dispositivo Direct3D 11 está libre en subproceso, los métodos de dispositivo no pueden consultar el nivel de característica de contexto inmediato actual. En su lugar, el dispositivo se ejecuta en un nivel de característica que es el máximo de todos los niveles de características de los objetos de estado de contexto creados anteriormente. Esto significa que el nivel de característica del dispositivo puede aumentar dinámicamente.

El nivel de característica del objeto de estado de contexto controla la funcionalidad disponible desde el contexto inmediato. Sin embargo, para mantener el contrato libre de subprocesos de los métodos de dispositivo de Direct3D 11 (los métodos de creación de recursos en particular), el nivel de característica de límite superior de todos los objetos de estado de contexto creados controla el conjunto de recursos que crea el dispositivo.

Dado que el contexto inmediato publica la interfaz de objeto de estado de contexto, la interfaz requiere el mismo modelo de subprocesos que el contexto inmediato. En concreto, SwapDeviceContextState está uniproceso con respecto a los otros métodos de contexto inmediatos y con respecto a los métodos equivalentes de ID3D10Device.

Fundamentalmente, dado que solo uno de los comportamientos de recuento de referencias de Direct3D 10 o Direct3D 11 puede estar disponible a la vez, una de las interfaces de Direct3D 10 y Direct3D 11 debe interrumpir su contrato de recuento de referencias. Para evitar esta situación, la activación de un objeto de estado de contexto desactiva la interfaz de versión incompatible. Además, si llama a un método de una interfaz de versión incompatible, se produce un error en la llamada silenciosamente si el método tiene el tipo de valor devuelto void, devuelve un valor HRESULT de E_INVALIDARG o establece cualquier parámetro out en NULL.

Cuando cambias del modo Direct3D 11 al modo Direct3D 10 o al modo Direct3D 10.1, cambia el comportamiento de enlace del dispositivo. En concreto, la versión final de un recurso induce un enlace en el modo Direct3D 10 o en el modo Direct3D 10.1. Durante la versión final, una aplicación libera todas las referencias del recurso, incluidas las referencias indirectas, como la vinculación desde la vista al recurso, y la vinculación del objeto de estado de contexto a cualquiera de los recursos enlazados del objeto de estado de contexto. Cualquier recurso enlazado al que la aplicación no tenga referencia es independiente y destruido, con el fin de mantener el comportamiento de Direct3D 10.

SwapDeviceContextState no afecta a ningún estado que id3D11VideoContext establece.

Las listas de comandos generadas por contextos diferidos no contienen una referencia a objetos de estado de contexto y no se ven afectadas por futuras actualizaciones de objetos de estado de contexto.

SwapDeviceContextState no afecta a ningún objeto asincrónico. Por ejemplo, si una consulta está activa antes de una llamada a SwapDeviceContextState, todavía está activa después de la llamada.

Requisitos

   
Cliente mínimo compatible Windows 8 y Platform Update para Windows 7 [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2012 y actualización de plataforma para Windows Server 2008 R2 [aplicaciones de escritorio | Aplicaciones para UWP]
Plataforma de destino Windows
Encabezado d3d11_1.h
Library D3D11.lib

Consulte también

ID3D11DeviceContext1