电子书《精通DirectX.3D图形与动画程序设计.王德才.pdf》p54
对顶点缓冲区的内存操作,必须通过Lock和Unlock来实现
以下介绍Lock函数
HRESULT Lock(
[in] UINT OffsetToLock,
[in] UINT SizeToLock,
[out] VOID **ppbData,
[in] DWORD Flags
);
OffToLock 指定加锁内存起始地址
SizeToLock指定加锁内存大小
ppbData 用于返回内存指针地址
Flags 表示顶点缓冲区的加锁属性,可以取0(默认值),或以下值得逻辑或:
D3DLOCK_DISCARD 更新整个缓冲区
D3DLOCK_NO_DIRTY_UPDATE 在默认状态下,对缓冲区加锁会对该区域设置一个Dirty标记。该属性不对该区域设置Dirty标记,当对缓冲区由特殊需要时使用
D3DLOCK_NOSYSLOCK 保证不覆盖缓冲区数据,设置改属性可以立即返回内存指针,提高系统性能
D3DLOCK_READONLY 在加锁过程中系统可以进行其他操作
D3DLOCK_NOOVERWRITE 设置缓冲区为只读属性
备注:
执行Lock()需要一定的时间,默认状态下,Direct3D会暂停其他的显示操作,知道Lock()执行结束。设置D3DLOCK_NOSYSLOCK属性,可以使Direct3D在执行对缓冲区加锁的同时执行其他操作,比如移动鼠标等