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,则忽略 D3DDDICB_DEALLOCATE 的 HandleListNumAllocations 成员。
请注意,如果用户模式显示驱动程序将 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