Поделиться через


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

Функция pfnCreateOverlayCb создает объект наложения в режиме ядра и вызывает драйвер мини-порта для отображения наложения.

Синтаксис

PFND3DDDI_CREATEOVERLAYCB Pfnd3dddiCreateoverlaycb;

HRESULT Pfnd3dddiCreateoverlaycb(
  HANDLE hDevice,
  D3DDDICB_CREATEOVERLAY *unnamedParam2
)
{...}

Параметры

hDevice

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

unnamedParam2

pData [in, out]

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

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

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

Код возврата Описание
S_OK Объект наложения успешно создан.
D3DDDIERR_NOTAVAILABLE Сбой pfnCreateOverlayCb из-за отсутствия наложения оборудования или пропускной способности.
E_INVALIDARG Параметры были проверены и определены как неверные.
E_OUTOFMEMORY pfnCreateOverlayCb не удалось выделить память, необходимую для ее завершения.

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

Комментарии

Функция pfnCreateOverlayCb возвращает дескриптор созданному объекту наложения в режиме ядра в элементе hKernelOverlayструктуры D3DDDICB_CREATEOVERLAY , на которую указывает pData. Драйвер отображения пользовательского режима передает этот дескриптор в вызовах следующих функций:

В следующем примере кода показано, как создать объект наложения.
D3DKMT_HANDLE g_hOverlay = NULL;

HRESULT CD3DContext::CreateOverlay(D3DDDIARG_CREATEOVERLAY* pCreateOverlay) {
    D3DDDICB_CREATEOVERLAY CreateCB;
    DWORD_PTR dwResource = (DWORD_PTR) pCreateOverlay->OverlayInfo.hResource;
    dwResource += pCreateOverlay->OverlayInfo.SubResourceIndex;
    LONG dwTempPitch;

    pCreateOverlay->hOverlay = (HANDLE) 0x27;

    CreateCB.VidPnSourceId = 0;
    CreateCB.OverlayInfo.hAllocation = R200GetAllocationHandle(m_pR200Ctx,
                                     (DWORD)dwResource,
                                      &dwTempPitch);

    CreateCB.OverlayInfo.DstRect.left = pCreateOverlay->OverlayInfo.DstRect.left;
    CreateCB.OverlayInfo.DstRect.right = pCreateOverlay->OverlayInfo.DstRect.right;
    CreateCB.OverlayInfo.DstRect.top = pCreateOverlay->OverlayInfo.DstRect.top;
    CreateCB.OverlayInfo.DstRect.bottom = pCreateOverlay->OverlayInfo.DstRect.bottom;

    CreateCB.OverlayInfo.SrcRect.left = pCreateOverlay->OverlayInfo.SrcRect.left;
    CreateCB.OverlayInfo.SrcRect.right = pCreateOverlay->OverlayInfo.SrcRect.right;
    CreateCB.OverlayInfo.SrcRect.top = pCreateOverlay->OverlayInfo.SrcRect.top;
    CreateCB.OverlayInfo.SrcRect.bottom = pCreateOverlay->OverlayInfo.SrcRect.bottom;

    CreateCB.OverlayInfo.pPrivateDriverData = "This is a test";
    CreateCB.OverlayInfo.PrivateDriverDataSize = 10;

    HRESULT hr = m_d3dCallbacks.pfnCreateOverlayCb(m_hD3D, &CreateCB);

    if (SUCCEEDED(hr)) {
        g_hOverlay = CreateCB.hKernelOverlay;
    }

    return hr;
}

Требования

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

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

D3DDDICB_CREATEOVERLAY

D3DDDI_DEVICECALLBACKS

pfnDelayOverlayCb

pfnFlipOverlayCb

pfnUpdateOverlayCb