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


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

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

Синтаксис

PFND3DDDI_LOCK Pfnd3dddiLock;

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

Параметры

hDevice

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

unnamedParam2

pData [in, out]

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

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

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

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

Комментарии

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

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

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

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

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows Vista и более поздних версиях операционных систем Windows.
Целевая платформа Универсальное
Верхняя часть d3dumddi.h (включая D3dumddi.h)

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

D3DDDIARG_LOCK

D3DDDI_ALLOCATIONINFO

D3DDDI_DEVICEFUNCS

pfnLockCb

pfnRenderCb