Метод IDirectDrawSurface7::Lock (ddraw.h)
Получает указатель на память surface.
Синтаксис
HRESULT Lock(
[in] LPRECT unnamedParam1,
[in, out] LPDDSURFACEDESC2 unnamedParam2,
[in] DWORD unnamedParam3,
[in] HANDLE unnamedParam4
);
Параметры
[in] unnamedParam1
Указатель на структуру RECT , определяющую область заблокированной поверхности. Если этот параметр имеет значение NULL, вся поверхность блокируется.
[in, out] unnamedParam2
Указатель на структуру DDSURFACEDESC2 , которая описывает соответствующие сведения о поверхности и получает сведения о поверхности.
[in] unnamedParam3
Сочетание флагов, определяющих способ блокировки поверхности. Определены следующие флаги:
DDLOCK_DONOTWAIT
В интерфейсах IDirectDrawSurface7 значение по умолчанию — DDLOCK_WAIT. Если вы хотите переопределить значение по умолчанию и использовать время, когда ускоритель занят (как указано возвращаемым значением DDERR_WASSTILLDRAWING), используйте DDLOCK_DONOTWAIT.
DDLOCK_EVENT
В настоящий момент не реализовано.
DDLOCK_NOOVERWRITE
Новые возможности для DirectX 7.0. Используется только с блокировками буфера вершин Direct3D. Указывает, что вершины, указанные в операции рисования с момента начала кадра (или последней блокировки без этого флага), не изменяются во время блокировки. Это может быть полезно, если требуется только добавить данные в буфер вершин.
DDLOCK_NOSYSLOCK
Не берите Win16Mutex (также известный как Win16Lock). Этот флаг игнорируется при блокировке основной поверхности.
DDLOCK_DISCARDCONTENTS
Новые возможности для DirectX 7.0. Используется только с блокировками буфера вершин Direct3D. Указывает, что во время этой блокировки не делается никаких предположений относительно содержимого буфера вершин. Это позволяет Direct3D или драйверу предоставить альтернативную область памяти в качестве буфера вершин. Это полезно, если вы планируете очистить содержимое буфера вершин и заполнить новые данные.
DDLOCK_OKTOSWAP
Этот флаг устарел и был заменен флагом DDLOCK_DISCARDCONTENTS.
DDLOCK_READONLY
Указывает, что заблокированная поверхность может быть только прочитана.
DDLOCK_SURFACEMEMORYPTR
Указывает, что должен быть возвращен допустимый указатель памяти на верхнюю часть указанного прямоугольника. Если прямоугольник не указан, возвращается указатель на верхнюю часть поверхности. Это значение по умолчанию.
DDLOCK_WAIT
Если блокировка не может быть получена из-за выполнения операции передачи битового блока (bitblt), блокировка повторяет попытку, пока не будет получена блокировка или не произойдет другая ошибка, например DDERR_SURFACEBUSY.
DDLOCK_WRITEONLY
Указывает, что заблокированная поверхность включена для записи.
[in] unnamedParam4
Дескриптор события. Этот параметр в настоящее время не используется и должен иметь значение NULL.
Возвращаемое значение
Если метод выполнен успешно, возвращаемое значение будет DD_OK.
В случае сбоя метод может вернуть одно из следующих значений ошибки:
- DDERR_INVALIDOBJECT
- DDERR_INVALIDPARAMS
- DDERR_OUTOFMEMORY
- DDERR_SURFACEBUSY
- DDERR_SURFACELOST
- DDERR_WASSTILLDRAWING
Комментарии
В IDirectDrawSurface7 по умолчанию блокировка ожидает завершения работы ускорителя. Поэтому в условиях по умолчанию блокировка никогда не возвращает DDERR_WASSTILLDRAWING. Если вы хотите просмотреть коды ошибок и не ждать завершения операции bitblt, используйте флаг DDLOCK_DONOTWAIT.
После получения указателя памяти surface вы можете получить доступ к памяти surface, пока не будет вызван соответствующий метод IDirectDrawSurface7::Unlock . При разблокировке поверхности указатель на память surface становится недопустимым.
Не вызывайте функции bitblt DirectDraw для bitblt из заблокированной области поверхности. В этом случае bitblt возвращает либо DDERR_SURFACEBUSY, либо DDERR_LOCKEDSURFACES. Функции GDI blit также автоматически завершаются сбоем при использовании на заблокированной поверхности видеопамять.
Если вы не включили флаг DDLOCK_NOSYSLOCK, блокировка приведет к тому, что DirectDraw будет удерживать Win16Mutex (также известный как Win16Lock), пока вы не вызовете метод IDirectDrawSurface7::Unlock . Отладчики графического пользовательского интерфейса не могут работать, пока находится Win16Mutex.
Требования
Требование | Значение |
---|---|
Целевая платформа | Windows |
Header | ddraw.h |
Библиотека | Ddraw.lib |
DLL | Ddraw.dll |