Metodo ID3D11Device1::CreateDeviceContextState (d3d11_1.h)
Crea un oggetto stato del contesto che contiene tutto lo stato di Microsoft Direct3D e un comportamento Direct3D.
Sintassi
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
);
Parametri
Flags
Tipo: UINT
Combinazione di valori D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG combinati tramite un'operazione OR bit per bit. Il valore risultante specifica come creare l'oggetto stato del contesto. Il flag D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED è attualmente l'unico flag definito. Se il dispositivo originale è stato creato con D3D11_CREATE_DEVICE_SINGLETHREADED, è necessario creare tutti gli oggetti di stato del contesto da tale dispositivo con il flag D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED .
Se si imposta il flag a thread singolo sia per l'oggetto stato del contesto che per il dispositivo, si garantisce di chiamare l'intero set di metodi di contesto e i metodi del dispositivo solo da un thread. Non è quindi necessario usare sezioni critiche per sincronizzare l'accesso al contesto di dispositivo e il runtime può evitare l'uso di tali sezioni critiche a elevato utilizzo del processore.
[in] pFeatureLevels
Tipo: const D3D_FEATURE_LEVEL*
Puntatore a una matrice di valori D3D_FEATURE_LEVEL . La matrice può contenere elementi dall'elenco seguente e determina l'ordine dei livelli di funzionalità per cui viene tentata la creazione. A differenza di D3D11CreateDevice, non è possibile impostare pFeatureLevels su NULL perché non esiste una matrice a livello di funzionalità predefinita.
{
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
Tipo: UINT
Numero di elementi in pFeatureLevels. A differenza di D3D11CreateDevice, è necessario impostare FeatureLevels su maggiore di 0 perché non è possibile impostare pFeatureLevels su NULL.
SDKVersion
Tipo: UINT
Versione dell'SDK. È necessario impostare questo parametro su D3D11_SDK_VERSION.
EmulatedInterface
Tipo: REFIID
Identificatore univoco globale (GUID) per l'interfaccia emulata. Questo valore specifica il comportamento del dispositivo quando l'oggetto stato del contesto è attivo. I valori validi vengono ottenuti usando l'operatore __uuidof nelle interfacce ID3D10Device, ID3D10Device1, ID3D11Device e ID3D11Device1 . Vedere la sezione Osservazioni.
[out, optional] pChosenFeatureLevel
Tipo: D3D_FEATURE_LEVEL*
Puntatore a una variabile che riceve un valore D3D_FEATURE_LEVEL dalla matrice pFeatureLevels . Si tratta del primo valore della matrice con cui CreateDeviceContextState ha avuto esito positivo nella creazione dell'oggetto stato del contesto. Se la chiamata a CreateDeviceContextState ha esito negativo, la variabile a cui punta pChosenFeatureLevel viene impostata su zero.
[out, optional] ppContextState
Tipo: ID3DDeviceContextState**
Indirizzo di un puntatore a un oggetto ID3DDeviceContextState che rappresenta lo stato di un dispositivo Direct3D.
Valore restituito
Tipo: HRESULT
Questo metodo restituisce uno dei codici restituiti Direct3D 11.
Commenti
Il valore REFIID dell'interfaccia emulata è un GUID ottenuto tramite l'operatore __uuidof . Ad esempio, __uuidof(ID3D11Device)
ottiene il GUID dell'interfaccia a un dispositivo Microsoft Direct3D 11.
Chiamare il metodo ID3D11DeviceContext1::SwapDeviceContextState per attivare l'oggetto stato del contesto. Quando l'oggetto stato del contesto è attivo, i comportamenti del dispositivo associati al livello di funzionalità dell'oggetto stato di contesto e alla relativa interfaccia compatibile vengono attivati nel dispositivo Direct3D fino alla chiamata successiva a SwapDeviceContextState.
Quando un oggetto stato del contesto è attivo, il runtime disabilita determinati metodi nelle interfacce del dispositivo e del contesto. Ad esempio, un oggetto di stato del contesto creato con __uuidof(ID3D11Device)
causerà la disattivazione della maggior parte delle interfacce del dispositivo Microsoft Direct3D 10 e di un oggetto stato di contesto creato con __uuidof(ID3D10Device1)
o __uuidof(ID3D10Device)
causerà la disattivazione della maggior parte dei metodi ID3D11DeviceContext da parte del runtime.
Questo comportamento garantisce che un utente di una delle due interfacce emulate non possa impostare lo stato del dispositivo che l'altra interfaccia emulata non è in grado di esprimere. Questa restrizione garantisce che l'interfaccia emulata ID3D10Device1 rifletta in modo accurato lo stato completo della pipeline e che l'interfaccia emulata non funzionerà contrariamente alla relativa definizione di interfaccia originale.
Si supponga, ad esempio, che la fase a mosaico venga attivata tramite l'interfaccia ID3D11DeviceContext quando si crea il dispositivo tramite D3D11CreateDevice o D3D11CreateDeviceAndSwapChain, anziché tramite gli equivalenti Direct3D 10. Poiché il contesto Direct3D 11 è attivo, un'interfaccia Direct3D 10 è inattiva quando la si recupera per la prima volta tramite QueryInterface. Ciò significa che non è possibile passare immediatamente un'interfaccia Direct3D 10 recuperata da un dispositivo Direct3D 11 a una funzione. Devi prima chiamare SwapDeviceContextState per attivare un oggetto di stato del contesto compatibile con Direct3D 10.
La tabella seguente illustra i metodi attivi e inattivi per ogni interfaccia emulata.
Interfaccia emulata | Interfacce del dispositivo attivo o di contesto immediato | Interfacce di contesto inattive o inattive |
---|---|---|
ID3D10Device | ||
ID3D11DeviceContext (come pubblicato dal contesto immediato. L'interfaccia emulata direct3D 10 o Microsoft Direct3D 10.1 non ha alcun effetto sui contesti posticipati. |
Nella tabella seguente vengono illustrati i metodi di contesto immediati che il runtime disabilita quando sono attivi gli oggetti di stato del contesto indicati.
Metodi di ID3D11DeviceContext quando __uuidof(ID3D10Device1) o __uuidof(ID3D10Device) è attivo |
Metodi di ID3D10Device quando __uuidof(ID3D11Device) è attivo |
---|---|
IAGetVertexBuffers | |
IASetIndexBuffer | |
IASetInputLayout | |
Topologia IASetPrimitiveTopology | |
IASetVertexBuffers | |
La tabella seguente mostra i metodi di contesto immediati che il runtime non disabilita quando gli oggetti di stato del contesto indicati sono attivi.
Metodi di ID3D11DeviceContext quando __uuidof(ID3D10Device1) o __uuidof(ID3D10Device) è attivo |
Metodi di ID3D10Device quando __uuidof(ID3D11Device) è attivo |
---|---|
La tabella seguente mostra i metodi di interfaccia ID3D10Device che il runtime non disabilita perché non sono metodi di contesto immediati.
Metodi di ID3D10Device |
---|
Creare*, ad esempio CreateQuery |
Windows Phone 8: questa API è supportata.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 8 e Aggiornamento della piattaforma per Windows 7 [app desktop | App UWP] |
Server minimo supportato | Windows Server 2012 e Aggiornamento della piattaforma per Windows Server 2008 R2 [app desktop | App UWP] |
Piattaforma di destinazione | Windows |
Intestazione | d3d11_1.h |
Libreria | D3D11.lib |