Freigeben über


ID3D11DeviceContext1::SwapDeviceContextState-Methode (d3d11_1.h)

Aktiviert das angegebene Kontextzustandsobjekt und ändert das aktuelle Geräteverhalten in Direct3D 11, Direct3D 10.1 oder Direct3D 10.

Syntax

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

Parameter

[in] pState

Ein Zeiger auf die ID3DDeviceContextState-Schnittstelle für das Kontextstatusobjekt, das zuvor über die ID3D11Device1::CreateDeviceContextState-Methode erstellt wurde. Wenn SwapDeviceContextState aufgerufen wird und pState auf NULL festgelegt ist, hat der Aufruf keine Auswirkung.

[out, optional] ppPreviousState

Ein Zeiger auf eine Variable, die einen Zeiger auf die ID3DDeviceContextState-Schnittstelle für das zuvor aktivierte Kontextstatusobjekt empfängt.

Rückgabewert

Keine

Bemerkungen

SwapDeviceContextState ändert das Geräteverhalten. Dieses Geräteverhalten hängt von der emulierten Schnittstelle ab, die Sie beim Erstellen des Kontextzustandsobjekts an den EmulatedInterface-Parameter der ID3D11Device1::CreateDeviceContextState-Methode übergeben haben.

SwapDeviceContextState wird in einem verzögerten Kontext nicht unterstützt.

SwapDeviceContextState deaktiviert die inkompatiblen Geräteschnittstellen ID3D10Device, ID3D10Device1, ID3D11Device und ID3D11Device1. Wenn ein Kontextzustandsobjekt aktiv ist, deaktiviert die Runtime bestimmte Methoden auf dem Gerät und den Kontextschnittstellen. Ein Kontextstatusobjekt, das mit __uuidof(ID3D11Device1) den meisten Direct3D 10-Geräteschnittstellen erstellt oder __uuidof(ID3D11Device) deaktiviert wird. Ein Kontextstatusobjekt, das mit __uuidof(ID3D10Device1) den meisten ID3D11DeviceContext-Methoden erstellt wird oder __uuidof(ID3D10Device) deaktiviert wird. Weitere Informationen zu diesem Verhalten finden Sie unter ID3D11Device1::CreateDeviceContextState.

SwapDeviceContextState aktiviert das durch pState angegebene Kontextzustandsobjekt. Dies bedeutet, dass die Geräteverhalten, die der Featureebene und der kompatiblen Schnittstelle des Kontextzustandsobjekts zugeordnet sind, auf dem Direct3D-Gerät bis zum nächsten Aufruf von SwapDeviceContextState aktiviert werden. Darüber hinaus wird jeder Zustand, der gespeichert wurde, als dieses Kontextzustandsobjekt zuletzt aktiv war, jetzt reaktiviert, sodass der vorherige Zustand ersetzt wird.

SwapDeviceContextState legt ppPreviousState auf das zuletzt aktivierte Kontextzustandsobjekt fest. Das -Objekt ermöglicht es dem Aufrufer, den vorherigen Gerätezustand zu speichern und später wiederherzustellen. Dieses Verhalten ist in einer Plug-In-Architektur wie Direct2D nützlich, die ein Direct3D-Gerät mit seinen Plug-Ins teilt. Eine Direct2D-Schnittstelle kann Kontextzustandsobjekte verwenden, um den Zustand der Anwendung zu speichern und wiederherzustellen.

Wenn der Aufrufer zuvor nicht die ID3D11Device1::CreateDeviceContextState-Methode aufgerufen hat , um ein vorheriges Kontextstatusobjekt zu erstellen, legt SwapDeviceContextStateppPreviousState auf das Standardkontextzustandsobjekt fest. In beiden Fällen ist die Verwendung von SwapDeviceContextState identisch.

Die von der Anwendung angegebene Featureebene, die vom Kontextstatusobjekt aus der liste der zulässigen Werte ausgewählt wird, die die Anwendung an ID3D11Device1::CreateDeviceContextState bereitstellt, steuert die Featureebene des unmittelbaren Kontexts, wenn das Kontextstatusobjekt aktiv ist. Da das Direct3D 11-Gerät free-threaded ist, können die Gerätemethoden die aktuelle Featureebene des unmittelbaren Kontexts nicht abfragen. Stattdessen wird das Gerät auf Featureebene ausgeführt, die das Maximum aller featureebenen aller zuvor erstellten Kontextzustandsobjekte darstellt. Dies bedeutet, dass sich die Featureebene des Geräts dynamisch erhöhen kann.

Die Featureebene des Kontextzustandsobjekts steuert die aus dem unmittelbaren Kontext verfügbare Funktionalität. Um jedoch den Freethreadvertrag der Direct3D 11-Gerätemethoden beizubehalten – insbesondere die Methoden zur Ressourcenerstellung –, steuert die obergrenzende Featureebene aller erstellten Kontextzustandsobjekte den Ressourcensatz, den das Gerät erstellt.

Da die Kontextzustandsobjektschnittstelle vom unmittelbaren Kontext veröffentlicht wird, erfordert die Schnittstelle dasselbe Threadingmodell wie der unmittelbare Kontext. Insbesondere ist SwapDeviceContextState in Bezug auf die anderen direkten Kontextmethoden und in Bezug auf die entsprechenden Methoden von ID3D10Device singlethreaded.

Da nur eines der Direct3D 10- oder Direct3D 11-Ref-Count-Verhaltensweisen gleichzeitig verfügbar sein kann, muss eine der Direct3D 10- und Direct3D 11-Schnittstellen ihren Ref-Count-Vertrag unterbrechen. Um diese Situation zu vermeiden, deaktiviert die Aktivierung eines Kontextzustandsobjekts die inkompatible Versionsschnittstelle. Wenn Sie außerdem eine Methode einer inkompatiblen Versionsschnittstelle aufrufen, schlägt der Aufruf automatisch fehl, wenn die Methode den Rückgabetyp void aufweist, einen HRESULT-Wert von E_INVALIDARG zurückgibt oder einen beliebigen Out-Parameter auf NULL festlegt.

Wenn Sie vom Direct3D 11-Modus in den Direct3D 10-Modus oder den Direct3D 10.1-Modus wechseln, ändert sich das Bindungsverhalten des Geräts. Insbesondere führt die endgültige Freigabe einer Ressource dazu, die Bindung im Direct3D 10-Modus oder im Direct3D 10.1-Modus zu aufheben. Während der endgültigen Version gibt eine Anwendung alle Verweise der Ressource frei, einschließlich indirekter Verweise, z. B. die Verknüpfung von der Ansicht mit der Ressource und die Verknüpfung zwischen dem Kontextzustandsobjekt und den gebundenen Ressourcen des Kontextzustandsobjekts. Jede gebundene Ressource, auf die die Anwendung keinen Verweis hat, wird ungebunden und zerstört, um das Direct3D 10-Verhalten beizubehalten.

SwapDeviceContextState wirkt sich nicht auf den Zustand aus, den ID3D11VideoContext festlegt.

Befehlslisten, die durch verzögerte Kontexte generiert werden, enthalten keinen Verweis auf Kontextstatusobjekte und sind nicht von zukünftigen Aktualisierungen von Kontextstatusobjekten betroffen.

SwapDeviceContextState wirkt sich auf keine asynchronen Objekte aus. Wenn eine Abfrage beispielsweise vor einem Aufruf von SwapDeviceContextState aktiv ist, ist sie nach dem Aufruf weiterhin aktiv.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 8 und Plattformupdate für Windows 7 [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2012 und Plattformupdate für Windows Server 2008 R2 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile d3d11_1.h
Bibliothek D3D11.lib

Weitere Informationen

ID3D11DeviceContext1