PFND3DDDI_CREATERESOURCE funzione di callback (d3dumddi.h)
La funzione CreateResource crea una risorsa.
Sintassi
PFND3DDDI_CREATERESOURCE Pfnd3dddiCreateresource;
HRESULT Pfnd3dddiCreateresource(
HANDLE hDevice,
D3DDDIARG_CREATERESOURCE *unnamedParam2
)
{...}
Parametri
hDevice
Handle per il dispositivo di visualizzazione (contesto grafico) usato per creare la risorsa.
unnamedParam2
pResource [in, out]
Puntatore a una struttura D3DDDIARG_CREATERESOURCE che descrive la risorsa creata.
Valore restituito
CreateResource restituisce uno dei valori seguenti:
Codice restituito | Descrizione |
---|---|
S_OK | La risorsa viene creata correttamente. |
E_OUTOFMEMORY | CreateResource non è riuscito ad allocare la memoria necessaria per il completamento. |
D3DERR_NOTAVAILABLE | CreateResource non è riuscito a creare la risorsa per motivi diversi da non essere in grado di allocare memoria. CreateResourcecan restituisce questo errore solo durante la creazione di vertex o buffer di indice. |
Commenti
La chiamata a CreateResource può contenere un elenco di superfici. Il membro SurfCount della struttura D3DDDIARG_CREATERESOURCE specificata dal parametro pResource specifica il numero di superfici, inclusi i livelli della mappa MIP, da creare. Ad esempio, una risorsa mappa MIP con trama 256x256x9 contiene un elenco di nove superfici in cui il membro SurfCount e il numero di livelli della mappa MIP sono entrambi impostati su 9. Una mappa cubo che contiene nove livelli di mappa MIP deve avere il numero di livelli di mappa MIP impostati su 9 e SurfCount impostato su 54. Una catena di scambio a tre superfici deve avere SurfCount impostato su 3 e il numero di livelli della mappa MIP impostati su 0. Si noti che il numero di livelli della mappa MIP è sempre minore o uguale al valore in SurfCount.
In risposta alla chiamata CreateResource , il driver di visualizzazione in modalità utente può chiamare la funzione pfnAllocateCb per creare una o più allocazioni di memoria. Il driver di visualizzazione in modalità utente deve determinare se deve creare più allocazioni per superficie, un'allocazione per tutte le superfici o un'allocazione per ogni superficie. Per altre informazioni sulle allocazioni, vedere Gestione della memoria video e Pianificazione GPU.
Le risorse possono essere condivise da più dispositivi (hDevice) e processi. Il runtime specifica che una risorsa viene condivisa impostando il flag di campo di bit SharedResource nel membro Flags di D3DDDIARG_CREATERESOURCE. Se questo flag di campo di bit è impostato, il driver di visualizzazione in modalità utente deve rispettare le restrizioni seguenti per le risorse condivise:
- Il driver di visualizzazione in modalità utente può chiamare le funzioni pfnAllocateCb e pfnDeallocateCb esattamente una volta.
- Il driver di visualizzazione in modalità utente non può creare allocazioni aggiuntive per la risorsa dopo la creazione iniziale della risorsa e in modo analogo può eliminare definitivamente le allocazioni delle risorse solo al momento in cui la risorsa stessa viene eliminata definitivamente.
- Quando la funzione DestroyResource del driver di visualizzazione in modalità utente viene chiamata per una risorsa condivisa creata o aperta tramite una chiamata alla funzione CreateResource o OpenResource del driver, il driver deve impostare il membro hResource della struttura D3DDDICB_DEALLOCATE su non NULL e il membro NumAllocations di D3DDDICB_DEALLOCATE su zero in una chiamata alla funzione pfnDeallocateCb per eliminare o chiudere la risorsa. Ovvero, le allocazioni associate a una risorsa condivisa non possono essere eliminate o chiuse singolarmente; la risorsa deve essere eliminata o chiusa in modo atomico in una chiamata a pfnDeallocateCb.
- Il numero di allocazioni deve essere coerente per il tipo di risorsa, ovvero un altro processo che sta creando lo stesso tipo di risorsa deve generare lo stesso numero e tipo di allocazioni. Inoltre, la ridenominazione non è consentita per queste risorse.
- I bit non definiti del membro Flags sono riservati.
- Se il flag campo di bit primario non è impostato in Flag, i membri RefreshRate e Output sono riservati.
- Se il flag di campo di bit RenderTarget, DecodeRenderTarget o VideoProcessRenderTarget non è impostato in Flag, i membri MultisampleType e MultisampleQuality sono riservati.
- Se il flag di campo di bit VertexBuffer non è impostato in Flags, il membro Fvf è riservato.
- Se i flag texture, CubeMap e Volume bit-field non sono impostati in Flags, il membro MipLevels è riservato.
Il nuovo DDI CreateResource differisce da DdCreateSurface DDI per il modello di driver di visualizzazione di Microsoft Windows 2000 nei modi seguenti:
- Nella nuova DDI CreateResource le superfici non vengono mai associate in modo esplicito. Tutti gli allegati sono impliciti nella creazione atomica.
- Nella nuova DDI CreateResource non è consentita la creazione parziale delle mappe del cubo.
Se il runtime richiede di creare un vertex o un buffer di indice e se il driver di visualizzazione in modalità utente non può creare il buffer per motivi diversi da memoria insufficiente (ad esempio, mancanza di supporto hardware), il driver deve avere esito negativo con D3DERR_NOTAVAILABLE.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Disponibile in Windows Vista e versioni successive dei sistemi operativi Windows. |
Piattaforma di destinazione | Desktop |
Intestazione | d3dumddi.h (include D3dumddi.h) |