PFND3DDDI_PRESENT función de devolución de llamada (d3dumddi.h)

La función Present notifica al controlador de pantalla en modo de usuario que una aplicación ha terminado de representar y solicita que el controlador muestre la superficie de origen copiando o volteando o que el controlador realiza una operación de relleno de color.

Sintaxis

PFND3DDDI_PRESENT Pfnd3dddiPresent;

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

Parámetros

hDevice

Identificador del dispositivo de visualización (contexto de gráficos).

unnamedParam2

pData [in]

Puntero a una estructura de D3DDDIARG_PRESENT que describe el recurso que se va a mostrar.

Valor devuelto

Present devuelve uno de los siguientes valores:

Código devuelto Descripción
S_OK El recurso se muestra correctamente.
E_OUTOFMEMORY Present no pudo asignar la memoria necesaria para que se complete.

Comentarios

El tiempo de ejecución de Microsoft Direct3D llama a la función Present del controlador de pantalla en modo de usuario para notificar al controlador de pantalla en modo de usuario que una aplicación ha terminado de representarse y solicitar que el controlador muestre la superficie de origen o que el controlador realice una operación de relleno de color. Si el miembro hSrcResource de la estructura D3DDDIARG_PRESENT a la que apunta el parámetro pData es distinto de NULL, Presente solicita que el controlador de pantalla en modo de usuario muestre contenido nuevo en la pantalla; si hSrcResource es NULL, present solicita que el controlador de pantalla en modo de usuario realice una operación de relleno de color en la pantalla.

Si el miembro hDstResource de la estructura D3DDDIARG_PRESENT es NULL, se desconoce la superficie de destino. Además, la superficie de destino y una lista de rectángulos de recorte se determinan en modo kernel antes de enviar el flujo de comandos de hardware a través de DMA al procesador de gráficos.

Como resultado, el controlador de pantalla en modo de usuario no puede generar instrucciones de hardware para realizar la operación actual. El controlador de minipuerto de pantalla debe generar estas instrucciones de hardware. Sin embargo, cuando el miembro hSrcResource de D3DDDIARG_PRESENT no es NULL, el controlador de pantalla en modo usuario debe derivar el identificador de asignación a la superficie de origen e insertar este identificador en el miembro hSrcAllocation de la estructura D3DDDICB_PRESENT en una llamada a la función pfnPresentCb . El controlador de minipuerto de pantalla puede generar correctamente las instrucciones de hardware. El controlador de pantalla en modo de usuario normalmente deriva el identificador de asignación de la información de recursos en la estructura D3DDDIARG_PRESENT .

Si el miembro hDstResource de D3DDDIARG_PRESENT no es NULL, se conoce la superficie de destino para el presente y el controlador de pantalla en modo de usuario debe rellenar el miembro hDstAllocation de D3DDDICB_PRESENT con el identificador de asignación correspondiente.

Si un controlador de pantalla en modo de usuario expone una versión DDI de menos de 0x0000000C (el controlador devuelve este valor en el miembro DriverVersion de la estructura de D3D10DDIARG_OPENADAPTER en una llamada a la función OpenAdapter del controlador), el tiempo de ejecución de Direct3D llama primero a la función Flush del controlador de pantalla en modo de usuario para enviar los comandos de hardware pendientes en el búfer de comandos antes de que el tiempo de ejecución llame a la función Present del controlador de pantalla del modo de usuario. De este modo, la función Present del controlador de visualización en modo de usuario se serializa con operaciones de representación (es decir, llama a la función pfnRenderCb ). Si un controlador de pantalla en modo de usuario expone una versión DDI de 0x0000000C o superior y la aplicación que realiza la llamada se ejecuta en modo ventana, el tiempo de ejecución también llama a Flush antes de llamar a Present. Si un controlador de pantalla en modo de usuario expone una versión DDI de 0x0000000C o superior y la aplicación que realiza la llamada se ejecuta en modo de pantalla completa, el tiempo de ejecución no llamará a Flush antes de llamar a Present. Este comportamiento permite a los controladores que implementan su propio subproceso poner en cola llamadas presentes. Un controlador que expone una versión DDI de 0x0000000C o superior debe llamar a pfnRenderCb para vaciar internamente los búferes de comandos pendientes antes de que el controlador llame a la función pfnPresentCb .

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows Vista y versiones posteriores de los sistemas operativos Windows.
Plataforma de destino Escritorio
Encabezado d3dumddi.h (incluya D3dumddi.h)

Consulte también

D3DDDIARG_PRESENT

D3DDDI_DEVICEFUNCS

DxgkDdiPresent

DxgkDdiRender

Vaciar

pfnRenderCb