ID3D11Device1::CreateDeviceContextState-Methode (d3d11_1.h)
Erstellt ein Kontextzustandsobjekt, das den gesamten Microsoft Direct3D-Zustand und ein gewisses Direct3D-Verhalten enthält.
Syntax
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
);
Parameter
Flags
Typ: UINT
Eine Kombination aus D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG Werten, die mithilfe eines bitweisen OR-Vorgangs kombiniert werden. Der resultierende Wert gibt an, wie das Kontextzustandsobjekt erstellt wird. Das D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED-Flag ist derzeit das einzige definierte Flag. Wenn das ursprüngliche Gerät mit D3D11_CREATE_DEVICE_SINGLETHREADED erstellt wurde, müssen Sie alle Kontextzustandsobjekte dieses Geräts mit dem D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED-Flag erstellen.
Wenn Sie das Singlethread-Flag sowohl für das Kontextzustandsobjekt als auch für das Gerät festlegen, garantieren Sie, dass Sie den gesamten Satz von Kontextmethoden und Gerätemethoden nur aus einem Thread aufrufen. Sie müssen daher keine kritischen Abschnitte verwenden, um den Zugriff auf den Gerätekontext zu synchronisieren, und die Runtime kann die Arbeit mit diesen prozessorintensiven kritischen Abschnitten vermeiden.
[in] pFeatureLevels
Typ: const D3D_FEATURE_LEVEL*
Ein Zeiger auf ein Array von D3D_FEATURE_LEVEL Werten. Das Array kann Elemente aus der folgenden Liste enthalten und bestimmt die Reihenfolge der Featureebenen, für die die Erstellung versucht wird. Im Gegensatz zu D3D11CreateDevice können Sie pFeatureLevels nicht auf NULL festlegen, da es kein Standardarray auf Featureebene gibt.
{
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
Typ: UINT
Die Anzahl der Elemente in pFeatureLevels. Im Gegensatz zu D3D11CreateDevice müssen Sie FeatureLevels auf größer als 0 festlegen, da Sie pFeatureLevels nicht auf NULL festlegen können.
SDKVersion
Typ: UINT
Die SDK-Version. Sie müssen diesen Parameter auf D3D11_SDK_VERSION festlegen.
EmulatedInterface
Typ: REFIID
Der globally unique Identifier (GUID) für die emulierte Schnittstelle. Dieser Wert gibt das Verhalten des Geräts an, wenn das Kontextstatusobjekt aktiv ist. Gültige Werte werden mithilfe des __uuidof-Operators für die Schnittstellen ID3D10Device, ID3D10Device1, ID3D11Device und ID3D11Device1 abgerufen. Siehe Hinweise.
[out, optional] pChosenFeatureLevel
Typ: D3D_FEATURE_LEVEL*
Ein Zeiger auf eine Variable, die einen D3D_FEATURE_LEVEL Wert aus dem pFeatureLevels-Array empfängt . Dies ist der erste Arraywert, mit dem CreateDeviceContextState das Kontextzustandsobjekt erfolgreich erstellt hat. Wenn der Aufruf von CreateDeviceContextState fehlschlägt, wird die Variable, auf die von pChosenFeatureLevel verwiesen wird, auf 0 festgelegt.
[out, optional] ppContextState
Typ: ID3DDeviceContextState**
Die Adresse eines Zeigers auf ein ID3DDeviceContextState-Objekt , das den Zustand eines Direct3D-Geräts darstellt.
Rückgabewert
Typ: HRESULT
Diese Methode gibt einen der Direct3D 11-Rückgabecodes zurück.
Hinweise
Der REFIID-Wert der emulierten Schnittstelle ist eine GUID, die mithilfe des __uuidof-Operators abgerufen wird. Ruft beispielsweise __uuidof(ID3D11Device)
die GUID der Schnittstelle für ein Microsoft Direct3D 11-Gerät ab.
Rufen Sie die ID3D11DeviceContext1::SwapDeviceContextState-Methode auf, um das Kontextstatusobjekt zu aktivieren. Wenn das Kontextstatusobjekt aktiv ist, werden die Geräteverhalten, die sowohl der Featureebene des Kontextzustandsobjekts als auch seiner kompatiblen Schnittstelle zugeordnet sind, auf dem Direct3D-Gerät bis zum nächsten Aufruf von SwapDeviceContextState aktiviert.
Wenn ein Kontextzustandsobjekt aktiv ist, deaktiviert die Runtime bestimmte Methoden auf dem Gerät und den Kontextschnittstellen. Ein Kontextzustandsobjekt, das mit __uuidof(ID3D11Device)
erstellt wird, bewirkt beispielsweise, dass die Runtime die meisten Microsoft Direct3D 10-Geräteschnittstellen deaktiviert, und ein Kontextzustandsobjekt, das mit __uuidof(ID3D10Device1)
oder __uuidof(ID3D10Device)
erstellt wird, bewirkt, dass die Runtime die meisten ID3D11DeviceContext-Methoden deaktiviert.
Dieses Verhalten stellt sicher, dass ein Benutzer der beiden emulierten Schnittstellen nicht den Gerätezustand festlegen kann, den die andere emulierte Schnittstelle nicht ausdrücken kann. Diese Einschränkung garantiert, dass die emulierte ID3D1Device1-Schnittstelle den vollständigen Zustand der Pipeline genau widerspiegelt und dass die emulierte Schnittstelle nicht im Gegensatz zu ihrer ursprünglichen Schnittstellendefinition funktioniert.
Angenommen, die Tessellationsphase wird über die ID3D11DeviceContext-Schnittstelle aktiviert, wenn Sie das Gerät über D3D11CreateDevice oder D3D11CreateDeviceAndSwapChain anstelle der Direct3D 10-Entsprechungen erstellen. Da der Direct3D 11-Kontext aktiv ist, ist eine Direct3D 10-Schnittstelle inaktiv, wenn Sie sie zum ersten Mal über QueryInterface abrufen. Dies bedeutet, dass Sie eine Direct3D 10-Schnittstelle, die Sie von einem Direct3D 11-Gerät abgerufen haben, nicht sofort an eine Funktion übergeben können. Sie müssen zuerst SwapDeviceContextState aufrufen, um ein Direct3D 10-kompatibles Kontextzustandsobjekt zu aktivieren.
Die folgende Tabelle zeigt die Methoden, die für jede emulierte Schnittstelle aktiv und inaktiv sind.
Emulierte Schnittstelle | Aktive Geräte- oder unmittelbare Kontextschnittstellen | Inaktive Geräte- oder unmittelbare Kontextschnittstellen |
---|---|---|
ID3D11Gerät oder |
ID3D10Geräte | |
ID3D10Device1 oder |
ID3D11DeviceContext (Wie vom unmittelbaren Kontext veröffentlicht. Die emulierte Direct3D 10- oder Microsoft Direct3D 10.1-Schnittstelle hat keine Auswirkungen auf verzögerte Kontexte.) |
Die folgende Tabelle zeigt die unmittelbaren Kontextmethoden, die die Runtime deaktiviert, wenn die angegebenen Kontextstatusobjekte aktiv sind.
Methoden von ID3D11DeviceContext , wenn __uuidof(ID3D10Device1) oder __uuidof(ID3D10Device) aktiv ist |
Methoden von ID3D10Device , wenn __uuidof(ID3D11Device) aktiv ist |
---|---|
IAGetVertexBuffers | |
IASetIndexBuffer | |
IASetInputLayout | |
IASetPrimitiveTopology | |
IASetVertexBuffers | |
In der folgenden Tabelle sind die unmittelbaren Kontextmethoden aufgeführt, die die Laufzeit nicht deaktiviert, wenn die angegebenen Kontextzustandsobjekte aktiv sind.
Methoden von ID3D11DeviceContext , wenn __uuidof(ID3D10Device1) oder __uuidof(ID3D10Device) aktiv ist |
Methoden von ID3D10Device , wenn __uuidof(ID3D11Device) aktiv ist |
---|---|
In der folgenden Tabelle sind die ID3D10Device-Schnittstellenmethoden aufgeführt, die von der Runtime nicht deaktiviert werden, da sie keine direkten Kontextmethoden sind.
Methoden von ID3D10Device |
---|
Create*, z. B. CreateQuery |
Windows Phone 8: Diese API wird unterstützt.
Anforderungen
Anforderung | Wert |
---|---|
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 |