Compartilhar via


estrutura D3DHAL_DP2DRAWTRIPATCH (d3dhal.h)

Somente DirectX 8.0 e versões posteriores.

D3DHAL_DRAWTRIPATCH é analisado do buffer de comando pelo retorno de chamada D3dDrawPrimitives2 quando o membro bCommand da estrutura D3DHAL_DP2COMMAND é definido como D3DDP2OP_DRAWTRIPATCH e é usado para renderizar um patch triangular.

Sintaxe

typedef struct _D3DHAL_DP2DRAWTRIPATCH {
  DWORD Handle;
  DWORD Flags;
} D3DHAL_DP2DRAWTRIPATCH;

Membros

Handle

Especifica o identificador associado à superfície.

Flags

Especifica o que, se houver, informações adicionais seguem a estrutura de dados D3DHAL_DP2DRAWTRIPATCH no fluxo DP2.

Comentários

O membro Handle é usado para associar a superfície a um identificador para que, na próxima vez que essa superfície for desenhada, não seja necessário especificar novamente a estrutura de dados D3DTRIPATCH_INFO para esse patch. Isso possibilita que o driver pré-compute e armazene em cache coeficientes de diferença e/ou qualquer outra informação, o que, por sua vez, permite que tokens de D3DDP2OP_DRAWTRIPATCH subsequentes usando o mesmo identificador sejam executados com mais eficiência. D3DTRIPATCH_INFO é descrito na documentação mais recente do SDK do DirectX.

O valor real de Handle é determinado pelo aplicativo e não está sob controle de runtime. Portanto, o driver deve estar preparado para lidar com qualquer valor especificado por um DWORD. O valor do identificador especial de zero significa que o patch é dinâmico e não há nenhum ponto pré-compilando ou armazenando em cache informações para esse patch. Um valor de subzero para Handle significa que o patch é estático (ou atualizado com baixa frequência) e a pré-computação e o cache são possíveis.

O membro Flags é usado para comunicar o que, se houver, informações adicionais seguem a estrutura de dados D3DHAL_DP2DRAWTRIPATCH no fluxo DP2. Se RTPATCHFLAG_HASSEGS for especificado, três valores de ponto flutuante seguirão D3DHAL_DP2DRAWTRIPATCH no fluxo DP2. Esses floats fornecem as contagens de segmento para cada uma das três bordas do patch triangular e substituem o valor do estado de renderização D3DRS_PATCHSEGMENTS. Se RTPATCHFLAG_HASINFO for especificado, uma estrutura de dados D3DTRIPATCH_INFO seguirá no fluxo DP2. Se ambos os sinalizadores forem especificados, os três floats que especificam contagens de segmentos seguirão D3DHAL_DP2DRAWTRIPATCH e a estrutura D3DTRIPATCH_INFO seguirá os valores de ponto flutuante.

Há quatro cenários que um driver deve manipular ao processar D3DDP2OP_DRAWTRIPATCH.

Se Handle for zero, o patch será dinâmico e nenhum pré-preenchimento ou cache deverá ser executado. Nesse caso, um D3DTRIPATCH_INFO segue D3DHAL_DP2DRAWTRIPATCH no fluxo DP2 (e o sinalizador RTPATCHFLAG_HASINFO é definido para indicar a presença da estrutura de dados D3DTRIPATCH_INFO). Opcionalmente, RTPATCHFLAG_HASSEGS também pode ser definido para indicar a presença das informações do segmento. No entanto, se isso for omitido, o valor do estado de renderização D3DRS_PATCHSEGMENTS deverá ser usado.

Se Handle for subzero e o valor do identificador não tiver sido especificado por um D3DDP2OP_DRAWTRIPATCH anterior, isso indicará que um novo patch armazenável em cache está sendo desenhado. O driver deve alocar memória para armazenar dados armazenados em cache e adicionar esses dados à tabela de identificador de patch. Como esse patch não foi visto antes, o sinalizador de RTPATCHFLAG_HASINFO deve ser definido e uma estrutura de D3DTRIPATCH_INFO deve seguir no fluxo DP2. No entanto, o runtime não garante isso e o driver deve verificar a presença das informações do patch testando o sinalizador. Se nenhuma informação for especificada, esse token deverá ser ignorado e nenhum identificador deverá ser alocado na tabela de identificadores de patch do driver. Opcionalmente, RTPATCHFLAG_HASSEGS também pode ser definido para indicar a presença das informações do segmento. No entanto, se isso for omitido, o valor do estado de renderização D3DRS_PATCHSEGMENTS deverá ser usado.

Se Handle for subzero, o valor do identificador tiver sido especificado por um token de D3DDP2OP_DRAWTRIPATCH anterior e o campo Sinalizadores contiver RTPATCHFLAG_HASINFO, a definição do patch será atualizada. Uma estrutura de dados D3DTRIPATCH_INFO segue no fluxo DP2 e o driver deve usá-lo para recompute e receber informações de patch. Opcionalmente, RTPATCHFLAG_HASSEGS também pode ser definido para indicar a presença das informações do segmento. No entanto, se isso for omitido, o valor do estado de renderização D3DRS_PATCHSEGMENTS deverá ser usado.

Se Handle for subzero, o valor do identificador tiver sido especificado por um token de D3DDP2OP_DRAWTRIPATCH anterior e o campo Sinalizadores não contiver RTPATCHFLAG_HASINFO, as informações armazenadas em cache deverão ser usadas para desenhar o patch. Nesse caso, os fluxos de vértice atuais são ignorados; em vez disso, as informações armazenadas em cache devem ser usadas. No entanto, ainda é possível, nesse caso, que uma nova informação de segmento seja especificada. Portanto, o driver deve marcar para o sinalizador RTPATCHFLAG_HASSEGS e manipular informações de segmento especificadas, mesmo se estiver usando um patch armazenado em cache.

O driver recebe a notificação de que as informações de patch armazenadas em cache são liberadas 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
Cabeçalho d3dhal.h (inclua D3dhal.h)

Confira também

D3DDP2OP_DRAWTRIPATCH

D3DHAL_DP2COMMAND

D3DHAL_DP2DRAWRECTPATCH

D3DRS_DELETERTPATCH

D3dDrawPrimitives2