D3DHAL_DP2DRAWTRIPATCH structure (d3dhal.h)

DirectX 8.0 et versions ultérieures uniquement.

D3DHAL_DRAWTRIPATCH est analysé à partir de la mémoire tampon de commande par le rappel D3dDrawPrimitives2 lorsque le membre bCommand de la structure D3DHAL_DP2COMMAND a la valeur D3DDP2OP_DRAWTRIPATCH et est utilisé pour afficher un correctif triangulaire.

Syntaxe

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

Membres

Handle

Spécifie le handle associé à la surface.

Flags

Spécifie les informations supplémentaires, le cas échéant, qui suivent la structure de données D3DHAL_DP2DRAWTRIPATCH dans le flux DP2.

Remarques

Le membre Handle est utilisé pour associer la surface à un handle, de sorte que la prochaine fois que cette surface sera dessinée, il n’est pas nécessaire de respecifier la structure de données D3DTRIPATCH_INFO pour ce correctif. Cela permet au pilote de précalculer et de mettre en cache les coefficients de différence de transfert et/ou toute autre information, ce qui permet aux jetons de D3DDP2OP_DRAWTRIPATCH suivants utilisant le même handle de s’exécuter plus efficacement. D3DTRIPATCH_INFO est décrit dans la documentation la plus récente du Kit de développement logiciel (SDK) DirectX.

La valeur réelle de Handle est déterminée par l’application et n’est pas sous contrôle du runtime. Par conséquent, le pilote doit être prêt à faire face à toute valeur spécifiée par un DWORD. La valeur de handle spéciale de zéro signifie que le correctif est dynamique et qu’il n’y a aucun intérêt de précalculer ou de mettre en cache les informations pour ce correctif. Une valeur inférieure à zéro pour Handle signifie que le correctif est statique (ou mis à jour avec une fréquence faible) et que la précomputation et la mise en cache sont possibles.

Le membre Flags est utilisé pour communiquer les informations supplémentaires, le cas échéant, qui suivent la structure de données D3DHAL_DP2DRAWTRIPATCH dans le flux DP2. Si RTPATCHFLAG_HASSEGS est spécifié, trois valeurs à virgule flottante suivent D3DHAL_DP2DRAWTRIPATCH dans le flux DP2. Ces valeurs flottantes donnent le nombre de segments pour chacun des trois bords du correctif triangulaire et remplacent la valeur de l’état de rendu D3DRS_PATCHSEGMENTS. Si RTPATCHFLAG_HASINFO est spécifié, une structure de données D3DTRIPATCH_INFO suit dans le flux DP2. Si les deux indicateurs sont spécifiés, les trois floats spécifiant le nombre de segments suivent D3DHAL_DP2DRAWTRIPATCH et la structure D3DTRIPATCH_INFO suit les valeurs à virgule flottante.

Il existe quatre scénarios qu’un pilote doit gérer lors du traitement D3DDP2OP_DRAWTRIPATCH.

Si Handle est égal à zéro, le correctif est dynamique et aucune précomputation ou mise en cache ne doit être effectuée. Dans ce cas, un D3DTRIPATCH_INFO suit D3DHAL_DP2DRAWTRIPATCH dans le flux DP2 (et l’indicateur RTPATCHFLAG_HASINFO est défini pour indiquer la présence de la structure de données D3DTRIPATCH_INFO). Si vous le souhaitez, RTPATCHFLAG_HASSEGS peut également être défini pour indiquer la présence des informations de segment. Toutefois, si cette valeur est omise, la valeur de l’état de rendu D3DRS_PATCHSEGMENTS doit être utilisée à la place.

Si Handle est sous-zéro et que la valeur de handle n’a pas été spécifiée par un D3DDP2OP_DRAWTRIPATCH antérieur, cela indique qu’un nouveau correctif pouvant être mis en cache est en cours de dessin. Le pilote doit allouer de la mémoire pour stocker les données mises en cache et ajouter ces données à sa table de handle de correctif. Étant donné que ce correctif n’a pas été vu auparavant, l’indicateur RTPATCHFLAG_HASINFO doit être défini et une structure D3DTRIPATCH_INFO doit suivre dans le flux DP2. Toutefois, le runtime ne garantit pas cela, et le pilote doit vérifier la présence des informations de correctif en testant l’indicateur. Si aucune information n’est spécifiée, ce jeton doit être ignoré et aucun handle ne doit être alloué dans la table de poignées correctives du pilote. Si vous le souhaitez, RTPATCHFLAG_HASSEGS peut également être défini pour indiquer la présence des informations de segment. Toutefois, si cette valeur est omise, la valeur de l’état de rendu D3DRS_PATCHSEGMENTS doit être utilisée à la place.

Si Handle est sous-zéro, la valeur de handle a été spécifiée par un jeton D3DDP2OP_DRAWTRIPATCH antérieur et que le champ Indicateurs contient RTPATCHFLAG_HASINFO, la définition du correctif est en cours de mise à jour. Une structure de données D3DTRIPATCH_INFO suit dans le flux DP2 et le pilote doit l’utiliser pour recalculer et mettre en cache les informations de correctif. Si vous le souhaitez, RTPATCHFLAG_HASSEGS peut également être défini pour indiquer la présence des informations de segment. Toutefois, si cette valeur est omise, la valeur de l’état de rendu D3DRS_PATCHSEGMENTS doit être utilisée à la place.

Si Handle est sous-zéro, la valeur de handle a été spécifiée par un jeton de D3DDP2OP_DRAWTRIPATCH antérieur et que le champ Indicateurs ne contient pas de RTPATCHFLAG_HASINFO, les informations mises en cache doivent être utilisées pour dessiner le correctif. Dans ce cas, les flux de vertex actuels sont ignorés ; les informations mises en cache doivent être utilisées à la place. Toutefois, il est toujours possible dans ce cas qu’une nouvelle information de segment soit spécifiée. Par conséquent, le pilote doit case activée pour l’indicateur RTPATCHFLAG_HASSEGS et gérer les informations de segment spécifiées, même si vous utilisez un correctif mis en cache.

Le pilote reçoit une notification indiquant que les informations du correctif mis en cache sont publiées via l’état de rendu D3DRS_DELETERTPATCH. La valeur de cet état de rendu est le correctif à supprimer.

Configuration requise

Condition requise Valeur
En-tête d3dhal.h (inclure D3dhal.h)

Voir aussi

D3DDP2OP_DRAWTRIPATCH

D3DHAL_DP2COMMAND

D3DHAL_DP2DRAWRECTPATCH

D3DRS_DELETERTPATCH

D3dDrawPrimitives2