Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Istnieje wiele interesujących zapytań dotyczących sterownika, które aplikacja może wykonać, jeśli nie ma żadnych kosztów wydajności. W usługach Direct3D 7 i Direct3D 8 mechanizm zapytania synchronicznego GetInfo dobrze sprawdzał się w przypadku takich elementów jak statystyki, ale nie dodano zapytań o znaczeniu krytycznym dla wydajności. Istnieją inne rzeczy (takie jak ogrodzenia), które są z natury asynchroniczne. Jest to prosty interfejs API umożliwiający wykonywanie zapytań synchronicznych i asynchronicznych. Polecenie GetInfo zostanie wycofane w wersji Direct3D 9.
Utwórz zapytanie przy użyciu IDirect3DDevice9::CreateQuery. Ta metoda przyjmuje D3DQUERYTYPE, która definiuje rodzaj zapytania do utworzenia i zwraca wskaźnik do obiektu IDirect3DQuery9. Jeśli typ zapytania nie jest obsługiwany, wywołanie zwraca błąd D3DERR_NOTAVAILABLE. Korzystając z obiektu zapytania, aplikacja przesyła zapytanie do środowiska uruchomieniowego przy użyciu IDirect3DQuery9::Problemi sonduje stan zapytania przy użyciu IDirect3DQuery9::GetData. Jeśli wynik zapytania jest dostępny, zostanie zwrócona S_OK; w przeciwnym razie zostanie zwrócona S_FALSE. Oczekuje się, że aplikacja przekaże odpowiedni bufor o rozmiarze dla wyników zapytania.
Aplikacja ma możliwość wymuszenia opróżnienia zapytania do sterownika przez środowisko uruchomieniowe przy użyciu D3DGETDATA_FLUSH z IDirect3DQuery9::GetData. Powoduje to opróżnienie, zmuszając sterownik do wyświetlenia zapytania. W takim przypadku D3DERR_DEVICELOST jest zwracana, jeśli urządzenie zostanie utracone.
Wszystkie zapytania zostaną utracone po utracie urządzenia, aplikacja musi je ponownie utworzyć. Jeśli urządzenie nie obsługuje zapytania, a wartość pQueryID jest null, tworzenie zapytania zakończy się niepowodzeniem z D3DERR_INVALIDCALL.
W poniższej tabeli podsumowane są ważne informacje o każdym typie zapytania.
| QuerytyType | Prawidłowa flaga problemu | Bufor GetData | Środowiska wykonawczego | Niejawny początek zapytania |
|---|---|---|---|---|
| D3DQUERYTYPE_VCACHE | D3DISSUE_END | D3DDEVINFO_VCACHE | Sprzedaż detaliczna/debugowanie | CreateDevice |
| D3DQUERYTYPE_ResourceManager | D3DISSUE_END | D3DDEVINFO_ResourceManager | Tylko debugowanie | Prezentować |
| D3DQUERYTYPE_VERTEXSTATS | D3DISSUE_END | D3DDEVINFO_D3DVERTEXSTATS | Tylko debugowanie | Prezentować |
| D3DQUERYTYPE_EVENT | D3DISSUE_END | BOOL | Sprzedaż detaliczna/debugowanie | CreateDevice |
| D3DQUERYTYPE_OCCLUSION | D3DISSUE_BEGIN,D3DISSUE_END | DWORD | Sprzedaż detaliczna/debugowanie | N/A |
Pole flagi dla IDirect3DQuery9::Problem:
#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.
Pole flagi dla IDirect3DQuery9::GetData:
#define D3DGETDATA_FLUSH (1 << 0) // Tells the runtime to flush
// if the query is outstanding.
Tematy pokrewne