structure D3DHAL_DP2DRAWRECTPATCH (d3dhal.h)

DirectX 8.0 et versions ultérieures uniquement.

D3DHAL_DRAWRECTPATCH est analysé à partir de la mémoire tampon de commandes par le rappel D3dDrawPrimitives2 lorsque le membre bCommand de la structure D3DHAL_DP2COMMAND est défini sur D3DDP2OP_DRAWRECTPATCH et est utilisé pour afficher un correctif rectangulaire.

Syntaxe

typedef struct _D3DHAL_DP2DRAWRECTPATCH {
  DWORD Handle;
  DWORD Flags;
} D3DHAL_DP2DRAWRECTPATCH;

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_DP2DRAWRECTPATCH 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 D3DRECTPATCH_INFO pour ce correctif. Cela permet au pilote de précalculer et de mettre en cache les coefficients de différence avant et/ou toute autre information, ce qui permet à son tour aux jetons de D3DDP2OP_DRAWRECTPATCH ultérieurs utilisant le même handle de s’exécuter plus efficacement. D3DRECTPATCH_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 d’exécution. Par conséquent, le pilote doit être prêt à faire face à toute valeur qui peut être 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 à précalculer ou à mettre en cache des informations pour ce correctif. Une valeur de sous-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_DP2DRAWRECTPATCH dans le flux DP2. Si RTPATCHFLAG_HASSEGS est spécifié, quatre valeurs à virgule flottante suivent D3DHAL_DP2DRAWRECTPATCH dans le flux DP2. Ces floats donnent le nombre de segments pour chacun des quatre bords du correctif rectangulaire et remplacent la valeur de l’état de rendu D3DRS_PATCHSEGMENTS. Si RTPATCHFLAG_HASINFO est spécifié, une structure de données D3DRECTPATCH_INFO suit dans le flux DP2. Si les deux indicateurs sont spécifiés, les quatre floats spécifiant le nombre de segments suivent D3DHAL_DP2DRAWRECTPATCH et la structure D3DRECTPATCH_INFO suit les valeurs à virgule flottante.

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

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, une D3DRECTPATCH_INFO suit D3DHAL_DP2DRAWRECTPATCH dans le flux DP2 (et l’indicateur RTPATCHFLAG_HASINFO est défini pour indiquer la présence de la structure de données D3DRECTPATCH_INFO). Si vous le souhaitez, RTPATCHFLAG_HASSEGS peut également être défini pour indiquer la présence des informations de segment. Toutefois, si cela est omis, la valeur de l’état de rendu D3DRS_PATCHSEGMENTS doit être utilisée à la place.

Si Handle est subzero et que la valeur de handle n’a pas été spécifiée par un D3DDP2OP_DRAWRECTPATCH 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 gestion corrective. Étant donné que ce correctif n’a pas été vu auparavant, l’indicateur RTPATCHFLAG_HASINFO doit être défini et une structure D3DRECTPATCH_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 handle de correctif du pilote. Si vous le souhaitez, RTPATCHFLAG_HASSEGS peut également être défini pour indiquer la présence des informations de segment. Toutefois, si cela est omis, la valeur de l’état de rendu D3DRS_PATCHSEGMENTS doit être utilisée à la place.

Si Handle a une valeur inférieure à zéro, la valeur de handle a été spécifiée par un jeton D3DDP2OP_DRAWRECTPATCH 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 D3DRECTPATCH_INFO suit dans le flux DP2 et le pilote doit l’utiliser pour recompiler et recacher 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 cela est omis, la valeur de l’état de rendu D3DRS_PATCHSEGMENTS doit être utilisée à la place.

Si Handle est subzero, la valeur de handle a été spécifiée par un jeton de D3DDP2OP_DRAWRECTPATCH antérieur et que le champ Indicateurs ne contient pas 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, dans ce cas, il est toujours possible de spécifier de nouvelles informations de segment. 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 de 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_DRAWRECTPATCH

D3DHAL_DP2COMMAND

D3DHAL_DP2DRAWTRIPATCH

D3DRS_DELETERTPATCH

D3dDrawPrimitives2