Membuat Buffer Vertex (Direct3D 9)

Anda membuat objek buffer vertex dengan memanggil metode IDirect3DDevice9::CreateVertexBuffer , yang menerima lima parameter. Parameter pertama menentukan panjang buffer vertex, dalam byte. Gunakan operator sizeof untuk menentukan ukuran format vertex, dalam byte. Pertimbangkan format puncak kustom berikut.

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)

Untuk membuat buffer vertex untuk menampung empat struktur CUSTOMVERTEX, tentukan [4*sizeof(CUSTOMVERTEX)] untuk parameter Panjang .

Parameter kedua adalah sekumpulan kontrol penggunaan. Antara lain, nilainya menentukan apakah buffer puncak mampu berisi informasi kliping - dalam bentuk bendera klip - untuk simpul yang ada di luar area tampilan. Untuk membuat buffer vertex yang tidak dapat berisi bendera klip, sertakan bendera D3DUSAGE_DONOTCLIP untuk parameter Penggunaan . Bendera D3DUSAGE_DONOTCLIP diterapkan hanya jika Anda juga menunjukkan bahwa buffer vertex akan berisi simpul yang diubah - bendera D3DFVF_XYZRHW disertakan dalam parameter FVF . Metode IDirect3DDevice9::CreateVertexBuffer mengabaikan bendera D3DUSAGE_DONOTCLIP jika Anda menunjukkan bahwa buffer akan berisi simpul yang tidak ditransformasi (bendera D3DFVF_XYZ). Bendera kliping menempati memori tambahan, membuat buffer vertex berkemampuan kliping sedikit lebih besar dari buffer vertex yang tidak mampu berisi bendera kliping. Karena sumber daya ini dialokasikan ketika buffer vertex dibuat, Anda harus meminta buffer vertex berkemampuan kliping sebelumnya.

Parameter ketiga, FVF, adalah kombinasi dari D3DFVF yang menjelaskan format vertex buffer vertex. Jika Anda menentukan 0 untuk parameter ini, maka buffer vertex adalah buffer vertex non-FVF. Untuk informasi selengkapnya, lihat Buffer Vertex FVF (Direct3D 9). Parameter keempat menjelaskan kelas memori untuk menempatkan buffer vertex.

Parameter akhir yang diterima IDirect3DDevice9::CreateVertexBuffer adalah alamat variabel yang akan diisi dengan pointer ke antarmuka IDirect3DVertexBuffer9 baru dari objek buffer vertex, jika panggilan berhasil.

Anda tidak dapat menghasilkan bendera klip untuk buffer puncak yang dibuat tanpa dukungan untuknya.

Contoh kode C++ berikut menunjukkan seperti apa membuat buffer vertex dalam kode.

   
// 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;

Buffer Puncak