PFND3DDDI_SETDISPLAYMODECB fonction de rappel (d3dumddi.h)

La fonction pfnSetDisplayModeCb définit l’allocation utilisée pour analyser sur l’affichage.

Syntaxe

PFND3DDDI_SETDISPLAYMODECB Pfnd3dddiSetdisplaymodecb;

HRESULT Pfnd3dddiSetdisplaymodecb(
  HANDLE hDevice,
  D3DDDICB_SETDISPLAYMODE *unnamedParam2
)
{...}

Paramètres

hDevice

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

unnamedParam2

pData [in, out]

Pointeur vers une structure de D3DDDICB_SETDISPLAYMODE qui décrit l’allocation utilisée pour analyser.

Valeur retournée

pfnSetDisplayModeCb retourne l’une des valeurs suivantes :

Code de retour Description
S_OK Le mode d’affichage a été correctement défini.
E_INVALIDARG Les paramètres ont été validés et déterminés comme incorrects.
D3DDDIERR_INCOMPATIBLEPRIVATEFORMAT Le pilote d’affichage en mode utilisateur doit convertir le format de la surface associée à l’allocation que le membre hPrimaryAllocation de D3DDDICB_SETDISPLAYMODE spécifie en attribut de format que le PrivateDriverFormatAttributemember de D3DDDICB_SETDISPLAYMODE spécifie. Le pilote doit ensuite appeler à nouveau pfnSetDisplayModeCb. Le pilote peut allouer une nouvelle allocation, effectuer un transfert de bloc de bits de conversion (bitblt) de l’ancienne surface primaire vers la nouvelle, puis détruire l’ancienne principale tant que le pilote utilise le nouveau handle d’allocation pour cette allocation pour toutes les opérations suivantes. Le pilote doit répéter ce processus jusqu’à ce que pfnSetDisplayModeCb retourne une valeur de retour différente.

Cette fonction peut également retourner d’autres valeurs HRESULT.

Remarques

Une fois que le runtime Microsoft Direct3D a appelé la fonction SetDisplayMode ou SetDisplayModeDXGI du pilote d’affichage en mode utilisateur pour définir la surface principale à analyser sur l’affichage, le pilote d’affichage en mode utilisateur appelle la fonction pfnSetDisplayModeCb pour définir l’allocation principale sous-jacente utilisée pour l’analyse.

Note Avant que le pilote d’affichage en mode utilisateur n’appelle pfnSetDisplayModeCb pour définir un nouveau mode d’affichage qui utilise un format étendu, une méthode d’échantillonnage multiple ou les deux, le pilote doit s’assurer que le mode d’affichage GDI actuel a la même résolution que le nouveau mode d’affichage ; sinon, pfnSetDisplayModeCb retourne E_INVALIDARG.
 

Remarque de Direct3D version 11 : Pour plus d’informations sur la façon dont le pilote appelle pfnSetDisplayModeCb, consultez Modifications de Direct3D 10.

Exemples

L’exemple de code suivant montre comment définir l’allocation pour l’analyse sur l’affichage.

HRESULT CD3DContext::SetDisplayMode(CONST D3DDDIARG_SETDISPLAYMODE* pSetDisplayMode) {
    DWORD   dwSrcSurf = ((DWORD)(DWORD_PTR)pSetDisplayMode->hResource) + pSetDisplayMode->SubResourceIndex;
    HRESULT hr;
    // Timestamp the source surface
    m_RTbl[dwSrcSurf].m_qwBatch = m_qwBatch;
    // Send the presentation request to the display miniport driver
    D3DDDICB_SETDISPLAYMODE SetDisplayModeCBData = {0};

    SetDisplayModeCBData.hPrimaryAllocation = R200GetSurfaceAllocHandle(m_pR200Ctx,
                                        dwSrcSurf);

    hr = m_d3dCallbacks.pfnSetDisplayModeCb(m_hD3D, &SetDisplayModeCBData);

    return (hr);
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible dans Windows Vista et les 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

D3DDDICB_SETDISPLAYMODE

D3DDDI_DEVICECALLBACKS

SetDisplayMode

SetDisplayModeDXGI