Compartilhar via


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

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

Sintaxe

PFND3DDDI_DRAWRECTPATCH Pfnd3dddiDrawrectpatch;

HRESULT Pfnd3dddiDrawrectpatch(
  [in] HANDLE hDevice,
       const D3DDDIARG_DRAWRECTPATCH *unnamedParam2,
       const D3DDDIRECTPATCH_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_DRAWRECTPATCH que descreve o patch retangular a ser desenhado.

unnamedParam3

pInfo [in]

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

unnamedParam4

pPatch [in]

Opcional. Um ponteiro para um buffer que contém quatro valores de ponto flutuante (D3DFLOAT[4]) que fornecem as contagens de segmento para cada uma das quatro bordas do patch retangular.

Retornar valor

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

Comentários

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

O runtime fornece um valor UINT no membro Handle de D3DDDIARG_DRAWRECTPATCH para se referir à superfície de patch. Sempre que o runtime redesenhar a superfície do patch, ele passa o valor do identificador de patch e não é necessário especificar novamente a estrutura de dados D3DDDIRECTPATCH_INFO para a superfície do 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 DrawRectPatch 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 de Identificador especial 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 DrawRectPatch :

  • Se o membro Handle for zero, o patch será dinâmico. O driver não deve pré-compilar nem armazenar em cache informações para o patch. Nessa situação, o runtime passa um ponteiro para uma estrutura D3DDDIRECTPATCH_INFO no parâmetro pInfo e define o sinalizador RTPATCHFLAG_HASINFO no membro Flags da estrutura D3DDDIARG_DRAWRECTPATCH para indicar a presença da estrutura D3DDDIRECTPATCH_INFO em pInfo. Opcionalmente, o runtime também pode definir o sinalizador RTPATCHFLAG_HASSEGS em Sinalizadores 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 no 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 DrawRectPatch do driver, o runtime desenhará um novo patch 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 DrawRectPatch e não deve alocar memória para dados armazenados em cache em sua tabela de identificador 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 no 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 DrawRectPatch 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 D3DDDIRECTPATCH_INFO no parâmetro pInfo e o driver deve recompilar 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 no 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 DrawRectPatch 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 D3DRS_DELETERTPATCH estado de renderização. 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_DRAWRECTPATCH

D3DDDI_DEVICEFUNCS