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.
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) |