Поделиться через


Метод IDirect3DSurface9::LockRect (d3d9helper.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, чтобы приложение пользовалось циклами ЦП в ожидании блокировки драйвера поверхности.

Единственным блокируемым форматом для поверхности трафарета глубины является D3DFMT_D16_LOCKABLE. См . D3DFORMAT.

По соображениям производительности грязное области записываются только для нулевого уровня текстуры. Грязные области автоматически записываются при вызове IDirect3DSurface9::LockRect без D3DLOCK_NO_DIRTY_UPDATE или D3DLOCK_READONLY. Дополнительные сведения см. в разделе IDirect3DDevice9::UpdateTexture .

Не удается заблокировать обратный буфер с несколькими выборками.

Этот метод не может получить данные с поверхности, содержащейся в ресурсе текстуры, созданном с помощью D3DUSAGE_RENDERTARGET поскольку такая текстура должна быть назначена D3DPOOL_DEFAULT памяти и поэтому не блокируется. В этом случае используйте вместо него IDirect3DDevice9::GetRenderTargetData для копирования данных текстуры из памяти устройства в системную память.

Требования

   
Целевая платформа Windows
Header d3d9helper.h (включая D3D9.h)
Библиотека D3D9.lib

См. также раздел

IDirect3DSurface9

IDirect3DSurface9::UnlockRect