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


функция обратного вызова PFND3DDDI_LOCK (d3dumddi.h)

Функция блокировки блокирует заданный ресурс или поверхность в ресурсе.

Синтаксис

PFND3DDDI_LOCK Pfnd3dddiLock;

HRESULT Pfnd3dddiLock(
  HANDLE hDevice,
  D3DDDIARG_LOCK *unnamedParam2
)
{...}

Параметры

hDevice

Дескриптор устройства отображения (графический контекст).

unnamedParam2

pData [in, out]

Указатель на структуру D3DDDIARG_LOCK, описывающую ресурс или поверхность в ресурсе для блокировки.

Возвращаемое значение

блокировка возвращает одно из следующих значений:

код возврата описание
S_OK Ресурс успешно заблокирован.
E_OUTOFMEMORY Блокировка не могла выделить необходимую память для завершения.
D3DDDIERR_WASSTILLDRAWING Ресурс не был неактивен, когда среда выполнения Microsoft Direct3D вызвала функцию lock с флагом bit-field DoNotWait, установленным в элементе Flags D3DDDIARG_LOCK.

Замечания

Среда выполнения Microsoft Direct3D вызывает функцию блокировки драйвера в пользовательском режиме, чтобы заблокировать ресурс или поверхность в ресурсе. Этот заблокированный ресурс или поверхность можно считывать или записывать с помощью операций чтения и записи из ЦП. Когда среда выполнения вызывает блокировку, драйвер отображения в пользовательском режиме должен вызывать функцию обратного вызова среды выполнения pfnLockCb, чтобы заблокировать выделение, соответствующее ресурсу или поверхности. Обратите внимание, что поскольку драйвер отображения в пользовательском режиме может выделить несколько выделений для каждого ресурса или поверхности, драйвер отображения пользовательского режима может потребоваться для соответствующего преобразования или обработки указателя выделения, возвращаемого из pfnLockCb перед возвратом вызова блокировки среды выполнения.

Как правило, за вызовами блокировки следуют соответствующие вызовы функции разблок ировки драйвера, прежде чем драйвер получает все вызовы функций рисования-примитива (то есть вызовы DrawIndexedPrimitive, DrawIndexedPrimitive2, DrawPrimitiveи DrawPrimitive2). Этот порядок гарантирует, что драйвер никогда не запрашивается на получение из заблокированного ресурса. Однако иногда при выполнении преобразования программного обеспечения и освещения среда выполнения должна вызывать одну из примитивных функций драйвера перед разблокировкой ресурса (в настоящее время только буферы вершин демонстрируют это поведение). Среда выполнения помечает буферы вершин, в которых это редкое поведение может произойти с флагом MightDrawFromLocked битовое поле в Флаги члена D3DDDIARG_CREATERESOURCE и D3DDDIARG_LOCK структур (то есть как при создании, так и во время блокировки). Когда оборудование активно отрисовывается из заблокированного буфера вершин, драйвер не требуется предпринимать никаких специальных действий, так как среда выполнения не перезаписывает данные в заблокированном буфере вершин.

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

  • Очистка (т. е. вызов функции обратного вызова среды выполнения pfnRenderCb вызовов) любых невыполненных команд по мере необходимости.
  • Вызов pfnLockCb с соответствующим дескриптором выделения для команд, которые уже отправлены в оборудование.
Драйвер отображения в пользовательском режиме возвращает указатель на память для заблокированной поверхности и шага поверхности в pSurfData и Шаг членов структуры D3DDDIARG_LOCK. Однако для поверхностей предварительной системы памяти среда выполнения игнорирует память и шаг набора драйверов, хотя драйвер по-прежнему может завершить вызов блокировкой (и таким образом отработка отказа в приложение). Среда выполнения задает флаг NotifyOnly битовое поле в элементе Flags структуры D3DDDIARG_LOCK, чтобы отличить вызовы Lock, которые блокируют предварительно выделенное системное память от других вызовов блокировки.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно в Windows Vista и более поздних версиях операционных систем Windows.
целевая платформа Всеобщий
заголовка d3dumddi.h (include D3dumddi.h)

См. также

D3DDDIARG_LOCK

D3DDDI_ALLOCATIONINFO

D3DDDI_DEVICEFUNCS

pfnLockCb

pfnRenderCb