ID3D11DeviceContext1::SwapDeviceContextState, méthode (d3d11_1.h)

Active l’objet d’état de contexte donné et modifie le comportement actuel de l’appareil en Direct3D 11, Direct3D 10.1 ou Direct3D 10.

Syntaxe

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

Paramètres

[in] pState

Pointeur vers l’interface ID3DDeviceContextState pour l’objet d’état de contexte créé précédemment via la méthode ID3D11Device1::CreateDeviceContextState . Si SwapDeviceContextState est appelé avec pState défini sur NULL, l’appel n’a aucun effet.

[out, optional] ppPreviousState

Pointeur vers une variable qui reçoit un pointeur vers l’interface ID3DDeviceContextState pour l’objet d’état de contexte activé précédemment.

Valeur de retour

Aucune

Remarques

SwapDeviceContextState modifie le comportement de l’appareil. Ce comportement d’appareil dépend de l’interface émulée que vous avez passée au paramètre EmulatedInterface de la méthode ID3D11Device1::CreateDeviceContextState lorsque vous avez créé l’objet d’état de contexte.

SwapDeviceContextState n’est pas pris en charge sur un contexte différé.

SwapDeviceContextState désactive les interfaces d’appareil incompatibles ID3D10Device, ID3D10Device1, ID3D11Device et ID3D11Device1. Lorsqu’un objet d’état de contexte est actif, le runtime désactive certaines méthodes sur l’appareil et les interfaces de contexte. Objet d’état de contexte qui est créé avec __uuidof(ID3D11Device1) ou __uuidof(ID3D11Device) désactive la plupart des interfaces d’appareil Direct3D 10. Objet d’état de contexte qui est créé avec __uuidof(ID3D10Device1) ou __uuidof(ID3D10Device) désactive la plupart des méthodes ID3D11DeviceContext . Pour plus d’informations sur ce comportement, consultez ID3D11Device1::CreateDeviceContextState.

SwapDeviceContextState active l’objet d’état de contexte spécifié par pState. Cela signifie que les comportements d’appareil associés au niveau de fonctionnalité et à l’interface compatible de l’objet d’état de contexte sont activés sur l’appareil Direct3D jusqu’à l’appel suivant à SwapDeviceContextState. En outre, tout état enregistré lors de la dernière activité de cet objet d’état de contexte est désormais réactivé, de sorte que l’état précédent est remplacé.

SwapDeviceContextState définit ppPreviousState sur l’objet d’état de contexte le plus récemment activé. L’objet permet à l’appelant d’enregistrer, puis de restaurer ultérieurement l’état précédent de l’appareil. Ce comportement est utile dans une architecture de plug-in comme Direct2D qui partage un appareil Direct3D avec ses plug-ins. Une interface Direct2D peut utiliser des objets d’état de contexte pour enregistrer et restaurer l’état de l’application.

Si l’appelant n’a pas déjà appelé la méthode ID3D11Device1::CreateDeviceContextState pour créer un objet d’état de contexte précédent, SwapDeviceContextState définit ppPreviousState sur l’objet d’état de contexte par défaut. Dans les deux cas, l’utilisation de SwapDeviceContextState est la même.

Le niveau de fonctionnalité qui est spécifié par l’application et qui est choisi par l’objet d’état de contexte dans la liste acceptable que l’application fournit à ID3D11Device1::CreateDeviceContextState, contrôle le niveau de fonctionnalité du contexte immédiat chaque fois que l’objet d’état de contexte est actif. Étant donné que l’appareil Direct3D 11 est à thread libre, les méthodes d’appareil ne peuvent pas interroger le niveau de fonctionnalité de contexte immédiat actuel. Au lieu de cela, l’appareil s’exécute à un niveau de fonctionnalité qui correspond au maximum de tous les niveaux de fonctionnalité des objets d’état de contexte créés précédemment. Cela signifie que le niveau de fonctionnalité de l’appareil peut augmenter dynamiquement.

Le niveau de fonctionnalité de l’objet d’état de contexte contrôle les fonctionnalités disponibles à partir du contexte immédiat. Toutefois, pour conserver le contrat à thread libre des méthodes d’appareil Direct3D 11 (en particulier les méthodes de création de ressources), le niveau de fonctionnalité de limite supérieure de tous les objets d’état de contexte créés contrôle l’ensemble des ressources créées par l’appareil.

Étant donné que l’interface objet d’état de contexte est publiée par le contexte immédiat, l’interface nécessite le même modèle de thread que le contexte immédiat. Plus précisément, SwapDeviceContextState est à thread unique par rapport aux autres méthodes de contexte immédiat et par rapport aux méthodes équivalentes de ID3D10Device.

Fondamentalement, étant donné qu’un seul des comportements ref-count Direct3D 10 ou Direct3D 11 peut être disponible à la fois, l’une des interfaces Direct3D 10 et Direct3D 11 doit rompre son contrat ref-count. Pour éviter cette situation, l’activation d’un objet d’état de contexte désactive l’interface de version incompatible. En outre, si vous appelez une méthode d’une interface de version incompatible, l’appel échoue en mode silencieux si la méthode a le type de retour void, retourne une valeur HRESULTde E_INVALIDARG ou définit un paramètre out sur NULL.

Lorsque vous passez du mode Direct3D 11 au mode Direct3D 10 ou Direct3D 10.1, le comportement de liaison de l’appareil change. Plus précisément, la version finale d’une ressource entraîne la dissocié en mode Direct3D 10 ou Direct3D 10.1. Lors de la version finale, une application libère toutes les références de la ressource, y compris les références indirectes telles que la liaison de la vue à la ressource et la liaison de l’objet d’état de contexte à l’une des ressources liées de l’objet d’état de contexte. Toute ressource liée à laquelle l’application n’a aucune référence est dissociée et détruite, afin de maintenir le comportement Direct3D 10.

SwapDeviceContextState n’affecte pas l’état que ID3D11VideoContext définit.

Les listes de commandes générées par des contextes différés ne contiennent pas de référence aux objets d’état de contexte et ne sont pas affectées par les futures mises à jour des objets d’état de contexte.

Aucun objet asynchrone n’est affecté par SwapDeviceContextState. Par exemple, si une requête est active avant un appel à SwapDeviceContextState, elle est toujours active après l’appel.

Configuration requise

   
Client minimal pris en charge Windows 8 et mise à jour de plateforme pour Windows 7 [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2012 et Platform Update pour Windows Server 2008 R2 [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête d3d11_1.h
Bibliothèque D3D11.lib

Voir aussi

ID3D11DeviceContext1