Data Permukaan Privat (Direct3D 9)

Anda dapat menyimpan segala jenis data khusus aplikasi dengan permukaan. Misalnya, permukaan yang mewakili peta dalam game mungkin berisi informasi tentang medan.

Permukaan dapat memiliki lebih dari satu buffer data privat. Setiap buffer diidentifikasi oleh GUID yang Anda berikan saat melampirkan data ke permukaan.

Untuk menyimpan data permukaan privat, gunakan SetPrivateData, meneruskan penunjuk ke buffer sumber, ukuran data, dan GUID yang ditentukan aplikasi untuk data. Secara opsional, data sumber dapat ada dalam bentuk objek COM; dalam hal ini, Anda meneruskan penunjuk ke penunjuk antarmuka IUnknown objek dan Anda mengatur bendera D3DSPD_IUNKNOWNPOINTER.

SetPrivateData mengalokasikan buffer internal untuk data dan menyalinnya. Anda kemudian dapat membebaskan buffer atau objek sumber dengan aman. Buffer internal atau referensi antarmuka dirilis saat FreePrivateData dipanggil. Ini terjadi secara otomatis ketika permukaan dikosongkan.

Untuk mengambil data privat untuk permukaan, Anda harus mengalokasikan buffer dengan ukuran yang benar lalu memanggil metode GetPrivateData, meneruskan GUID yang ditetapkan ke data. Anda bertanggung jawab untuk membebaskan memori dinamis apa pun yang Anda gunakan untuk buffer ini. Jika data adalah objek COM, metode ini mengambil pointer IUnknown .

Jika Anda tidak tahu seberapa besar buffer untuk dialokasikan, pertama-tama panggil GetPrivateData dengan nol di pSizeOfData. Jika metode gagal dengan D3DERR_MOREDATA, metode mengembalikan jumlah byte yang diperlukan untuk buffer.

Permukaan Direct3D