Création d’une mémoire tampon de vertex (Direct3D 9)
Vous créez un objet de mémoire tampon de vertex en appelant la méthode IDirect3DDevice9 :: CreateVertexBuffer , qui accepte cinq paramètres. Le premier paramètre spécifie la longueur de la mémoire tampon du vertex, en octets. Utilisez l’opérateur sizeof pour déterminer la taille d’un format de vertex, en octets. Considérez le format de vertex personnalisé suivant.
struct CUSTOMVERTEX {
FLOAT x, y, z;
FLOAT rhw;
DWORD color;
FLOAT tu, tv; // Texture coordinates
};
// Custom flexible vertex format (FVF) describing the custom vertex structure
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1)
Pour créer une mémoire tampon de vertex pour contenir quatre structures CUSTOMVERTEX, spécifiez [ 4 * sizeof (CUSTOMVERTEX) ] pour le paramètre de longueur .
Le deuxième paramètre est un ensemble de contrôles d’utilisation. Entre autres choses, sa valeur détermine si la mémoire tampon de vertex peut contenir des informations de découpage, sous la forme d’indicateurs de séquence, pour les vertex qui existent en dehors de la zone d’affichage. Pour créer une mémoire tampon de vertex qui ne peut pas contenir d’indicateurs de clip, incluez l' _ indicateur D3DUSAGE DONOTCLIP pour le paramètre usage . L' _ indicateur D3DUSAGE DONOTCLIP est appliqué uniquement si vous indiquez également que la mémoire tampon de vertex contiendra des vertex transformés-l' _ indicateur de XYZRHW D3DFVF est inclus dans le paramètre de la Commission de la Commission . La méthode IDirect3DDevice9 :: CreateVertexBuffer ignore l' _ indicateur D3DUSAGE DONOTCLIP si vous indiquez que la mémoire tampon contient des vertex non transformés (l’indicateur D3DFVF _ XYZ). Les indicateurs de découpage occupent de la mémoire supplémentaire, ce qui rend légèrement plus volumineux une mémoire tampon de vertex prenant en charge le découpage que la mémoire tampon de vertex Étant donné que ces ressources sont allouées lors de la création de la mémoire tampon de vertex, vous devez demander à l’avance une mémoire tampon de vertex qui prend en charge le découpage.
Le troisième paramètre, le prix de la Commission, est une combinaison de D3DFVF qui décrivent le format de vertex de la mémoire tampon de vertex. Si vous spécifiez 0 pour ce paramètre, la mémoire tampon de vertex est une mémoire tampon de vertex non-Commission. Pour plus d’informations, consultez la rubrique sur les mémoires tampons de vertex (Direct3D 9). Le quatrième paramètre décrit la classe de mémoire dans laquelle placer la mémoire tampon de vertex.
Le dernier paramètre que IDirect3DDevice9 :: CreateVertexBuffer accepte est l’adresse d’une variable qui sera remplie avec un pointeur vers la nouvelle interface IDirect3DVertexBuffer9 de l’objet de mémoire tampon de vertex, si l’appel a échoué.
Vous ne pouvez pas produire d’indicateurs de clip pour une mémoire tampon de vertex qui a été créée sans prise en charge pour eux.
L’exemple de code C++ suivant montre à quoi peut ressembler la création d’une mémoire tampon de vertex dans le code.
// d3dDevice contains the address of an IDirect3DDevice9 interface
// g_pVB is a variable of type LPDIRECT3DVERTEXBUFFER9
// The custom vertex type
struct CUSTOMVERTEX {
FLOAT x, y, z;
FLOAT rhw;
DWORD color;
FLOAT tu, tv; // The texture coordinates
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1)
// Create a clipping-capable vertex buffer. Allocate enough memory
// in the default memory pool to hold three CUSTOMVERTEX
// structures
if( FAILED( d3dDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX),
0 /*Usage*/, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
return E_FAIL;