Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Es gibt eine Reihe interessanter Abfragen für einen Treiber, die eine Anwendung vornehmen kann, wenn keine Leistungskosten anfallen. In Direct3D 7 und Direct3D 8 funktionierte ein synchroner Abfragemechanismus, GetInfo, gut für Dinge wie Statistiken, aber es wurden keine leistungskritischen Abfragen hinzugefügt. Es gibt andere Dinge (z. B. Zäune), die inhärent asynchron sind. Dies ist eine einfache API, um synchrone und asynchrone Abfragen zu erstellen. GetInfo wird in Direct3D 9 eingestellt.
Erstellen Sie eine Abfrage mit IDirect3DDevice9::CreateQuery. Diese Methode verwendet eine D3DQUERYTYPE, die definiert, welche Art von Abfrage erstellt werden soll, und gibt einen Zeiger auf ein IDirect3DQuery9-Objekt zurück. Wenn der Abfragetyp nicht unterstützt wird, gibt der Aufruf einen Fehler D3DERR_NOTAVAILABLE zurück. Mithilfe des Abfrageobjekts sendet die Anwendung die Abfrage mithilfe von IDirect3DQuery9::Issuean die Laufzeit und ruft den Abfragestatus mithilfe von IDirect3DQuery9::GetDataab. Wenn das Abfrageergebnis verfügbar ist, wird S_OK zurückgegeben; andernfalls wird S_FALSE zurückgegeben. Es wird erwartet, dass die Anwendung einen entsprechend großen Puffer für die Abfrageergebnisse übergibt.
Die Anwendung hat die Möglichkeit, die Laufzeit zu erzwingen, um die Abfrage mithilfe von D3DGETDATA_FLUSH mit IDirect3DQuery9::GetDataauf den Treiber zu leeren. Dies führt zu einem Leeren, wodurch der Treiber gezwungen wird, die Abfrage anzuzeigen. In diesem Fall wird D3DERR_DEVICELOST zurückgegeben, wenn das Gerät verloren geht.
Alle Abfragen gehen verloren, wenn das Gerät verloren geht, muss die Anwendung sie erneut erstellen. Wenn das Gerät die Abfrage nicht unterstützt und die pQueryID NULL-ist, schlägt die Abfrageerstellung mit D3DERR_INVALIDCALL fehl.
In der folgenden Tabelle werden wichtige Informationen zu jedem Abfragetyp zusammengefasst.
| QuertyType | Gültiges Problemkennzeichnung | GetData-Puffer | Laufzeit | Impliziter Anfang der Abfrage |
|---|---|---|---|---|
| D3DQUERYTYPE_VCACHE | D3DISSUE_END | D3DDEVINFO_VCACHE | Einzelhandel/Debug | CreateDevice |
| D3DQUERYTYPE_ResourceManager | D3DISSUE_END | D3DDEVINFO_ResourceManager | Nur Debuggen | Gegenwart |
| D3DQUERYTYPE_VERTEXSTATS | D3DISSUE_END | D3DDEVINFO_D3DVERTEXSTATS | Nur Debuggen | Gegenwart |
| D3DQUERYTYPE_EVENT | D3DISSUE_END | BOOL | Einzelhandel/Debug | CreateDevice |
| D3DQUERYTYPE_OCCLUSION | D3DISSUE_BEGIN,D3DISSUE_END | DWORD | Einzelhandel/Debug | N/A |
Flags-Feld für 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.
Flags-Feld für IDirect3DQuery9::GetData:
#define D3DGETDATA_FLUSH (1 << 0) // Tells the runtime to flush
// if the query is outstanding.
Verwandte Themen