PFND3DDDI_DEALLOCATECB回调函数 (d3dumddi.h)

pfnDeallocateCb 回调函数在创建资源对象时释放分配或内核模式资源对象。

语法

PFND3DDDI_DEALLOCATECB Pfnd3dddiDeallocatecb;

HRESULT Pfnd3dddiDeallocatecb(
  HANDLE hDevice,
  const D3DDDICB_DEALLOCATE *unnamedParam2
)
{...}

参数

hDevice

显示设备的句柄(图形上下文)。

unnamedParam2

pData [in]

指向描述要释放的资源的 D3DDDICB_DEALLOCATE 结构的指针。

返回值

pfnDeallocateCb 返回以下值之一:

返回代码 描述
S_OK 已成功释放内存。
E_INVALIDARG 参数已验证并确定不正确。

此函数还可以返回其他 HRESULT 值。

言论

用户模式显示驱动程序可以通过以下方式释放分配:

  • 通过设置 pData 指向的 D3DDDICB_DEALLOCATE 结构的 hResource 成员来 NULL,并使用要释放的分配句柄填充D3DDDICB_DEALLOCATE的 HandleList 成员中的数组
  • 在组中,通过将 hResource 设置为要释放其分配的资源句柄。 如果 hResource 为非NULL,则忽略 HandleListNumAllocations D3DDDICB_DEALLOCATE成员。
请注意,如果用户模式显示驱动程序将 hResource 设置为 NULL 并填充 HandleList 中的所有数组元素 以释放所有分配,驱动程序随后必须再次调用 pfnDeallocateCb 函数,以便仅通过将 hResource 设置为资源的句柄来释放资源。

请注意,pfnDeallocateCb 函数不同于用户模式显示驱动程序的 DestroyResourceDestroyResource(D3D10) 函数。 但是,用户模式显示驱动程序通常会调用 pfnDeallocateCb,以响应对其 DestroyResourceDestroyResource(D3D10) 函数的调用。

Direct3D 版本 9 注意:有关创建和销毁资源的详细信息,请参阅 处理资源创建和销毁

Direct3D 版本 11 注意:有关驱动程序如何调用 pfnDeallocateCb的详细信息,请参阅 direct3D 10 更改。

下面的代码示例演示如何释放资源。

    D3DDDICB_DEALLOCATE deAllocCB;
    HRESULT             hr;
    D3DKMT_HANDLE       hKMAllocHandle;

    memset(&deAllocCB, 0, sizeof(deAllocCB));

    deAllocCB.hResource = m_hCurResRuntime;

    hr = m_d3dCallbacks.pfnDeallocateCb(m_hD3D, &deAllocCB);
    if ((m_hCurResRuntime) && (SUCCEEDED(hr))) {
        m_bCurResFreed = TRUE;
    }

要求

要求 价值
最低支持的客户端 在 Windows Vista 和更高版本的 Windows作系统中可用。
目标平台 桌面
标头 d3dumddi.h (包括 D3dumddi.h)

另请参阅

D3DDDICB_DEALLOCATE

D3DDDI_DEVICECALLBACKS

DestroyResource

DestroyResource(D3D10)

pfnAllocateCb