Zaman Uyumsuz Bildirim (Direct3D 9)
Bir sürücüde performans maliyeti olmadığında uygulamanın gerçekleştirebileceği ilginç sorgu sayısı vardır. Direct3D 7 ve Direct3D 8'de, zaman uyumlu bir sorgu mekanizması olan GetInfo, istatistikler gibi şeyler için iyi çalıştı, ancak performans açısından kritik sorgular eklenmedi. Doğal olarak zaman uyumsuz olan başka şeyler de (çitler gibi) vardır. Bu, hem zaman uyumlu hem de zaman uyumsuz sorgular yapmak için basit bir API'dir. GetInfo, Direct3D 9'da kullanımdan kaldırılacaktır.
IDirect3DDevice9::CreateQuerykullanarak bir sorgu oluşturun. Bu yöntem, ne tür bir sorgu yapılıp IDirect3DQuery9 nesnesine işaretçi döndüren bir D3DQUERYTYPE alır. Sorgu türü desteklenmiyorsa, çağrı bir hata D3DERR_NOTAVAILABLE döndürür. Sorgu nesnesini kullanarak, uygulama sorguyu IDirect3DQuery9::Issuekullanarak çalışma zamanına gönderir ve IDirect3DQuery9::GetDatakullanarak sorgu durumunu yoklar. Sorgu sonucu kullanılabilir durumdaysa S_OK döndürülür; aksi takdirde, S_FALSE döndürülür. Uygulamanın sorgu sonuçları için uygun şekilde boyutlandırılmış bir arabellek geçirmesi beklenir.
Uygulama, IDirect3DQuery9::GetDataile D3DGETDATA_FLUSH kullanarak çalışma zamanını sorguyu sürücüye boşaltmaya zorlama seçeneğine sahiptir. Temizlemeye neden olur ve sürücüyü sorguyu görmeye zorlar. Bu durumda cihaz kaybolursa D3DERR_DEVICELOST döndürülür.
Cihaz kaybolduğunda tüm sorgular kaybolur, uygulamanın bunları yeniden oluşturması gerekir. Cihaz sorguyu desteklemiyorsa ve pQueryID null ise, sorgu oluşturma işlemi D3DERR_INVALIDCALL ile başarısız olur.
Aşağıdaki tablo, her sorgu türüyle ilgili önemli bilgileri özetler.
QuertyType | Geçerli sorun bayrağı | GetData arabelleği | Çalışma zamanı | Sorgunun örtük başlangıcı |
---|---|---|---|---|
D3DQUERYTYPE_VCACHE | D3DISSUE_END | D3DDEVINFO_VCACHE | Perakende/Hata Ayıklama | CreateDevice |
D3DQUERYTYPE_ResourceManager | D3DISSUE_END | D3DDEVINFO_ResourceManager | Yalnızca hata ayıklama | Hediye |
D3DQUERYTYPE_VERTEXSTATS | D3DISSUE_END | D3DDEVINFO_D3DVERTEXSTATS | Yalnızca hata ayıklama | Hediye |
D3DQUERYTYPE_EVENT | D3DISSUE_END | BOOL | Perakende/Hata Ayıklama | CreateDevice |
D3DQUERYTYPE_OCCLUSION | D3DISSUE_BEGIN,D3DISSUE_END | DWORD | Perakende/Hata Ayıklama | YOK |
IDirect3DQuery9::Issueiçin bayraklar alanı:
#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.
IDirect3DQuery9::GetDataiçin bayraklar alanı:
#define D3DGETDATA_FLUSH (1 << 0) // Tells the runtime to flush
// if the query is outstanding.
İlgili konular