PFND3DDDI_PRESENT fonction de rappel (d3dumddi.h)

La fonction Present avertit le pilote d’affichage en mode utilisateur qu’une application a terminé le rendu et demande que le pilote affiche l’aire source en copiant ou en faisant glisser ou en effectuant une opération de remplissage de couleur.

Syntaxe

PFND3DDDI_PRESENT Pfnd3dddiPresent;

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

Paramètres

hDevice

Handle pour l’appareil d’affichage (contexte graphique).

unnamedParam2

pData [in]

Pointeur vers une structure D3DDDIARG_PRESENT qui décrit la ressource à afficher.

Valeur de retour

Présente retourne l’une des valeurs suivantes :

Code de retour Description
S_OK La ressource s’affiche correctement.
E_OUTOFMEMORY Le présent n’a pas pu allouer la mémoire requise pour qu’elle soit terminée.

Remarques

Le runtime Microsoft Direct3D appelle la fonction Présente du pilote d’affichage en mode utilisateur pour avertir le pilote d’affichage en mode utilisateur qu’une application a terminé le rendu et pour demander que le pilote affiche l’aire source ou que le pilote effectue une opération de remplissage de couleur. Si le membre hSrcResource de la structure D3DDDIARG_PRESENT à laquelle pointe le paramètre pData n’est pas NULL, présente les demandes que le pilote d’affichage en mode utilisateur affiche le nouveau contenu à l’écran ; si hSrcResource est NULL, présente les demandes que le pilote d’affichage en mode utilisateur effectue une opération de remplissage de couleur à l’écran.

Si le membre hDstResource de la structure D3DDDIARG_PRESENT est NULL, la surface de destination est inconnue. En outre, l’aire de destination et une liste de rectangles de découpage sont déterminés en mode noyau avant d’envoyer le flux de commandes matériel via DMA au processeur graphique.

Par conséquent, le pilote d’affichage en mode utilisateur ne peut pas générer d’instructions matérielles pour effectuer l’opération actuelle. Ces instructions matérielles doivent être générées par le pilote miniport d’affichage. Toutefois, lorsque le membre hSrcResource de D3DDDIARG_PRESENT n’est pas NULL, le pilote d’affichage en mode utilisateur doit dériver le handle d’allocation à l’aire source et insérer ce handle dans le membre hSrcAllocation de la structure D3DDDICB_PRESENT dans un appel à la fonction pfnPresentCb . Le pilote miniport d’affichage peut ensuite générer correctement les instructions matérielles. Le pilote d’affichage en mode utilisateur dérive généralement le handle d’allocation des informations de ressource dans la structure D3DDDIARG_PRESENT .

Si le membre hDstResource de D3DDDIARG_PRESENT n’est pas NULL, l’aire de destination du présent est connue et le pilote d’affichage en mode utilisateur doit remplir le membre hDstAllocation de D3DDDICB_PRESENT avec le handle d’allocation correspondant.

Si un pilote d’affichage en mode utilisateur expose une version DDI inférieure à 0x0000000C (le pilote retourne cette valeur dans le membre DriverVersion de la structure D3D10DDIARG_OPENADAPTER dans un appel à la fonction OpenAdapter du pilote Direct3D), le runtime Direct3D appelle d’abord la fonction Vide du pilote d’affichage en mode utilisateur pour envoyer toutes les commandes matérielles en attente dans la mémoire tampon de commande avant que le runtime appelle la fonction Présente du pilote d’affichage en mode utilisateur. De cette façon, la fonction Present du pilote d’affichage en mode utilisateur est sérialisée avec des opérations de rendu (autrement dit, les appels à la fonction pfnRenderCb ). Si un pilote d’affichage en mode utilisateur expose une version DDI de 0x0000000C ou supérieure et que l’application appelante s’exécute en mode fenêtre, le runtime appelle également Flush avant d’appeler Présent. Si un pilote d’affichage en mode utilisateur expose une version DDI de 0x0000000C ou supérieure et que l’application appelante s’exécute en mode plein écran, le runtime n’appelle pas Flush avant d’appeler Présent. Ce comportement permet aux pilotes qui implémentent leur propre threading de mettre en file d’attente les appels présents. Un pilote qui expose une version DDI de 0x0000000C ou supérieure doit appeler pfnRenderCb pour vider en interne les mémoires tampons de commande en attente avant que le pilote appelle la fonction pfnPresentCb .

Configuration requise

   
Client minimal pris en charge Disponible dans Windows Vista et versions ultérieures des systèmes d’exploitation Windows.
Plateforme cible Desktop (Expérience utilisateur)
En-tête d3dumddi.h (include D3dumddi.h)

Voir aussi

D3DDDIARG_PRESENT

D3DDDI_DEVICEFUNCS

DxgkDdiPresent

DxgkDdiRender

Purge

pfnRenderCb