다음을 통해 공유


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 함수는 pData가 가리키는 D3DDDICB_CREATEOVERLAY 구조체의 hKernelOverlay 멤버에서 새로 만든 커널 모드 오버레이 개체에 대한 핸들을 반환합니다. 사용자 모드 표시 드라이버는 다음 함수에 대한 호출에서 이 핸들을 전달합니다.

다음 코드 예제에서는 오버레이 개체를 만드는 방법을 보여줍니다.
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

pfnDestroyOverlayCb

pfnFlipOverlayCb

pfnUpdateOverlayCb