функция обратного вызова PFND3DDDI_SETDISPLAYMODECB (d3dumddi.h)

Функция pfnSetDisplayModeCb задает выделение, используемое для сканирования на дисплее.

Синтаксис

PFND3DDDI_SETDISPLAYMODECB Pfnd3dddiSetdisplaymodecb;

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

Параметры

hDevice

Дескриптор устройства отображения (графический контекст).

unnamedParam2

pData [in, out]

Указатель на структуру D3DDDICB_SETDISPLAYMODE , описывающую выделение, используемое для сканирования.

Возвращаемое значение

pfnSetDisplayModeCb возвращает одно из следующих значений:

Код возврата Описание
S_OK Режим отображения успешно настроен.
E_INVALIDARG Параметры были проверены и определены как неверные.
D3DDDIERR_INCOMPATIBLEPRIVATEFORMAT Драйвер отображения пользовательского режима должен преобразовывать формат поверхности, связанной с выделением, указанным элементом hPrimaryAllocation D3DDDICB_SETDISPLAYMODE , в атрибут format, который указывает PrivateDriverFormatAttributemember D3DDDICB_SETDISPLAYMODE. Затем драйвер должен снова вызвать pfnSetDisplayModeCb. Драйвер может выделить новое выделение, выполнить преобразование битового блока передачи (bitblt) из старой первичной поверхности в новую, а затем уничтожить старый первичный, если драйвер использует новый маркер выделения для этого выделения для всех последующих операций. Драйвер должен повторять этот процесс, пока pfnSetDisplayModeCb не вернет другое возвращаемое значение.

Эта функция также может возвращать другие значения HRESULT.

Комментарии

После того как среда выполнения Microsoft Direct3D вызовет функцию SetDisplayMode или SetDisplayModeDXGI драйвера пользовательского режима, чтобы задать основную поверхность для сканирования на дисплее, драйвер отображения пользовательского режима вызывает функцию pfnSetDisplayModeCb , чтобы задать базовое основное выделение, используемое для сканирования.

Примечание Прежде чем драйвер отображения пользовательского режима вызовет pfnSetDisplayModeCb , чтобы задать новый режим отображения, использующий расширенный формат, метод множественной выборки или и то, и другое, драйвер должен убедиться, что текущий режим отображения GDI имеет то же разрешение, что и новый режим отображения; В противном случае функция pfnSetDisplayModeCb возвращает E_INVALIDARG.
 

Direct3D версии 11 Примечание. Дополнительные сведения о том, как драйвер вызывает pfnSetDisplayModeCb, см. в разделе Изменения с Direct3D 10.

Примеры

В следующем примере кода показано, как задать выделение для сканирования на дисплее.

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

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows Vista и более поздних версиях операционных систем Windows.
Целевая платформа Персональный компьютер
Верхняя часть d3dumddi.h (включая D3dumddi.h)

См. также раздел

D3DDDICB_SETDISPLAYMODE

D3DDDI_DEVICECALLBACKS

SetDisplayMode

SetDisplayModeDXGI