функция обратного вызова 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) |