Bagikan melalui


Metode IDirect3DDevice9::CreateVertexBuffer (d3d9helper.h)

Membuat buffer vertex.

Sintaks

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

Parameter

[in] Length

Jenis: UINT

Ukuran buffer vertex, dalam byte. Untuk buffer vertex FVF, Panjang harus cukup besar untuk mengandung setidaknya satu puncak, tetapi tidak perlu kelipatan ukuran puncak. Panjang tidak divalidasi untuk buffer non-FVF. Lihat Keterangan.

[in] Usage

Jenis: DWORD

Penggunaan bisa 0, yang menunjukkan tidak ada nilai penggunaan. Namun, jika penggunaan diinginkan, gunakan kombinasi satu atau beberapa D3DUSAGE konstanta. Adalah praktik yang baik untuk mencocokkan parameter penggunaan di CreateVertexBuffer dengan bendera perilaku di IDirect3D9::CreateDevice. Untuk informasi selengkapnya, lihat Keterangan.

[in] FVF

Jenis: DWORD

Kombinasi D3DFVF, penentu penggunaan yang menjelaskan format puncak simpul dalam buffer ini. Jika parameter ini diatur ke kode FVF yang valid, buffer vertex yang dibuat adalah buffer vertex FVF (lihat Remarks). Jika tidak, jika parameter ini diatur ke nol, buffer vertex adalah buffer vertex non-FVF.

[in] Pool

Jenis: D3DPOOL

Anggota jenis D3DPOOL yang dijumlahkan, menjelaskan kelas memori yang valid untuk menempatkan sumber daya. Jangan atur ke D3DPOOL_SCRATCH.

[out, retval] ppVertexBuffer

Jenis: IDirect3DVertexBuffer9**

Alamat penunjuk ke antarmuka IDirect3DVertexBuffer9 , mewakili sumber daya buffer vertex yang dibuat.

[in] pSharedHandle

Jenis: HANDEL*

Dicadangkan. Atur parameter ini ke NULL. Parameter ini dapat digunakan di Direct3D 9 untuk Windows Vista untuk berbagi sumber daya.

Mengembalikan nilai

Jenis: HRESULT

Jika metode berhasil, nilai yang dikembalikan adalah D3D_OK. Jika metode gagal, nilai yang dikembalikan dapat menjadi salah satu dari yang berikut: D3DERR_INVALIDCALL, D3DERR_OUTOFVIDEOMEMORY, E_OUTOFMEMORY.

Keterangan

Buffer vertex dapat digunakan dengan pemrosesan vertex perangkat keras atau perangkat lunak. Ini ditentukan oleh bagaimana perangkat dan buffer vertex dibuat.

Saat perangkat dibuat, CreateDevice menggunakan bendera perilaku untuk menentukan apakah akan memproses simpul dalam perangkat keras atau perangkat lunak. Ada tiga kemungkinan:

  • Proses simpul dalam perangkat keras dengan mengatur D3DCREATE_HARDWARE_VERTEXPROCESSING.
  • Proses simpul dalam perangkat lunak dengan mengatur D3DCREATE_SOFTWARE_VERTEXPROCESSING.
  • Proses simpul di perangkat keras atau perangkat lunak dengan mengatur D3DCREATE_MIXED_VERTEXPROCESSING.
Perangkat mode campuran mungkin perlu beralih antara pemrosesan perangkat lunak dan perangkat keras (menggunakan IDirect3DDevice9::SetSoftwareVertexProcessing) setelah perangkat dibuat.

Saat buffer vertex dibuat, CreateVertexBuffer menggunakan parameter penggunaan untuk memutuskan apakah akan memproses simpul dalam perangkat keras atau perangkat lunak.

  • Jika CreateDevice menggunakan D3DCREATE_HARDWARE_VERTEXPROCESSING, CreateVertexBuffer harus menggunakan 0.
  • Jika CreateDevice menggunakan D3DCREATE_SOFTWARE_VERTEXPROCESSING, CreateVertexBuffer harus menggunakan 0 atau D3DUSAGE_SOFTWAREPROCESSING. Untuk salah satu nilai, simpul akan diproses dalam perangkat lunak.
  • Jika CreateDevice menggunakan D3DCREATE_MIXED_VERTEXPROCESSING, CreateVertexBuffer dapat menggunakan 0 atau D3DUSAGE_SOFTWAREPROCESSING.
Untuk menggunakan buffer vertex dengan perangkat mode campuran, buat buffer vertex tunggal yang dapat digunakan untuk pemrosesan perangkat keras atau perangkat lunak. Gunakan IDirect3DDevice9::SetStreamSource untuk mengatur buffer vertex saat ini dan gunakan IDirect3DDevice9::SetRenderState, jika perlu, untuk mengubah perilaku perangkat agar cocok. Disarankan agar penggunaan buffer vertex cocok dengan perilaku perangkat. Perhatikan bahwa buffer vertex yang dibuat untuk pemrosesan perangkat lunak tidak dapat ditemukan dalam memori video.

Antarmuka IDirect3DDevice9 mendukung penyajian primitif menggunakan data vertex yang disimpan dalam objek buffer vertex. Buffer vertex dibuat dari IDirect3DDevice9, dan hanya dapat digunakan dengan objek IDirect3DDevice9 tempat mereka dibuat.

Ketika diatur ke nilai bukan nol, yang harus berupa kode FVF yang valid, parameter FVF menunjukkan bahwa konten buffer akan ditandai dengan kode FVF. Buffer vertex yang dibuat dengan kode FVF disebut sebagai buffer vertex FVF. Untuk informasi selengkapnya, lihat Buffer Vertex FVF (Direct3D 9).

Buffer non-FVF dapat digunakan untuk menjalin data selama penyajian multipass atau penyajian multitekstur dalam satu pass. Untuk melakukan ini, satu buffer berisi data geometri dan yang lain berisi koordinat tekstur untuk setiap tekstur yang akan dirender. Saat penyajian, buffer yang berisi data geometri diselingi dengan setiap buffer yang berisi koordinat tekstur. Jika buffer FVF digunakan sebagai gantinya, masing-masing dari mereka harus berisi data geometri yang identik selain data koordinat tekstur khusus untuk setiap tekstur yang dirender. Ini akan mengakibatkan penalti kecepatan atau memori, tergantung pada strategi yang digunakan. Untuk informasi selengkapnya tentang koordinat tekstur, lihat Koordinat Tekstur (Direct3D 9).

Persyaratan

Persyaratan Nilai
Target Platform Windows
Header d3d9helper.h (termasuk D3D9.h)
Pustaka D3D9.lib

Lihat juga

IDirect3DDevice9

IDirect3DDevice9::P rocessVertices

IDirect3DVertexBuffer9::GetDesc

Buffer Puncak (Direct3D 9)