IDirect3DSurface9::LockRect 方法 (d3d9.h)

锁定图面上的矩形。

语法

HRESULT LockRect(
  [out] D3DLOCKED_RECT *pLockedRect,
  [in]  const RECT     *pRect,
  [in]  DWORD          Flags
);

参数

[out] pLockedRect

类型: D3DLOCKED_RECT*

指向描述锁定区域的 D3DLOCKED_RECT 结构的指针。

[in] pRect

类型: const RECT*

指向要锁定的矩形的指针。 由指向 RECT 结构的指针指定。 为此参数指定 NULL 会扩展脏区域以覆盖整个图面。

[in] Flags

类型: DWORD

描述要执行的锁类型的零个或多个锁定标志的组合。 对于此方法,有效标志为:

  • D3DLOCK_DISCARD
  • D3DLOCK_DONOTWAIT
  • D3DLOCK_NO_DIRTY_UPDATE
  • D3DLOCK_NOSYSLOCK
  • D3DLOCK_READONLY
使用 D3DLOCK_DISCARD 时,不得指定子项。 有关标志的说明,请参阅 D3DLOCK

返回值

类型: HRESULT

如果方法成功,则返回值D3D_OK。

如果方法失败,则返回值可以D3DERR_INVALIDCALL或D3DERR_WASSTILLDRAWING。

注解

如果指定 了D3DLOCK_DONOTWAIT 标志,并且驱动程序无法立即锁定图面, 则 IDirect3DSurface9::LockRect 将返回D3DERR_WASSTILLDRAWING,以便应用程序可以在等待驱动程序锁定图面时使用 CPU 周期。

深度模具表面的唯一可锁定格式是D3DFMT_D16_LOCKABLE。 请参阅 D3DFORMAT

出于性能原因,脏区域仅记录纹理的零级。 在不D3DLOCK_NO_DIRTY_UPDATE或D3DLOCK_READONLY的情况下调用 IDirect3DSurface9::LockRect 时,会自动记录脏区域。 有关详细信息,请参阅 IDirect3DDevice9::UpdateTexture

无法锁定多重采样后台缓冲区。

此方法无法从使用 D3DUSAGE_RENDERTARGET 创建的纹理资源包含的图面中检索数据,因为此类纹理必须分配给D3DPOOL_DEFAULT内存,因此不可锁定。 在这种情况下,请改用 IDirect3DDevice9::GetRenderTargetData 将纹理数据从设备内存复制到系统内存。

要求

要求
目标平台 Windows
标头 d3d9.h (包括 D3D9.h)
Library D3D9.lib

另请参阅

IDirect3DSurface9

IDirect3DSurface9::UnlockRect