PFND3DDDI_SETDISPLAYMODECB funzione di callback (d3dumddi.h)

La funzione pfnSetDisplayModeCb imposta l'allocazione usata per l'analisi sulla visualizzazione.

Sintassi

PFND3DDDI_SETDISPLAYMODECB Pfnd3dddiSetdisplaymodecb;

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

Parametri

hDevice

Handle per il dispositivo di visualizzazione (contesto grafico).

unnamedParam2

pData [in, out]

Puntatore a una struttura di D3DDDICB_SETDISPLAYMODE che descrive l'allocazione usata per l'analisi.

Valore restituito

pfnSetDisplayModeCb restituisce uno dei valori seguenti:

Codice restituito Descrizione
S_OK La modalità di visualizzazione è stata impostata correttamente.
E_INVALIDARG I parametri sono stati convalidati e determinati per essere non corretti.
D3DDDIERR_INCOMPATIBLEPRIVATEFORMAT Il driver di visualizzazione in modalità utente deve convertire il formato della superficie associata all'allocazione che il membro hPrimaryAllocation di D3DDDICB_SETDISPLAYMODE specifica nell'attributo di formato specificato dal privateDriverFormatAttributemember di D3DDDICB_SETDISPLAYMODE . Il driver deve quindi chiamare di nuovo pfnSetDisplayModeCb. Il driver potrebbe allocare una nuova allocazione, eseguire un trasferimento a blocchi di bit di conversione (bitblt) dalla superficie primaria precedente al nuovo e quindi eliminare il vecchio primario finché il driver usa il nuovo handle di allocazione per questa allocazione per tutte le operazioni successive. Il driver deve ripetere questo processo fino a quando pfnSetDisplayModeCb restituisce un valore restituito diverso.

Questa funzione potrebbe anche restituire altri valori HRESULT.

Commenti

Dopo che il runtime di Microsoft Direct3D chiama la funzione SetDisplayMode o SetDisplayModeDXGI per impostare la superficie primaria da analizzare sulla visualizzazione, il driver di visualizzazione in modalità utente chiama la funzione pfnSetDisplayModeCb per impostare l'allocazione primaria sottostante usata per l'analisi.

Nota Prima che il driver di visualizzazione in modalità utente chiami pfnSetDisplayModeCb per impostare una nuova modalità di visualizzazione che usa un formato esteso, un metodo di campionamento multiplo o entrambi, il driver deve assicurarsi che la modalità di visualizzazione GDI corrente abbia la stessa risoluzione della nuova modalità di visualizzazione; in caso contrario, pfnSetDisplayModeCb restituisce E_INVALIDARG.
 

Nota direct3D versione 11: Per altre informazioni sul modo in cui il driver chiama pfnSetDisplayModeCb, vedere Modifiche da Direct3D 10.

Esempio

Nell'esempio di codice seguente viene illustrato come impostare l'allocazione per l'analisi sulla visualizzazione.

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);
}

Requisiti

   
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

D3DDDICB_SETDISPLAYMODE

D3DDDI_DEVICECALLBACKS

SetDisplayMode

SetDisplayModeDXGI