Compartilhar via


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

A função DrawTriPatch desenha um patch triangular novo ou armazenado em cache ou atualiza a especificação de um patch definido anteriormente.

Sintaxe

PFND3DDDI_DRAWTRIPATCH Pfnd3dddiDrawtripatch;

HRESULT Pfnd3dddiDrawtripatch(
  [in] HANDLE hDevice,
       const D3DDDIARG_DRAWTRIPATCH *unnamedParam2,
       const D3DDDITRIPATCH_INFO *unnamedParam3,
       const FLOAT *unnamedParam4
)
{...}

Parâmetros

[in] hDevice

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

unnamedParam2

pData [in]

Um ponteiro para uma estrutura D3DDDIARG_DRAWTRIPATCH que descreve o patch triangular a ser desenhado.

unnamedParam3

pInfo [in]

Opcional. Um ponteiro para uma estrutura D3DDDITRIPATCH_INFO que descreve informações sobre o patch triangular.

unnamedParam4

pPatch [in]

Opcional. Um ponteiro para um buffer que contém três valores de ponto flutuante (D3DFLOAT[3]) que fornecem as contagens de segmento para cada uma das três bordas do patch triangular.

Retornar valor

DrawTriPatch retornará S_OK ou um resultado de erro apropriado se o patch triangular não for desenhado com êxito.

Comentários

Quando o runtime do Microsoft Direct3D chama a função DrawTriPatch do driver de exibição no modo de usuário, ele pode, opcionalmente, fornecer informações nos parâmetros pInfo e pPatch . O runtime define sinalizadores no membro Flags da estrutura D3DDDIARG_DRAWTRIPATCH especificada pelo pData para indicar se ele fornece essas informações opcionais.

O runtime fornece um valor UINT no membro Handle de D3DDDIARG_DRAWTRIPATCH para se referir à superfície de patch. Sempre que o runtime redesenhar a superfície de patch, ele passa o valor do identificador de patch e não é necessário para especificar novamente a estrutura de dados D3DDDITRIPATCH_INFO para a superfície de patch. O driver de exibição do modo de usuário pode pré-compilar e armazenar em cache coeficientes de diferença de encaminhamento e qualquer outra informação. Portanto, as chamadas subsequentes para a função DrawTriPatch do driver que usam o mesmo valor de identificador de patch são executadas com mais eficiência.

O valor real em Handle é determinado pelo aplicativo e não está sob controle de runtime. Portanto, o driver deve manipular qualquer valor que possa ser especificado por um UINT.

O valor especial handle de zero indica que o patch é dinâmico; portanto, o driver não pode pré-compilar ou armazenar informações em cache para o patch. Um valor diferente de zero para Handle indica que o patch é estático (ou atualizado com baixa frequência); portanto, o driver pode pré-compilar e armazenar em cache informações para o patch.

O driver deve lidar com os seguintes cenários em sua função DrawTriPatch :

  • Se o membro Handle for zero, o patch será dinâmico. O driver não deve pré-compilar nem armazenar informações em cache para o patch. Nessa situação, o runtime passa um ponteiro para uma estrutura D3DDDITRIPATCH_INFO no parâmetro pInfo e define o sinalizador RTPATCHFLAG_HASINFO no membro Flags da estrutura D3DDDIARG_DRAWTRIPATCH para indicar a presença da estrutura D3DDDITRIPATCH_INFO no pInfo. Opcionalmente, o runtime também pode definir o sinalizador RTPATCHFLAG_HASSEGS em Flags para indicar a presença das informações do segmento especificadas pelo parâmetro pPatch . No entanto, se o runtime não fornecer informações de segmento em pPatch, o runtime deverá usar o D3DRS_PATCHSEGMENTS valor de estado de renderização.
  • Se um valor handle diferente de zero não tiver sido especificado anteriormente em uma chamada anterior para a função DrawTriPatch do driver, o runtime desenhará um novo patch armazenável em cache. O driver deve alocar memória para armazenar dados armazenados em cache e deve adicionar esses dados à tabela de identificador de patch. Como o runtime não desenhou esse patch anteriormente, o runtime deve definir o sinalizador RTPATCHFLAG_HASINFO e passar um ponteiro para uma estrutura D3DDDIRECTPATCH_INFO no parâmetro pInfo . O driver deve marcar para o sinalizador RTPATCHFLAG_HASINFO para verificar a presença das informações do patch. Se nenhuma informação de patch for especificada, o driver deverá ignorar a chamada DrawTriPatch e não deve alocar memória para dados armazenados em cache em sua tabela de identificadores de patch. Opcionalmente, o runtime pode definir o sinalizador RTPATCHFLAG_HASSEGS para indicar a presença das informações do segmento. No entanto, se o runtime não fornecer informações de segmento em pPatch, o runtime deverá usar o D3DRS_PATCHSEGMENTS valor de estado de renderização.
  • Se um valor handle diferente de zero tiver sido especificado anteriormente em uma chamada anterior para a função DrawTriPatch do driver e o sinalizador RTPATCHFLAG_HASINFO estiver definido, o runtime atualizará a definição do patch. O runtime passa um ponteiro para uma estrutura de D3DDDITRIPATCH_INFO no parâmetro pInfo e o driver deve recompute e recuar as informações do patch. Opcionalmente, o runtime pode definir o sinalizador RTPATCHFLAG_HASSEGS para indicar a presença das informações do segmento. No entanto, se o runtime não fornecer informações de segmento em pPatch, o runtime deverá usar o D3DRS_PATCHSEGMENTS valor de estado de renderização.
  • Se um valor handle diferente de zero tiver sido especificado anteriormente em uma chamada anterior para a função DrawTriPatch do driver e o sinalizador RTPATCHFLAG_HASINFO não estiver definido, o runtime redesenhará o patch. O driver deve usar as informações armazenadas em cache para desenhar o patch. Nessa situação, o driver ignora os fluxos de vértice atuais e as informações armazenadas em cache são usadas. No entanto, o runtime ainda pode especificar novas informações de segmento; Portanto, o driver deve marcar para o sinalizador de RTPATCHFLAG_HASSEGS e manipular as informações de segmento especificadas, mesmo que ele use um patch armazenado em cache.
O driver recebe uma notificação para liberar informações de patch armazenadas em cache por meio do estado de renderização D3DRS_DELETERTPATCH. O valor desse estado de renderização é o patch a ser excluído.

Requisitos

Requisito Valor
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 (inclua D3dumddi.h)

Confira também

D3DDDIARG_DRAWTRIPATCH

D3DDDI_DEVICEFUNCS