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