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 포함) |