Partager via


Création d’une mémoire tampon de vertex (Direct3D 9)

Vous créez un objet 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 de 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 qui contiendra quatre structures CUSTOMVERTEX, spécifiez [4*sizeof(CUSTOMVERTEX)] pour le paramètre Length .

Le deuxième paramètre est un ensemble de contrôles d’utilisation. Entre autres, sa valeur détermine si la mémoire tampon de vertex est capable de contenir des informations de découpage (sous la forme d’indicateurs d’clip) pour les sommets 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 sommets transformés . L’indicateur D3DFVF_XYZRHW est inclus dans le paramètre FVF . La méthode IDirect3DDevice9::CreateVertexBuffer ignore l’indicateur D3DUSAGE_DONOTCLIP si vous indiquez que la mémoire tampon contiendra des sommets non transformés (indicateur D3DFVF_XYZ). Les indicateurs de découpage occupent une mémoire supplémentaire, ce qui rend une mémoire tampon de vertex capable de couper légèrement plus grande qu’une mémoire tampon de vertex incapable de contenir des indicateurs de découpage. Étant donné que ces ressources sont allouées lors de la création de la mémoire tampon de vertex, vous devez demander une mémoire tampon de vertex capable de couper les vertex à l’avance.

Le troisième paramètre, FVF, 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 FVF. Pour plus d’informations, consultez Mémoires tampons de vertex FVF (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 accepté par IDirect3DDevice9::CreateVertexBuffer est l’adresse d’une variable qui sera remplie avec un pointeur vers la nouvelle interface IDirect3DVertexBuffer9 de l’objet de mémoire tampon vertex, si l’appel réussit.

Vous ne pouvez pas produire d’indicateurs d’clip pour une mémoire tampon de vertex qui a été créée sans les prendre en charge.

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;

Tampons de vertex