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 au pilote d’afficher la surface source en copiant ou en retournant ou en effectuant une opération de remplissage des couleurs.

Syntaxe

PFND3DDDI_PRESENT Pfnd3dddiPresent;

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

Paramètres

hDevice

Handle pour le périphérique d’affichage (contexte graphique).

unnamedParam2

pData [in]

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

Valeur retournée

Present 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 nécessaire pour qu’il se termine.

Remarques

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

Si le membre hDstResource de la structure D3DDDIARG_PRESENT a la valeur NULL, la surface de destination est inconnue. En outre, la surface 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érielles 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 de 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 à la surface 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 à partir des informations de ressource dans la structure D3DDDIARG_PRESENT .

Si le membre hDstResource de D3DDDIARG_PRESENT n’est pas NULL, la surface de destination pour le présent est connue et le pilote d’affichage en mode utilisateur doit renseigner 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), le runtime Direct3D appelle d’abord la fonction Flush du pilote d’affichage en mode utilisateur pour envoyer les commandes matérielles en suspens dans la mémoire tampon de commandes avant que le runtime appelle la fonction Present 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 (c’est-à-dire des 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êtré, le runtime appelle également Flush avant d’appeler Present. 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 Present. 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 toutes les mémoires tampons de commande en attente avant que le pilote appelle la fonction pfnPresentCb .

Configuration requise

Condition requise Valeur
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 (inclure D3dumddi.h)

Voir aussi

D3DDDIARG_PRESENT

D3DDDI_DEVICEFUNCS

DxgkDdiPresent

DxgkDdiRender

Purge

pfnRenderCb