Aracılığıyla paylaş


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.

Programlama İpuçları