Compartilhar via


Método IDirect3DQuery9::GetData (d3d9helper.h)

Sonda um recurso consultado para obter o estado da consulta ou um resultado da consulta. Para obter mais informações sobre consultas, consulte Consultas (Direct3D 9).

Sintaxe

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

Parâmetros

[in, out] pData

Tipo: void*

Ponteiro para um buffer que contém os dados da consulta. O usuário é responsável por alocar isso. PData só poderá ser NULL se dwSize for 0.

[in] dwSize

Tipo: DWORD

Número de bytes de dados em pData. Se você definir dwSize como zero, poderá usar esse método para sondar o recurso para a consulta status. Consulte Observações.

[in] dwGetDataFlags

Tipo: DWORD

Sinalizadores de dados que especificam o tipo de consulta. Os valores válidos são 0 ou D3DGETDATA_FLUSH. Use 0 para evitar a liberação de consultas em lote para o driver e use D3DGETDATA_FLUSH para ir em frente e liberá-las. Para aplicativos que gravam sua própria versão de espera, um resultado de consulta não é realizado até que o driver receba uma liberação.

Retornar valor

Tipo: HRESULT

O tipo de retorno identifica o estado da consulta (consulte Consultas (Direct3D 9)). O método retornará S_OK se os dados da consulta estiverem disponíveis e S_FALSE se não estiverem. Eles são considerados valores retornados bem-sucedidos. Se o método falhar quando D3DGETDATA_FLUSH for usado, o valor retornado poderá ser D3DERR_DEVICELOST.

Comentários

É possível perder o dispositivo durante a sondagem para status de consulta. Quando D3DGETDATA_FLUSH for especificado, esse método retornará D3DERR_DEVICELOST em resposta a um dispositivo perdido. Isso permite que um aplicativo impeça que os threads sejam sondados infinitamente devido a um dispositivo perdido (que não pode responder à consulta).

Um aplicativo nunca deve escrever um código que invoque apenas GetData ( ... , 0 ), esperando que GetData eventualmente retorne S_OK sozinho ao longo do tempo. Isso é verdadeiro, mesmo que o aplicativo tenha usado o sinalizador FLUSH com GetData no passado. Por exemplo:

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

Requisitos

Requisito Valor
Plataforma de Destino Windows
Cabeçalho d3d9helper.h (inclua D3D9.h)
Biblioteca D3D9.lib

Confira também

IDirect3DQuery9