функция обратного вызова 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 с соответствующим дескриптором выделения для команд, которые уже были отправлены на оборудование.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно в Windows Vista и более поздних версиях операционных систем Windows. |
Целевая платформа | Универсальное |
Верхняя часть | d3dumddi.h (включая D3dumddi.h) |