PFND3DDDI_PRESENT funzione di callback (d3dumddi.h)

La funzione Present notifica al driver di visualizzazione in modalità utente che un'applicazione ha completato il rendering e richiede che il driver visualizzi la superficie di origine copiando o capovolgendo o eseguendo un'operazione di riempimento del colore.

Sintassi

PFND3DDDI_PRESENT Pfnd3dddiPresent;

HRESULT Pfnd3dddiPresent(
  HANDLE hDevice,
  const D3DDDIARG_PRESENT *unnamedParam2
)
{...}

Parametri

hDevice

Handle per il dispositivo di visualizzazione (contesto grafico).

unnamedParam2

pData [in]

Puntatore a una struttura D3DDDIARG_PRESENT che descrive la risorsa da visualizzare.

Valore restituito

Present restituisce uno dei valori seguenti:

Codice restituito Descrizione
S_OK La risorsa viene visualizzata correttamente.
E_OUTOFMEMORY Il presente non è riuscito ad allocare la memoria necessaria per il completamento.

Commenti

Il runtime di Microsoft Direct3D chiama la funzione Present del driver di visualizzazione in modalità utente per notificare al driver di visualizzazione in modalità utente che un'applicazione ha completato il rendering e per richiedere che il driver visualizzi la superficie di origine o che il driver esegua un'operazione di riempimento a colori. Se il membro hSrcResource della struttura D3DDDIARG_PRESENT a cui punta il parametro pData è diverso da NULL, Present richiede che il driver di visualizzazione in modalità utente visualizzi nuovo contenuto sullo schermo; se hSrcResource è NULL, Present richiede che il driver di visualizzazione in modalità utente esegua un'operazione di riempimento a colori sullo schermo.

Se il membro hDstResource della struttura D3DDDIARG_PRESENT è NULL, la superficie di destinazione è sconosciuta. Inoltre, l'area di destinazione e un elenco di rettangoli di ritaglio vengono determinati in modalità kernel prima di inviare il flusso di comandi hardware tramite DMA al processore grafico.

Di conseguenza, il driver di visualizzazione in modalità utente non può generare istruzioni hardware per eseguire l'operazione corrente. Queste istruzioni hardware devono essere generate dal driver miniport di visualizzazione. Tuttavia, quando il membro hSrcResource di D3DDDIARG_PRESENT è diverso da NULL, il driver di visualizzazione in modalità utente deve derivare l'handle di allocazione alla superficie di origine e inserire questo handle nel membro hSrcAllocation della struttura D3DDDICB_PRESENT in una chiamata alla funzione pfnPresentCb . Il driver miniport di visualizzazione può quindi generare correttamente le istruzioni hardware. Il driver di visualizzazione in modalità utente deriva in genere l'handle di allocazione dalle informazioni sulla risorsa nella struttura D3DDDIARG_PRESENT .

Se il membro hDstResource di D3DDDIARG_PRESENT è diverso da NULL, la superficie di destinazione per il presente è nota e il driver di visualizzazione in modalità utente deve compilare il membro hDstAllocation di D3DDDICB_PRESENT con l'handle di allocazione corrispondente.

Se un driver di visualizzazione in modalità utente espone una versione DDI inferiore a 0x0000000C (il driver restituisce questo valore nel membro DriverVersion della struttura D3D10DDIARG_OPENADAPTER in una chiamata alla funzione OpenAdapter del driver), il runtime Direct3D chiama prima la funzione Flush del driver di visualizzazione in modalità utente per inviare eventuali comandi hardware in sospeso nel buffer dei comandi prima che il runtime chiami la funzione Present del driver di visualizzazione in modalità utente. In questo modo, la funzione Present del driver di visualizzazione in modalità utente viene serializzata con operazioni di rendering, ovvero le chiamate alla funzione pfnRenderCb . Se un driver di visualizzazione in modalità utente espone una versione DDI di 0x0000000C o versione successiva e l'applicazione chiamante viene eseguita in modalità finestra, il runtime chiama anche Flush prima di chiamare Present. Se un driver di visualizzazione in modalità utente espone una versione DDI di 0x0000000C o versione successiva e l'applicazione chiamante viene eseguita in modalità schermo intero, il runtime non chiamerà Flush prima di chiamare Present. Questo comportamento consente ai driver che implementano il proprio threading per accodare le chiamate. Un driver che espone una versione DDI di 0x0000000C o versione successiva deve chiamare pfnRenderCb per scaricare internamente eventuali buffer di comandi in sospeso prima che il driver chiami la funzione pfnPresentCb .

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)

Vedi anche

D3DDDIARG_PRESENT

D3DDDI_DEVICEFUNCS

DxgkDdiPresent

DxgkDdiRender

Svuotamento

pfnRenderCb