Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Há um número de consultas interessantes sobre um driver que um aplicativo pode fazer se não houver custo de desempenho. No Direct3D 7 e no Direct3D 8, um mecanismo de consulta síncrono, GetInfo, funcionou bem para coisas como estatísticas, mas nenhuma consulta crítica de desempenho foi adicionada. Há outras coisas (como cercas) que são inerentemente assíncronas. Esta é uma API simples para fazer consultas síncronas e assíncronas. GetInfo será desativado no Direct3D 9.
Crie uma consulta usando IDirect3DDevice9::CreateQuery. Esse método usa um D3DQUERYTYPE, que define que tipo de consulta fazer e retorna um ponteiro para um IDirect3DQuery9 objeto. Se o tipo de consulta não for suportado, a chamada retornará um erro D3DERR_NOTAVAILABLE. Usando o objeto de consulta, o aplicativo envia a consulta para o tempo de execução usando IDirect3DQuery9::Issuee sonda o status da consulta usando IDirect3DQuery9::GetData. Se o resultado da consulta estiver disponível, S_OK será retornado; caso contrário, S_FALSE será retornado. Espera-se que o aplicativo passe um buffer de tamanho apropriado para os resultados da consulta.
O aplicativo tem uma opção para forçar o tempo de execução para liberar a consulta para o driver usando D3DGETDATA_FLUSH com IDirect3DQuery9::GetData. Ele causa uma descarga, forçando o motorista a ver a consulta. Nesse caso, D3DERR_DEVICELOST é retornado se o dispositivo se perder.
Todas as consultas são perdidas quando o dispositivo é perdido, o aplicativo tem que recriá-los. Se o dispositivo não suportar a consulta e o pQueryID estiver NULL, a criação da consulta falhará com D3DERR_INVALIDCALL.
A tabela a seguir resume informações importantes sobre cada tipo de consulta.
QuertyType | Sinalizador de emissão válido | Buffer GetData | Tempo de execução | Início implícito da consulta |
---|---|---|---|---|
D3DQUERYTYPE_VCACHE | D3DISSUE_END | D3DDEVINFO_VCACHE | Varejo/Depuração | CreateDevice |
D3DQUERYTYPE_ResourceManager | D3DISSUE_END | D3DDEVINFO_ResourceManager | Apenas depuração | Atualidade |
D3DQUERYTYPE_VERTEXSTATS | D3DISSUE_END | D3DDEVINFO_D3DVERTEXSTATS | Apenas depuração | Atualidade |
D3DQUERYTYPE_EVENT | D3DISSUE_END | BOOL | Varejo/Depuração | CreateDevice |
D3DQUERYTYPE_OCCLUSION | D3DISSUE_BEGIN.D3DISSUE_END | DWORD | Varejo/Depuração | N/A |
Campo Sinalizadores para IDirect3DQuery9::Problema:
#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.
Campo Sinalizadores para IDirect3DQuery9::GetData:
#define D3DGETDATA_FLUSH (1 << 0) // Tells the runtime to flush
// if the query is outstanding.
Tópicos relacionados