DD_LOCKDATA 结构 (ddrawint.h)

DD_LOCKDATA 结构包含执行 Microsoft DirectDraw 参数结构定义的锁所需的信息。

语法

typedef struct _DD_LOCKDATA {
  PDD_DIRECTDRAW_GLOBAL lpDD;
  PDD_SURFACE_LOCAL     lpDDSurface;
  DWORD                 bHasRect;
  RECTL                 rArea;
  LPVOID                lpSurfData;
  HRESULT               ddRVal;
  VOID                  *Lock;
  DWORD                 dwFlags;
  FLATPTR               fpProcess;
} *PDD_LOCKDATA, DD_LOCKDATA;

成员

lpDD

指向描述驱动程序设备的 DD_DIRECTDRAW_GLOBAL 结构。

lpDDSurface

指向描述图面 的DD_SURFACE_LOCAL 结构(在 LockD3DBuffer(与要锁定的内存区域关联的缓冲区)的情况下。

bHasRect

指定 rArea 中的区域是否有效。 值 0x00000001 表示有效区域,0x00000000表示无效区域。

rArea

指定一个 RECTL 结构,该结构定义要锁定的图面上的区域。

lpSurfData

指定驱动程序可返回指向其锁定的内存区域的指针的位置。

ddRVal

指定驱动程序写入 DdLockLockD3DBuffer 回调的返回值的位置。 返回代码DD_OK表示成功。 有关详细信息,请参阅 DirectDraw 的返回值

Lock

由 DirectDraw API 使用,驱动程序不应填充。

dwFlags

指定一个位掩码,告知驱动程序如何执行内存锁定。 此成员是以下任何值的按位 OR:

标志 含义
DDLOCK_DISCARDCONTENTS
在此锁定期间,不会对图面或顶点缓冲区的内容做出假设。 这可实现两项操作:
1. Microsoft Direct3D 或驱动程序可能会提供备用内存区域作为顶点缓冲区。 当计划清除顶点缓冲区的内容并填充新数据时,这非常有用。
2. 驱动程序有时以重新排序的格式存储图面数据。 当应用程序锁定图面时,驱动程序在允许应用程序查看图面内容之前,将强制撤消此图面数据重新排序。

此标志提示驱动程序可以跳过取消重新排序过程,因为应用程序计划覆盖图面中的每个像素或锁定矩形 (,因此) 清除所有未重新排序的像素。 应用程序在打算覆盖整个图面或锁定矩形时,应始终设置此标志。

DDLOCK_DONOTWAIT IDirectDrawSurface7 及更高接口上,默认值为 DDLOCK_WAIT。 如果要替代默认值并使用加速器正忙 (的时间,如DDERR_WASSTILLDRAWING返回代码) 请使用此标志。
DDLOCK_EVENT 设置是否将事件句柄传递给 Lock,这会在事件可以返回请求的 Surface 内存指针时触发事件。
DDLOCK_HASVOLUMETEXTUREBOXRECT 驱动程序应返回一个有效的内存指针,指向 rArea 中矩形 (RECTL) 中指定的子卷纹理的开头。 驱动程序分别从左坐标和右坐标的前 16 位 (RECTL) 的左右成员获取子卷的前后坐标。 左侧和右侧坐标限制为较低的 16 位。 如果未指定矩形,驱动程序应返回指向整个卷顶部的指针。 此值在 DirectX 8.1 及更高版本中可用。
DDLOCK_NODIRTYUPDATE
应用程序请求锁定设置了D3DLOCK_NO_DIRTY_UPDATE标志的内存区域后,由运行时发送到驱动程序。 在这种情况下,当运行时调用驱动程序的 DdUnlock 函数更新包含该区域的图面时,驱动程序不应将其锁定的内存区域视为脏。 相反,驱动程序应仅考虑之前使用 D3DDP2OP_ADDDIRTYRECT 调用其 D3dDrawPrimitives2 函数时指定的区域,并D3DDP2OP_ADDDIRTYBOX枚举器作为脏。
默认情况下,图面上的锁会将脏区域添加到该图面。
DDLOCK_NOOVERWRITE 仅用于 Direct3D 顶点缓冲区锁。 指示自帧开始 (或无此标志) 的最后一个锁) 以来,在 Direct3D SDK 文档) ,在 IDirect3DDDevice7::D rawPrimitiveVBIDirect3DDevice7::D rawDDevice7::D rawPrimitiveVB 中引用的顶点均未 (调用任何顶点。 当仅将数据追加到顶点缓冲区时,这非常有用。
DDLOCK_NOSYSLOCK
指示此图面锁定时不应采用系统范围的锁。 锁定视频内存图面时,这有几个优点,例如光标响应能力、能够调用更多 Microsoft Windows 函数以及更易于调试。 但是,指定此标志的应用程序必须符合帮助文件中记录的一些条件。
锁定主数据库时,无法指定此标志。
DDLOCK_OKTOSWAP 与 DDLOCK_DISCARDCONTENTS 相同。
DDLOCK_READONLY 要锁定的图面只能从中读取。 在 Windows 2000 及更高版本上,永远不会设置此标志。
DDLOCK_SURFACEMEMORYPTR 驱动程序应返回指向 rArea 中指定的矩形顶部的有效内存指针。 如果未指定矩形,驱动程序应返回指向图面顶部的指针。
DDLOCK_WAIT 设置为 指示 Lock 应等待,直到它可以获取有效的内存指针,然后再返回。 如果设置了此位, 则 Lock 永远不会返回DDERR_WASSTILLDRAWING。
DDLOCK_WRITEONLY 被锁定的图面将仅写入。 在 Windows 2000 及更高版本上,永远不会设置此标志。

fpProcess

指定指向驱动程序内存的用户模式映射的指针。 驱动程序在 DdMapMemory 中执行此映射。 仅限 Windows 2000 及更高版本。

要求

   
标头 ddrawint.h (包括 Winddi.h)

另请参阅

DdLock

DdMapMemory

LockD3DBuffer