Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Ada sejumlah kueri menarik pada driver yang dapat dibuat aplikasi jika tidak ada biaya performa. Di Direct3D 7 dan Direct3D 8, mekanisme kueri sinkron, GetInfo, bekerja dengan baik untuk hal-hal seperti statistik, tetapi tidak ada kueri kritis performa yang ditambahkan. Ada hal-hal lain (seperti pagar) yang secara inheren asinkron. Ini adalah API sederhana untuk membuat kueri sinkron dan asinkron. GetInfo akan dihentikan di Direct3D 9.
Buat kueri menggunakan IDirect3DDevice9::CreateQuery. Metode ini mengambil D3DQUERYTYPE, yang menentukan jenis kueri apa yang akan dibuat dan mengembalikan penunjuk ke objekIDirect3DQuery9. Jika jenis kueri tidak didukung, panggilan mengembalikan kesalahan D3DERR_NOTAVAILABLE. Menggunakan objek kueri, aplikasi mengirimkan kueri ke runtime menggunakan IDirect3DQuery9::Issue, dan melakukan polling status kueri menggunakan IDirect3DQuery9::GetData. Jika hasil kueri tersedia, S_OK dikembalikan; jika tidak, S_FALSE dikembalikan. Aplikasi diharapkan meneruskan buffer berukuran tepat untuk hasil kueri.
Aplikasi memiliki opsi untuk memaksa runtime untuk menghapus kueri ke driver dengan menggunakan D3DGETDATA_FLUSH dengan IDirect3DQuery9::GetData. Ini menyebabkan flush, memaksa driver untuk melihat kueri. Dalam hal ini, D3DERR_DEVICELOST dikembalikan jika perangkat hilang.
Semua kueri hilang ketika perangkat hilang, aplikasi harus membuatnya kembali. Jika perangkat tidak mendukung kueri dan pQueryID NULL, pembuatan kueri akan gagal dengan D3DERR_INVALIDCALL.
Tabel berikut ini merangkum informasi penting tentang setiap jenis kueri.
| QuertyType | Bendera masalah yang valid | Buffer GetData | Runtime | Awal kueri implisit |
|---|---|---|---|---|
| D3DQUERYTYPE_VCACHE | D3DISSUE_END | D3DDEVINFO_VCACHE | Ritel/Debug | CreateDevice |
| D3DQUERYTYPE_ResourceManager | D3DISSUE_END | D3DDEVINFO_ResourceManager | Debug saja | Hadiah |
| D3DQUERYTYPE_VERTEXSTATS | D3DISSUE_END | D3DDEVINFO_D3DVERTEXSTATS | Debug saja | Hadiah |
| D3DQUERYTYPE_EVENT | D3DISSUE_END | BOOL | Ritel/Debug | CreateDevice |
| D3DQUERYTYPE_OCCLUSION | D3DISSUE_BEGIN,D3DISSUE_END | DWORD | Ritel/Debug | N/A |
Bidang bendera untuk IDirect3DQuery9::Issue:
#define D3DISSUE_END (1 << 0)
// Tells the runtime to issue the end of a query, changing its state to
// "non-signaled"
#define D3DISSUE_BEGIN (1 << 1) // Tells the runtime to issue the
// beginning of a query.
Bidang bendera untuk IDirect3DQuery9::GetData:
#define D3DGETDATA_FLUSH (1 << 0) // Tells the runtime to flush
// if the query is outstanding.
Topik terkait