Metodo IDirect3DQuery9::GetData (d3d9helper.h)

Esegue il polling di una risorsa query per ottenere lo stato della query o un risultato della query. Per altre informazioni sulle query, vedere Query (Direct3D 9).

Sintassi

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

Parametri

[in, out] pData

Tipo: void*

Puntatore a un buffer contenente i dati della query. L'utente è responsabile dell'allocazione di questa operazione. pData può essere NULL solo se dwSize è 0.

[in] dwSize

Tipo: DWORD

Numero di byte di dati in pData. Se si imposta dwSize su zero, è possibile usare questo metodo per eseguire il polling della risorsa per lo stato della query. Vedere la sezione Osservazioni.

[in] dwGetDataFlags

Tipo: DWORD

Flag di dati che specificano il tipo di query. I valori validi sono 0 o D3DGETDATA_FLUSH. Usare 0 per evitare di scaricare query in batch nel driver e usare D3DGETDATA_FLUSH per procedere e scaricarle. Per le applicazioni che scrivono la propria versione di attesa, un risultato della query non viene realizzato fino a quando il driver non riceve uno scaricamento.

Valore restituito

Tipo: HRESULT

Il tipo restituito identifica lo stato della query (vedere Query (Direct3D 9)). Il metodo restituisce S_OK se i dati della query sono disponibili e S_FALSE se non è. Questi sono considerati valori restituiti con esito positivo. Se il metodo ha esito negativo quando viene usato D3DGETDATA_FLUSH , il valore restituito può essere D3DERR_DEVICELOST.

Commenti

È possibile perdere il dispositivo durante il polling per lo stato della query. Quando viene specificato D3DGETDATA_FLUSH , questo metodo restituirà D3DERR_DEVICELOST in risposta a un dispositivo perso. Ciò consente a un'applicazione di impedire ai thread di eseguire il polling infinito a causa di un dispositivo perso (che non può rispondere alla query).

Un'applicazione non deve mai scrivere codice che richiama solo GetData ( ... , 0 ), previsto che GetData restituirà S_OK da solo nel tempo. Questo vale, anche se l'applicazione ha usato il flag FLUSH con GetData in passato. Ad esempio:

// 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(...);
}

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Intestazione d3d9helper.h (include D3D9.h)
Libreria D3D9.lib

Vedi anche

IDirect3DQuery9