PFND3DDDI_PRESENT função de retorno de chamada (d3dumddi.h)

A função Present notifica o driver de exibição no modo de usuário de que um aplicativo terminou de renderizar e solicita que o driver exiba a superfície de origem copiando ou invertendo ou que o driver execute uma operação de preenchimento de cores.

Sintaxe

PFND3DDDI_PRESENT Pfnd3dddiPresent;

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

Parâmetros

hDevice

Um identificador para o dispositivo de exibição (contexto gráfico).

unnamedParam2

pData [in]

Um ponteiro para uma estrutura D3DDDIARG_PRESENT que descreve o recurso a ser exibido.

Valor retornado

Present retorna um dos seguintes valores:

Código de retorno Descrição
S_OK O recurso é exibido com êxito.
E_OUTOFMEMORY O Presente não pôde alocar a memória necessária para que ela fosse concluída.

Comentários

O runtime do Microsoft Direct3D chama a função Present do driver de exibição no modo de usuário para notificar o driver de exibição no modo de usuário de que um aplicativo terminou de renderizar e solicitar que o driver exiba a superfície de origem ou que o driver execute uma operação de preenchimento de cores. Se o membro hSrcResource da estrutura D3DDDIARG_PRESENT à qual o parâmetro pData aponta não for NULL, apresente solicitações para que o driver de exibição no modo de usuário exiba o novo conteúdo na tela; se hSrcResource for NULL, apresente solicitações para que o driver de exibição no modo de usuário execute uma operação de preenchimento de cores na tela.

Se o membro hDstResource da estrutura D3DDDIARG_PRESENT for NULL, a superfície de destino será desconhecida. Além disso, a superfície de destino e uma lista de retângulos de recorte são determinados no modo kernel antes de enviar o fluxo de comando de hardware por meio do DMA para o processador de gráficos.

Como resultado, o driver de exibição no modo de usuário não pode gerar instruções de hardware para executar a operação atual. Essas instruções de hardware devem ser geradas pelo driver de miniporto de exibição. No entanto, quando o membro hSrcResource do D3DDDIARG_PRESENT não é NULL, o driver de exibição no modo de usuário deve derivar o identificador de alocação para a superfície de origem e inserir esse identificador no membro hSrcAllocation da estrutura D3DDDICB_PRESENT em uma chamada para a função pfnPresentCb . O driver de miniporto de exibição pode gerar com êxito as instruções de hardware. O driver de exibição no modo de usuário normalmente deriva o identificador de alocação das informações do recurso na estrutura D3DDDIARG_PRESENT .

Se o membro hDstResource do D3DDDIARG_PRESENT não for NULL, a superfície de destino do presente será conhecida e o driver de exibição no modo de usuário deverá preencher o membro hDstAllocation de D3DDDICB_PRESENT com o identificador de alocação correspondente.

Se um driver de exibição no modo de usuário expor uma versão DDI de menos de 0x0000000C (o driver retorna esse valor no membro DriverVersion da estrutura D3D10DDIARG_OPENADAPTER em uma chamada para a função OpenAdapter do driver), o runtime do Direct3D primeiro chama a função Flush do driver de exibição no modo de usuário para enviar quaisquer comandos de hardware pendentes no buffer de comando antes que o runtime chame a função Present do driver de exibição no modo de usuário. Dessa forma, a função Present do driver de exibição no modo de usuário é serializada com operações de renderização (ou seja, chamadas para a função pfnRenderCb ). Se um driver de exibição no modo de usuário expor uma versão DDI de 0x0000000C ou superior e o aplicativo de chamada for executado no modo com janelas, o runtime também chamará Flush antes de chamar Present. Se um driver de exibição no modo de usuário expor uma versão DDI de 0x0000000C ou superior e o aplicativo de chamada for executado no modo de tela inteira, o runtime não chamará Flush antes de chamar Present. Esse comportamento permite que os drivers que implementam seu próprio threading enfileiram chamadas presentes na fila. Um driver que expõe uma versão DDI de 0x0000000C ou superior deve chamar pfnRenderCb para liberar internamente quaisquer buffers de comando pendentes antes que o driver chame a função pfnPresentCb .

Requisitos

   
Cliente mínimo com suporte Disponível no Windows Vista e versões posteriores dos sistemas operacionais Windows.
Plataforma de Destino Área de Trabalho
Cabeçalho d3dumddi.h (include D3dumddi.h)

Confira também

D3DDDIARG_PRESENT

D3DDDI_DEVICEFUNCS

DxgkDdiPresent

DxgkDdiRender

Liberar

pfnRenderCb