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 锁定无法为其分配所需的内存以完成。
D3DDDIERR_WASSTILLDRAWING 当 Microsoft Direct3D 运行时调用 Lock 函数并在 D3DDDIARG_LOCK 的 Flags 成员中设置 DoNotWait 位字段标志时,资源未空闲。

言论

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

通常, 调用 Lock 后跟驱动程序 解锁 函数的匹配调用,然后驱动程序接收对其绘图基元函数的任何调用(即调用 DrawIndexedPrimitiveDrawIndexedPrimitive2DrawPrimitiveDrawPrimitive2)。 此顺序保证从未请求驱动程序从锁定的资源中绘制。 但是,有时,在执行软件转换和照明时,运行时必须在解锁资源之前调用驱动程序的绘制基元函数之一(目前,只有顶点缓冲区显示此行为)。 运行时在 标志D3DDDIARG_CREATERESOURCED3DDDIARG_LOCK 结构(即创建时和锁定时间)中的 MightDrawFromLocked 位字段标志标记发生这种不常见的行为的顶点缓冲区。 当硬件主动从锁定的顶点缓冲区呈现时,驱动程序不需要执行任何特殊作,因为运行时不会覆盖锁定顶点缓冲区中的任何数据。

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

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

要求

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

另请参阅

D3DDDIARG_LOCK

D3DDDI_ALLOCATIONINFO

D3DDDI_DEVICEFUNCS

pfnLockCb

pfnRenderCb