структура 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

Указывает расположение, в котором драйвер записывает возвращаемое значение обратного вызова DdLock или LockD3DBuffer . Код возврата DD_OK указывает на успешное выполнение. Дополнительные сведения см. в разделе Возвращаемые значения для DirectDraw.

Lock

Используется API DirectDraw и не должен заполняться драйвером.

dwFlags

Указывает битовую маску, которая сообщает драйверу, как выполнить блокировку памяти. Этот член является побитовой или любого из следующих значений:

Flag Значение
DDLOCK_DISCARDCONTENTS
Во время этой блокировки не делается никаких предположений о содержимом поверхности или буфера вершин. Это позволяет выполнить две задачи:
1. Microsoft Direct3D или драйвер могут предоставить альтернативную область памяти в качестве буфера вершин. Это полезно, если планируется очистить содержимое буфера вершин и заполнить новые данные.
2. Драйверы иногда хранят данные поверхности в переупорядоченном формате. Когда приложение блокирует поверхность, драйвер вынужден отменить изменение порядка данных surface, прежде чем позволить приложению просматривать содержимое поверхности.

Этот флаг является подсказкой драйверу о том, что он может пропустить процесс отмены порядка, так как приложение планирует перезаписать каждый отдельный пиксель в поверхности или заблокированный прямоугольник (и поэтому стереть все неупорядоченные пиксели в любом случае). Приложения всегда должны устанавливать этот флаг, если они намерены перезаписать всю поверхность или заблокированный прямоугольник.

DDLOCK_DONOTWAIT В интерфейсах IDirectDrawSurface7 и более поздних версий по умолчанию используется DDLOCK_WAIT. Если вы хотите переопределить значение по умолчанию и использовать время, когда ускоритель занят (как указано в коде возврата DDERR_WASSTILLDRAWING), используйте этот флаг.
DDLOCK_EVENT Задайте значение , если дескриптор события передается в lock, который активирует событие, когда он может вернуть запрошенный указатель памяти surface.
DDLOCK_HASVOLUMETEXTUREBOXRECT Драйвер должен вернуть допустимый указатель памяти на начало текстуры вложенного модуля, указанной в прямоугольнике (RECTL) в rArea. Драйвер получает передние и задние координаты вложенного числа из верхних 16 бит левой и правой координат (левых и правых элементов RECTL) соответственно. Левая и правая координаты ограничены нижними 16 битами. Если прямоугольник не указан, драйвер должен вернуть указатель на верхнюю часть всего тома. Это значение доступно в DirectX 8.1 и более поздних версиях.
DDLOCK_NODIRTYUPDATE
Отправляется драйверу средой выполнения после того, как приложение запросит блокировку области памяти с установленным флагом D3DLOCK_NO_DIRTY_UPDATE. В этом случае драйвер не должен рассматривать область памяти, которую он блокирует, как грязное, когда среда выполнения вызывает функцию DdUnlock драйвера для обновления поверхности, содержащей эту область. Скорее, драйвер должен рассматривать только регионы, указанные в предыдущих вызовах функции D3dDrawPrimitives2, используя D3DDP2OP_ADDDIRTYRECT и D3DDP2OP_ADDDIRTYBOX перечислителей в качестве грязное.
По умолчанию блокировка на поверхности добавляет к ней грязное область.
DDLOCK_NOOVERWRITE Используется только с блокировками буфера вершин Direct3D. Указывает, что никакие вершины, на которые ссылались вызовы IDirect3DDevice7::D rawPrimitiveVB и IDirect3DDevice7::D rawIndexedPrimitiveVB (описанные в документации по пакету SDK для Direct3D) с момента начала кадра (или последней блокировки без этого флага), не изменяются во время блокировки. Это может быть полезно, если данные добавляются только в буфер вершин.
DDLOCK_NOSYSLOCK
Указывает, что при блокировке этой поверхности не следует применять блокировку на уровне системы. Это имеет ряд преимуществ при блокировке поверхностей видеопамяти, таких как скорость отклика курсора, возможность вызова дополнительных функций Microsoft Windows и упрощение отладки. Однако приложение, указывающее этот флаг, должно соответствовать ряду условий, описанных в файле справки.
Этот флаг нельзя указать при блокировке основного объекта.
DDLOCK_OKTOSWAP То же, что и DDLOCK_DISCARDCONTENTS.
DDLOCK_READONLY Заблокированная поверхность будет только считываться. В Windows 2000 и более поздних версиях этот флаг никогда не устанавливается.
DDLOCK_SURFACEMEMORYPTR Драйвер должен вернуть допустимый указатель памяти на верхнюю часть прямоугольника, указанного в rArea. Если прямоугольник не указан, драйвер должен вернуть указатель на верхнюю часть поверхности.
DDLOCK_WAIT Задайте значение , указывающее, что перед возвратом блокировка должна ждать получения допустимого указателя памяти. Если этот бит задан, блокировка никогда не возвращает DDERR_WASSTILLDRAWING.
DDLOCK_WRITEONLY Заблокированная поверхность будет записана только в . В Windows 2000 и более поздних версиях этот флаг никогда не устанавливается.

fpProcess

Указывает указатель на сопоставление памяти драйвера в пользовательском режиме. Драйвер выполняет это сопоставление в DdMapMemory. Только Windows 2000 и более поздних версий.

Требования

   
Верхняя часть ddrawint.h (включая Winddi.h)

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

DdLock

DdMapMemory

LockD3DBuffer