PFND3DDDI_LOCK回调函数 (d3dumddi.h)

Lock 函数锁定给定的资源或资源中的图面。

语法

PFND3DDDI_LOCK Pfnd3dddiLock;

HRESULT Pfnd3dddiLock(
  HANDLE hDevice,
  D3DDDIARG_LOCK *unnamedParam2
)
{...}

参数

hDevice

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

unnamedParam2

pData [in, out]

指向 D3DDDIARG_LOCK 结构的指针,该结构描述要锁定的资源或图面。

返回值

Lock 返回以下值之一:

返回代码 说明
S_OK 资源已成功锁定。
E_OUTOFMEMORY Lock 无法分配完成所需的内存。
D3DDDIERR_WASSTILLDRAWING 当 Microsoft Direct3D 运行时调用 Lock 函数,并在 D3DDDIARG_LOCK 的 Flags 成员中设置了 DoNotWait 位字段标志时 资源未处于空闲状态。

注解

Microsoft Direct3D 运行时调用用户模式显示驱动程序的 Lock 函数来锁定资源或资源中的图面。 可以使用 CPU 中的读取和写入操作从中读取或写入此锁定的资源或图面。 当运行时调用 Lock 时,用户模式显示驱动程序必须调用运行时的 pfnLockCb 回调函数来锁定与资源或图面对应的分配。 请注意,由于用户模式显示驱动程序可以为每个资源或图面分配多个分配,因此可能需要用户模式显示驱动程序在将 Lock 调用返回到运行时之前适当地转换或处理从 pfnLockCb 返回的分配指针。

通常,调用 Lock 后跟对驱动程序的 Unlock 函数的匹配调用,然后驱动程序接收对其 draw-primitive 函数的任何调用, (即调用 DrawIndexedPrimitiveDrawIndexedPrimitive2DrawPrimitiveDrawPrimitive2) 。 此顺序保证永远不会请求驱动程序从锁定的资源进行绘制。 但是,有时在执行软件转换和照明时,运行时必须先调用驱动程序的绘制基元函数之一,然后才能解锁当前 (资源,只有顶点缓冲区) 显示此行为。 运行时使用 D3DDDIARG_CREATERESOURCEFlags 成员中的 MightDrawFromLocked 位字段标志标记顶点缓冲区,D3DDDIARG_LOCK结构 (,即在创建时和锁定时) 。 当硬件主动从锁定的顶点缓冲区呈现时,驱动程序不需要执行任何特殊操作,因为运行时不会覆盖锁定顶点缓冲区 中的任何数据。

运行时调用用户模式显示驱动程序的 Lock 函数来锁定预分配的系统内存图面。 此操作允许用户模式显示驱动程序正确同步对可能位于硬件命令流中的此类图面的引用。 用户模式显示驱动程序可以通过以下方法完成同步:

  • 刷新 (,即根据需要调用运行时的 pfnRenderCb 回调函数) 任何未完成的命令。
  • 使用已提交到硬件的命令的适当分配句柄调用 pfnLockCb
用户模式显示驱动程序返回指向锁定图面的内存的指针,以及D3DDDIARG_LOCK结构的 pSurfData 和 Pitch 成员中图面的 间距 。 但是,对于预分配的系统内存图面,运行时会忽略驱动程序集内存和间距,尽管驱动程序仍可能使 Lock 调用 (失败,从而故障回复到应用程序) 。 运行时在 D3DDDIARG_LOCK 结构的 Flags 成员中设置 NotifyOnly 位字段标志,以区分锁定预分配系统内存图面的 Lock 调用与其他 Lock 调用。

要求

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

另请参阅

D3DDDIARG_LOCK

D3DDDI_ALLOCATIONINFO

D3DDDI_DEVICEFUNCS

pfnLockCb

pfnRenderCb