PFND3DDDI_PRESENT 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 visualizza la superficie di origine copiando o capovolgendo o che il driver esegue 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 D3DDDIARG_PRESENT struttura 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 Present non è stato in grado di 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 eserciti la superficie di origine o che il driver eserciti un'operazione di riempimento del colore. 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 visualizza nuovo contenuto sullo schermo; se hSrcResource è NULL, Present richiede al driver di visualizzazione in modalità utente di eseguire un'operazione di riempimento colore sullo schermo.

Se il membro hDstResource della struttura D3DDDIARG_PRESENT è NULL, la superficie di destinazione è sconosciuta. Inoltre, la superficie 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 di grafica.

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 nella superficie di origine e inserire questo handle nel membro hSrcAllocation della struttura D3DDDICB_PRESENT in una chiamata alla funzione pfnPresentCb . Il driver del 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 sulle risorse nella D3DDDIARG_PRESENT predefinita.

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 minore di 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 chiamate alla funzione pfnRenderCb . Se un driver di visualizzazione in modalità utente espone una versione DDI di 0x0000000C o 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 di accodare le chiamate presenti. Un driver che espone una versione DDI di 0x0000000C o versione successiva deve chiamare pfnRenderCb per scaricare internamente tutti i buffer dei comandi in sospeso prima che il driver chiami la funzione pfnPresentCb .

Requisiti

   
Client minimo supportato Disponibile in Windows Vista e versioni successive del Windows operativo.
Piattaforma di destinazione Desktop
Intestazione d3dumddi.h (includere D3dumddi.h)

Vedi anche

D3DDDIARG_PRESENT

D3DDDI_DEVICEFUNCS

DxgkDdiPresent

DxgkDdiRender

Svuotamento

pfnRenderCb