D3DHAL_DRAWPRIMITIVES2DATA structure (d3dhal.h)

La structure D3DHAL_DRAWPRIMITIVES2DATA contient les informations requises par la fonction D3dDrawPrimitives2 pour afficher les primitives.

Syntaxe

typedef struct _D3DHAL_DRAWPRIMITIVES2DATA {
  ULONG_PTR                 dwhContext;
  DWORD                     dwFlags;
  DWORD                     dwVertexType;
  LPDDRAWI_DDRAWSURFACE_LCL lpDDCommands;
  DWORD                     dwCommandOffset;
  DWORD                     dwCommandLength;
  union {
    LPDDRAWI_DDRAWSURFACE_LCL lpDDVertex;
    LPVOID                    lpVertices;
  };
  DWORD                     dwVertexOffset;
  DWORD                     dwVertexLength;
  DWORD                     dwReqVertexBufSize;
  DWORD                     dwReqCommandBufSize;
  LPDWORD                   lpdwRStates;
  union {
    DWORD   dwVertexSize;
    HRESULT ddrval;
  };
  DWORD                     dwErrorOffset;
} D3DHAL_DRAWPRIMITIVES2DATA;

Membres

dwhContext

Spécifie le handle de contexte de l’appareil Direct3D.

dwFlags

Spécifie des indicateurs qui fournissent des instructions supplémentaires au pilote ou fournissent des informations à partir du pilote. Ce membre peut être un or au niveau du bit des valeurs suivantes :

Valeur Signification
D3DHALDP2_EXECUTEBUFFER Les mémoires tampons de commande et de vertex ont été créées dans la mémoire système. Le pilote doit mettre à jour le tableau d’états vers lequel lpdwRStates pointe. Cet indicateur est défini par Direct3D uniquement.
D3DHALDP2_REQCOMMANDBUFSIZE Le pilote doit être en mesure d’augmenter la mémoire tampon de commandes actuelle d’au moins la taille spécifiée dans dwReqCommandBufSize. Les pilotes qui ne prennent pas en charge le multibuffering des mémoires tampons de commande peuvent ignorer cet indicateur. Cet indicateur est défini par Direct3D uniquement.
D3DHALDP2_REQVERTEXBUFSIZE Le pilote doit être en mesure d’allouer une mémoire tampon de vertex d’au moins la taille spécifiée dans dwReqCommandBufSize. Les pilotes qui ne prennent pas en charge le multibuffering des mémoires tampons de vertex peuvent ignorer cet indicateur. Cet indicateur est défini par Direct3D uniquement.
D3DHALDP2_SWAPCOMMANDBUFFER Le pilote peut permuter la mémoire tampon vers laquelle lpDDCommands pointe avec une nouvelle mémoire tampon de commande et retourner immédiatement, en traitant de manière asynchrone la mémoire tampon d’origine pendant que Direct3D remplit la nouvelle mémoire tampon de commande. Les pilotes qui ne prennent pas en charge le multibuffering des mémoires tampons de commande peuvent ignorer cet indicateur. Cet indicateur est défini par Direct3D uniquement.
D3DHALDP2_SWAPVERTEXBUFFER Le pilote peut permuter la mémoire tampon vers laquelle pointe lpDDVertex ou lpVertices avec une nouvelle mémoire tampon de vertex et retourner immédiatement, en traitant la mémoire tampon d’origine de manière asynchrone pendant que Direct3D remplit la nouvelle mémoire tampon de vertex. Les pilotes qui ne prennent pas en charge le multibuffering des mémoires tampons de vertex peuvent ignorer cet indicateur. Cet indicateur est défini par Direct3D uniquement.
D3DHALDP2_USERMEMVERTICES Le membre lpVertices étant valide, le pilote doit obtenir les données de vertex à partir de la mémoire allouée par l’utilisateur vers laquelle lpVertices pointe. Cet indicateur est défini par Direct3D uniquement.
D3DHALDP2_VIDMEMCOMMANDBUF La mémoire tampon de commandes allouée par le pilote en tant que mémoire tampon d’échange n’est pas dans la mémoire système. Cet indicateur peut être défini par les pilotes qui prennent en charge le multibuffering des mémoires tampons de commande.
D3DHALDP2_VIDMEMVERTEXBUF La mémoire tampon de vertex allouée par le pilote en tant que mémoire tampon d’échange n’est pas dans la mémoire système. Cet indicateur peut être défini par les pilotes qui prennent en charge le multibuffering des mémoires tampons de vertex.

dwVertexType

Identifie le FVF des données dans la mémoire tampon de vertex ; autrement dit, dwVertexType spécifie les champs de données par vertex présents dans la mémoire tampon de vertex vers laquelle lpDDVertex ou lpVertices pointe. Ce membre peut être un or au niveau du bit des valeurs du tableau suivant. Un seul des indicateurs de D3DFVF_TEXx est défini.

Valeur Signification
D3DFVF_DIFFUSE Chaque sommet a une couleur diffuse.
D3DFVF_SPECULAR Chaque sommet a une couleur spéculaire.
D3DFVF_TEX0 Aucune coordonnée de texture n’est fournie avec les données de vertex.
D3DFVF_TEX1 Chaque sommet a un ensemble de coordonnées de texture.
D3DFVF_TEX2 Chaque sommet a deux ensembles de coordonnées de texture.
D3DFVF_TEX3 Chaque sommet a trois ensembles de coordonnées de texture.
D3DFVF_TEX4 Chaque sommet a quatre ensembles de coordonnées de texture.
D3DFVF_TEX5 Chaque sommet a cinq ensembles de coordonnées de texture.
D3DFVF_TEX6 Chaque sommet a six ensembles de coordonnées de texture.
D3DFVF_TEX7 Chaque sommet a sept ensembles de coordonnées de texture.
D3DFVF_TEX8 Chaque vertex a huit ensembles de coordonnées de texture.
D3DFVF_XYZRHW Chaque sommet a des coordonnées x, y, z et w. Cet indicateur est toujours défini.

lpDDCommands

dwCommandOffset

dwCommandLength

Spécifie le nombre d’octets de données de commande valides dans la surface vers laquelle lpDDCommands pointe à partir de dwCommandOffset.

lpDDVertex

Pointe vers la structure DD_SURFACE_LOCAL qui identifie la surface DirectDraw contenant les données de vertex lorsque l’indicateur D3DHALDP2_USERMEMVERTICES n’est pas défini dans dwFlags. Forme une union avec lpVertices.

lpVertices

Pointe vers un bloc de mémoire en mode utilisateur contenant des données de vertex lorsque l’indicateur D3DHALDP2_USERMEMVERTICES est défini dans dwFlags.

dwVertexOffset

Spécifie le nombre d’octets dans la surface vers laquelle pointe lpDDVertex ou lpVertices où commencent les données de vertex.

dwVertexLength

Spécifie le nombre de sommets pour lesquels des données valides existent dans la surface pointée par lpDDVertex ou lpVertices. Ces données valides commencent à l’adresse dwVertexOffset.

dwReqVertexBufSize

Spécifie le nombre minimal d’octets que le pilote doit allouer pour la mémoire tampon de vertex d’échange. Ce membre est valide uniquement lorsque l’indicateur D3DHALDP2_REQVERTEXBUFSIZE est défini. Les pilotes qui ne prennent pas en charge le multibuffering des mémoires tampons de vertex doivent ignorer ce membre.

dwReqCommandBufSize

Spécifie le nombre minimal d’octets dont le pilote doit augmenter la mémoire tampon de commandes d’échange. Ce membre n’est valide que lorsque l’indicateur D3DHALDP2_REQCOMMANDBUFSIZE est défini. Les pilotes qui ne prennent pas en charge le multibuffering des mémoires tampons de commande doivent ignorer ce membre.

lpdwRStates

Pointe vers un tableau d’états de rendu que le pilote doit mettre à jour lors de l’analyse des commandes d’état de rendu à partir de la mémoire tampon de commandes. Le pilote doit mettre à jour ce tableau uniquement lorsque l’indicateur D3DHALDP2_EXECUTEBUFFER est défini dans dwFlags. Le pilote doit utiliser les types énumérés D3DRENDERSTATETYPE pour mettre à jour l’élément approprié du tableau d’état de rendu.

dwVertexSize

Spécifie la taille de chaque sommet, en octets. Ce membre forme une union avec ddrval.

ddrval

Spécifie l’emplacement où le pilote écrit la valeur de retour de D3dDrawPrimitives2. D3D_OK indique la réussite. Sinon, le pilote doit retourner le code d’erreur D3DERR_Xxx approprié. Pour plus d’informations, consultez Codes de retour pour les rappels de pilotes Direct3D.

Valeur Signification
D3D_OK L’opération s’est terminée avec succès.
D3DERR_COMMAND_UNPARSED Le pilote nécessite que le runtime Direct3D analyse la mémoire tampon d’exécution.

dwErrorOffset

Chaque D3DHAL_DP2RESPONSEQUERY est suivi des données suivantes relatives à la requête :

  • BOOL pour D3DQUERYTYPE_EVENT
  • DWORD pour D3DQUERYTYPE_OCCLUSION
  • structure D3DDEVINFO_VCACHE pour D3DQUERYTYPE_VCACHE

Remarques

Notez que le membre dwVertexOffset spécifie des valeurs en octets ; Le membre dwVertexLength spécifie des valeurs dans les sommets.

Pour calculer les données valides, en octets, qui existent dans la surface au niveau de lpDDVertex ou lpVertices, multipliez la valeur dans dwVertexLength par la valeur dans dwVertexSize.

Configuration requise

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

Voir aussi

D3DHAL_DP2COMMAND

D3DRENDERSTATETYPE

D3dDrawPrimitives2

DD_SURFACE_GLOBAL

DD_SURFACE_LOCAL