Partager via


structure D3DHAL_DP2DRAWRECTPATCH (d3dhal.h)

DirectX 8.0 et versions ultérieures uniquement.

D3DHAL_DRAWRECTPATCH est analysé à partir de la mémoire tampon de commande par le rappel D3dDrawPrimitives2 lorsque le membre D3DHAL_DP2COMMAND structure bCommand 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 ce qui, le cas échéant, des informations supplémentaires suivent la structure de données D3DHAL_DP2DRAWRECTPATCH dans le flux DP2.

Remarques

Le Handle membre est utilisé pour associer la surface à un handle, afin que la prochaine fois que cette surface soit 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écomputer et de mettre en cache des coefficients de différence avant et/ou d’autres informations, ce qui permet à son tour aux jetons de D3DDP2OP_DRAWRECTPATCH suivants à l’aide du même handle de s’exécuter plus efficacement. D3DRECTPATCH_INFO est décrit dans la dernière documentation 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 à n’importe quelle 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’existe aucun point de précomputation ou d’informations de mise en cache 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.

Les indicateurs membre sont utilisés pour communiquer ce qui, le cas échéant, des informations supplémentaires 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 flotteurs 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 inférieure à zéro et que la valeur de handle n’a pas été spécifiée par une D3DDP2OP_DRAWRECTPATCH antérieure, cela indique qu’un nouveau correctif mis en cache est dessiné. Le pilote doit allouer de la mémoire pour stocker des 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 précédemment, l’indicateur RTPATCHFLAG_HASINFO doit être défini et une structure D3DRECTPATCH_INFO doit suivre dans le flux DP2. Le runtime ne garantit pas cela, mais 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 est inférieure à zéro, la valeur de handle a été spécifiée par un jeton de D3DDP2OP_DRAWRECTPATCH antérieur et le champ Indicateurs contient RTPATCHFLAG_HASINFO, la définition du correctif est mise à jour. Une structure de données D3DRECTPATCH_INFO suit 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 inférieure à zéro, la valeur de handle a été spécifiée par un jeton de D3DDP2OP_DRAWRECTPATCH antérieur et 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, il est toujours possible dans ce cas de spécifier de nouvelles informations de segment. Par conséquent, le pilote doit rechercher 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 mises en cache sont publiées via la D3DRS_DELETERTPATCH d’état de rendu. La valeur de cet état de rendu est le correctif à supprimer.

Exigences

Exigence Valeur
d’en-tête d3dhal.h (include D3dhal.h)

Voir aussi

D3DDP2OP_DRAWRECTPATCH

D3DHAL_DP2COMMAND

D3DHAL_DP2DRAWTRIPATCH

D3DRS_DELETERTPATCH

D3dDrawPrimitives2