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 |