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