PFND3DDDI_LOCK funzione di callback (d3dumddi.h)
La funzione Lock blocca la risorsa specificata o una superficie all'interno della risorsa.
Sintassi
PFND3DDDI_LOCK Pfnd3dddiLock;
HRESULT Pfnd3dddiLock(
HANDLE hDevice,
D3DDDIARG_LOCK *unnamedParam2
)
{...}
Parametri
hDevice
Handle per il dispositivo di visualizzazione (contesto grafico).
unnamedParam2
pData [in, out]
Puntatore a una struttura D3DDDIARG_LOCK che descrive la risorsa o la superficie all'interno della risorsa da bloccare.
Valore restituito
Lock restituisce uno dei valori seguenti:
Codice restituito | Descrizione |
---|---|
S_OK | La risorsa è bloccata correttamente. |
E_OUTOFMEMORY | Il blocco non è riuscito ad allocare la memoria necessaria per il completamento. |
D3DDDIERR_WASSTILLDRAWING | La risorsa non è inattiva quando il runtime di Microsoft Direct3D ha chiamato la funzione Lock con il flag di campo di bit DoNotWait impostato nel membro Flags di D3DDDIARG_LOCK . |
Commenti
Il runtime di Microsoft Direct3D chiama la funzione Lock del driver di visualizzazione in modalità utente per bloccare una risorsa o una superficie all'interno della risorsa. Questa risorsa o superficie bloccata può essere letta o scritta in usando operazioni di lettura e scrittura dalla CPU. Quando il runtime chiama Lock, il driver di visualizzazione in modalità utente deve chiamare la funzione di callback pfnLockCb del runtime per bloccare un'allocazione corrispondente alla risorsa o alla superficie. Si noti che poiché il driver di visualizzazione in modalità utente può allocare più allocazioni per ogni risorsa o superficie, il driver di visualizzazione in modalità utente potrebbe essere necessario per convertire o elaborare in modo appropriato il puntatore di allocazione restituito da pfnLockCb prima di restituire la chiamata Di blocco al runtime.
In genere, le chiamate a Lock sono seguite da chiamate corrispondenti alla funzione Unlock del driver prima che il driver riceva tutte le chiamate alle funzioni di draw-primitive, ovvero chiamate a DrawIndexedPrimitive, DrawIndexedPrimitive2, DrawPrimitive e DrawPrimitive2. Questo ordine garantisce che un driver non venga mai richiesto di disegnare da una risorsa bloccata. Tuttavia, in caso di esecuzione di trasformazioni software e illuminazione, il runtime deve chiamare una delle funzioni di disegno-primitiva del driver prima di sbloccare una risorsa (attualmente solo i vertex buffer presentano questo comportamento). Il runtime contrassegna i vertex buffer su cui può verificarsi questo comportamento non comune con il flag di campo di bit MightDrawFromLocked nel membro Flags delle strutture di D3DDDIARG_CREATERESOURCE e D3DDDIARG_LOCK ( vale a dire, sia in fase di creazione che in fase di blocco). Quando l'hardware esegue attivamente il rendering da un buffer dei vertici bloccato, il driver non deve eseguire alcuna azione speciale perché il runtime non sovrascriverà alcun dato nel buffer dei vertici bloccato.
Il runtime chiama la funzione Lock del driver di visualizzazione in modalità utente per bloccare anche le superfici di memoria di sistema preallocate. Questa operazione consente al driver di visualizzazione in modalità utente di sincronizzare correttamente i riferimenti a tali superfici che potrebbero trovarsi nel flusso dei comandi hardware. Il driver di visualizzazione in modalità utente può eseguire la sincronizzazione tramite:
- Scaricamento ( ovvero, chiamata della funzione di callback pfnRenderCb del runtime) qualsiasi comando in sospeso in base alle esigenze.
- Chiamata di pfnLockCb con l'handle di allocazione appropriato per i comandi già inviati all'hardware.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Disponibile in Windows Vista e versioni successive dei sistemi operativi Windows. |
Piattaforma di destinazione | Universale |
Intestazione | d3dumddi.h (include D3dumddi.h) |