IDirect3DQuery9::GetData-Methode (d3d9helper.h)

Ruft eine abgefragte Ressource ab, um den Abfragestatus oder ein Abfrageergebnis abzurufen. Weitere Informationen zu Abfragen finden Sie unter Abfragen (Direct3D 9).

Syntax

HRESULT GetData(
  [in, out] void  *pData,
  [in]      DWORD dwSize,
  [in]      DWORD dwGetDataFlags
);

Parameter

[in, out] pData

Typ: void*

Zeiger auf einen Puffer, der die Abfragedaten enthält. Der Benutzer ist für die Zuweisung verantwortlich. pData darf nur NULL sein, wenn dwSize 0 ist.

[in] dwSize

Typ: DWORD

Anzahl der Byte der Daten in pData. Wenn Sie dwSize auf null festlegen, können Sie diese Methode verwenden, um die Ressource für die Abfrage status abzufragen. Siehe Bemerkungen.

[in] dwGetDataFlags

Typ: DWORD

Datenflags, die den Abfragetyp angeben. Gültige Werte sind entweder 0 oder D3DGETDATA_FLUSH. Verwenden Sie 0, um zu vermeiden, dass Batchabfragen an den Treiber geleert werden, und verwenden Sie D3DGETDATA_FLUSH, um sie zu leeren. Bei Anwendungen, die eine eigene Version von Warten schreiben, wird erst dann ein Abfrageergebnis realisiert, wenn der Treiber eine Leerung erhält.

Rückgabewert

Typ: HRESULT

Der Rückgabetyp identifiziert den Abfragezustand (siehe Abfragen (Direct3D 9)). Die -Methode gibt S_OK zurück, wenn die Abfragedaten verfügbar sind, und S_FALSE, falls nicht. Diese werden als erfolgreiche Rückgabewerte betrachtet. Wenn die Methode bei verwendung D3DGETDATA_FLUSH fehlschlägt, kann der Rückgabewert D3DERR_DEVICELOST werden.

Hinweise

Es ist möglich, das Gerät beim Abfragen von Abfrage-status zu verlieren. Wenn D3DGETDATA_FLUSH angegeben wird, gibt diese Methode als Reaktion auf ein verlorenes Gerät D3DERR_DEVICELOST zurück. Dadurch kann eine Anwendung verhindern, dass Threads aufgrund eines verloren gegangenen Geräts endlos abfragen (das nicht auf die Abfrage reagieren kann).

Eine Anwendung darf niemals Code schreiben, der nur GetData ( ... , 0 ) aufruft, wobei erwartet wird, dass GetData schließlich S_OK im Laufe der Zeit selbst zurückgibt. Dies gilt auch dann, wenn die Anwendung in der Vergangenheit das FLUSH-Flag mit GetData verwendet hat. Beispiel:

// Enables an infinite loop:
while( pQuery->GetData( ... , 0 ) == S_FALSE ) ;

// Still enables an infinite loop:
pQuery->GetData( ... , D3DGETDATA_FLUSH );
while( pQuery->GetData( ... , 0 ) == S_FALSE ) ;

// Does not enable an infinite loop because eventually the command
// buffer will fill up and that will cause a flush to occur.
while( pQuery->GetData( ..., 0 ) == S_FALSE ) {
	pDevice->SetTexture(...);
	pDevice->Draw(...);
}

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile d3d9helper.h (include D3D9.h)
Bibliothek D3D9.lib

Weitere Informationen

IDirect3DQuery9