Méthode IDirect3DDevice9 ::CreateVertexBuffer (d3d9helper.h)

Crée une mémoire tampon de vertex.

Syntaxe

HRESULT CreateVertexBuffer(
  [in]          UINT                   Length,
  [in]          DWORD                  Usage,
  [in]          DWORD                  FVF,
  [in]          D3DPOOL                Pool,
  [out, retval] IDirect3DVertexBuffer9 **ppVertexBuffer,
  [in]          HANDLE                 *pSharedHandle
);

Paramètres

[in] Length

Type : UINT

Taille de la mémoire tampon de vertex, en octets. Pour les mémoires tampons de vertex FVF, La longueur doit être suffisamment grande pour contenir au moins un sommet, mais elle n’a pas besoin d’être un multiple de la taille du vertex. La longueur n’est pas validée pour les mémoires tampons non FVF. Consultez la section Notes.

[in] Usage

Type : DWORD

L’utilisation peut être 0, ce qui indique aucune valeur d’utilisation. Toutefois, si l’utilisation est souhaitée, utilisez une combinaison d’une ou plusieurs constantes D3DUSAGE . Il est recommandé de faire correspondre le paramètre d’utilisation dans CreateVertexBuffer avec les indicateurs de comportement dans IDirect3D9 ::CreateDevice. Pour plus d'informations, consultez la section Notes.

[in] FVF

Type : DWORD

Combinaison de D3DFVF, un spécificateur d’utilisation qui décrit le format de vertex des sommets dans cette mémoire tampon. Si ce paramètre est défini sur un code FVF valide, la mémoire tampon de vertex créée est une mémoire tampon de vertex FVF (voir Remarques). Sinon, si ce paramètre est défini sur zéro, la mémoire tampon de vertex est une mémoire tampon de vertex non FVF.

[in] Pool

Type : D3DPOOL

Membre du D3DPOOL type énuméré, décrivant une classe de mémoire valide dans laquelle placer la ressource. Ne définissez pas sur D3DPOOL_SCRATCH.

[out, retval] ppVertexBuffer

Type : IDirect3DVertexBuffer9**

Adresse d’un pointeur vers une interface IDirect3DVertexBuffer9 , représentant la ressource de mémoire tampon de vertex créée.

[in] pSharedHandle

Type : HANDLE*

Réservé. Définissez ce paramètre sur NULL. Ce paramètre peut être utilisé dans Direct3D 9 pour Windows Vista pour partager des ressources.

Valeur retournée

Type : HRESULT

Si la méthode réussit, la valeur de retour est D3D_OK. Si la méthode échoue, la valeur de retour peut être l’une des suivantes : D3DERR_INVALIDCALL, D3DERR_OUTOFVIDEOMEMORY, E_OUTOFMEMORY.

Remarques

Une mémoire tampon de vertex peut être utilisée avec le traitement du vertex matériel ou logiciel. Cela est déterminé par la façon dont l’appareil et la mémoire tampon de vertex sont créés.

Lorsqu’un appareil est créé, CreateDevice utilise l’indicateur de comportement pour déterminer s’il faut traiter les sommets dans du matériel ou des logiciels. Trois options sont possibles :

  • Traiter les sommets dans le matériel en définissant D3DCREATE_HARDWARE_VERTEXPROCESSING.
  • Traiter les sommets dans le logiciel en définissant D3DCREATE_SOFTWARE_VERTEXPROCESSING.
  • Traiter les sommets dans le matériel ou les logiciels en définissant D3DCREATE_MIXED_VERTEXPROCESSING.
Les appareils en mode mixte peuvent devoir basculer entre le traitement logiciel et le traitement matériel (à l’aide de IDirect3DDevice9 ::SetSoftwareVertexProcessing) après la création de l’appareil.

Lorsqu’une mémoire tampon de vertex est créée, CreateVertexBuffer utilise le paramètre d’utilisation pour décider s’il faut traiter les sommets dans du matériel ou des logiciels.

  • Si CreateDevice utilise D3DCREATE_HARDWARE_VERTEXPROCESSING, CreateVertexBuffer doit utiliser 0.
  • Si CreateDevice utilise D3DCREATE_SOFTWARE_VERTEXPROCESSING, CreateVertexBuffer doit utiliser 0 ou D3DUSAGE_SOFTWAREPROCESSING. Pour l’une ou l’autre valeur, les sommets sont traités dans le logiciel.
  • Si CreateDevice utilise D3DCREATE_MIXED_VERTEXPROCESSING, CreateVertexBuffer peut utiliser 0 ou D3DUSAGE_SOFTWAREPROCESSING.
Pour utiliser une mémoire tampon de vertex avec un appareil en mode mixte, créez une mémoire tampon de vertex unique qui peut être utilisée pour le traitement matériel ou logiciel. Utilisez IDirect3DDevice9 ::SetStreamSource pour définir la mémoire tampon de vertex actuelle et utilisez IDirect3DDevice9 ::SetRenderState, si nécessaire, pour modifier le comportement de l’appareil pour qu’il corresponde. Il est recommandé que l’utilisation de la mémoire tampon de vertex corresponde au comportement de l’appareil. Notez qu’une mémoire tampon de vertex créée pour le traitement logiciel ne peut pas se trouver dans la mémoire vidéo.

L’interface IDirect3DDevice9 prend en charge le rendu des primitives à l’aide de données de vertex stockées dans des objets tampons de vertex. Les tampons de vertex sont créés à partir de IDirect3DDevice9 et sont utilisables uniquement avec l’objet IDirect3DDevice9 à partir duquel ils sont créés.

Lorsqu’il est défini sur une valeur différente de zéro, qui doit être un code FVF valide, le paramètre FVF indique que le contenu de la mémoire tampon doit être caractérisé par un code FVF. Une mémoire tampon de vertex créée avec un code FVF est appelée mémoire tampon de vertex FVF. Pour plus d’informations, consultez Mémoires tampons de vertex FVF (Direct3D 9).

Les mémoires tampons non FVF peuvent être utilisées pour entrelacer des données pendant le rendu multipass ou le rendu multitexture en une seule passe. Pour ce faire, une mémoire tampon contient des données géométriques et les autres contiennent des coordonnées de texture pour chaque texture à afficher. Lors du rendu, la mémoire tampon contenant les données geometry est entrelacée avec chacune des mémoires tampons contenant les coordonnées de texture. Si des mémoires tampons FVF étaient utilisées à la place, chacune d’elles doit contenir des données géométriques identiques en plus des données de coordonnées de texture spécifiques à chaque texture rendue. Cela entraînerait une pénalité de vitesse ou de mémoire, selon la stratégie utilisée. Pour plus d’informations sur les coordonnées de texture, consultez Coordonnées de texture (Direct3D 9).

Configuration requise

Condition requise Valeur
Plateforme cible Windows
En-tête d3d9helper.h (incluez D3D9.h)
Bibliothèque D3D9.lib

Voir aussi

IDirect3DDevice9

IDirect3DDevice9 ::P rocessVertices

IDirect3DVertexBuffer9 ::GetDesc

Tampons de vertex (Direct3D 9)