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


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

Функция Present уведомляет драйвер отображения в пользовательском режиме о том, что приложение завершило отрисовку, и запрашивает, чтобы драйвер отображал исходную поверхность путем копирования или перелистывания, или что драйвер выполнил операцию цветовой заливки.

Синтаксис

PFND3DDDI_PRESENT Pfnd3dddiPresent;

HRESULT Pfnd3dddiPresent(
  HANDLE hDevice,
  const D3DDDIARG_PRESENT *unnamedParam2
)
{...}

Параметры

hDevice

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

unnamedParam2

pData [in]

Указатель на структуру D3DDDIARG_PRESENT , описывающую отображаемый ресурс.

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

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

Код возврата Описание
S_OK Ресурс успешно отображается.
E_OUTOFMEMORY Элементу Present не удалось выделить необходимую память для его завершения.

Комментарии

Среда выполнения Microsoft Direct3D вызывает функцию Present драйвера отображения пользовательского режима, чтобы уведомить драйвер отображения пользовательского режима о том, что приложение завершило отрисовку, и запросить, чтобы драйвер отображал исходную поверхность или что драйвер выполнил операцию цветовой заливки. Если элемент hSrcResourceD3DDDIARG_PRESENT структуры, на которую указывает параметр pData , не имеет значения NULL, запрос на то, чтобы драйвер отображения пользовательского режима отображал новое содержимое на экране; Если параметр hSrcResource имеет значение NULL, параметр Present запрашивает, чтобы драйвер отображения пользовательского режима выполнил операцию заливки цвета на экране.

Если элемент hDstResource структуры D3DDDIARG_PRESENT имеет значение NULL, целевая поверхность неизвестна. Кроме того, целевая поверхность и список обрезных прямоугольников определяются в режиме ядра перед отправкой аппаратного потока команд через DMA графическому процессору.

В результате драйвер отображения пользовательского режима не может создать аппаратные инструкции для выполнения текущей операции. Эти аппаратные инструкции должны быть созданы драйвером мини-порта дисплея. Однако если элемент hSrcResource D3DDDIARG_PRESENT не равен NULL, драйвер отображения пользовательского режима должен получить маркер выделения в исходной поверхности и вставить этот дескриптор в элемент hSrcAllocation структуры D3DDDICB_PRESENT в вызове функции pfnPresentCb . Затем драйвер мини-порта дисплея может успешно создать инструкции по оборудованию. Драйвер отображения пользовательского режима обычно наследует дескриптор выделения из сведений о ресурсах в структуре D3DDDIARG_PRESENT .

Если элемент hDstResource D3DDDIARG_PRESENT не равен NULL, целевая поверхность для данного объекта известна, а драйвер отображения пользовательского режима должен заполнить элемент hDstAllocationD3DDDICB_PRESENT соответствующим дескриптором выделения.

Если драйвер отображения пользовательского режима предоставляет версию DDI меньше 0x0000000C (драйвер возвращает это значение в элементе DriverVersion структуры D3D10DDIARG_OPENADAPTER при вызове функции OpenAdapter драйвера), среда выполнения Direct3D сначала вызывает функцию Flush драйвера отображения пользовательского режима, чтобы отправить все невыполненные аппаратные команды в буфере команд, прежде чем среда выполнения вызовет функцию Present драйвера отображения пользовательского режима. Таким образом, функция Present драйвера отображения пользовательского режима сериализуется с помощью операций отрисовки (то есть вызовов функции pfnRenderCb ). Если драйвер отображения пользовательского режима предоставляет версию DDI 0x0000000C или более поздней версии, а вызывающее приложение выполняется в оконном режиме, среда выполнения также вызывает Flush перед вызовом Present. Если драйвер отображения пользовательского режима предоставляет версию DDI 0x0000000C или более поздней версии, а вызывающее приложение выполняется в полноэкранном режиме, среда выполнения не вызывает Flush до вызова Present. Это позволяет драйверам, реализующим собственные потоки, помещать вызовы в очередь. Драйвер, предоставляющий DDI-версию 0x0000000C или более поздней версии, должен вызывать pfnRenderCb для внутренней очистки всех необработанных буферов команд, прежде чем драйвер вызовет функцию pfnPresentCb .

Требования

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

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

D3DDDIARG_PRESENT

D3DDDI_DEVICEFUNCS

DxgkDdiPresent

DxgkDdiRender

Очистка

pfnRenderCb