Método IDirect3DQuery9::GetData (d3d9helper.h)
Sondea un recurso consultado para obtener el estado de la consulta o un resultado de la consulta. Para obtener más información sobre las consultas, vea Consultas (Direct3D 9).
Sintaxis
HRESULT GetData(
[in, out] void *pData,
[in] DWORD dwSize,
[in] DWORD dwGetDataFlags
);
Parámetros
[in, out] pData
Tipo: void*
Puntero a un búfer que contiene los datos de consulta. El usuario es responsable de asignar esto. pData solo puede ser NULL si dwSize es 0.
[in] dwSize
Tipo: DWORD
Número de bytes de datos en pData. Si establece dwSize en cero, puede usar este método para sondear el recurso para el estado de la consulta. Vea Notas.
[in] dwGetDataFlags
Tipo: DWORD
Marcas de datos que especifican el tipo de consulta. Los valores válidos son 0 o D3DGETDATA_FLUSH. Use 0 para evitar el vaciado de consultas por lotes en el controlador y use D3DGETDATA_FLUSH para continuar y vaciarlas. En el caso de las aplicaciones que escriben su propia versión de espera, un resultado de consulta no se realiza hasta que el controlador recibe un vaciado.
Valor devuelto
Tipo: HRESULT
El tipo de valor devuelto identifica el estado de consulta (vea Consultas (Direct3D 9)). El método devuelve S_OK si los datos de consulta están disponibles y S_FALSE si no lo está. Se consideran valores devueltos correctos. Si se produce un error en el método cuando se usa D3DGETDATA_FLUSH , se puede D3DERR_DEVICELOST el valor devuelto.
Comentarios
Es posible perder el dispositivo mientras sondea el estado de la consulta. Cuando se especifica D3DGETDATA_FLUSH , este método devolverá D3DERR_DEVICELOST en respuesta a un dispositivo perdido. Esto permite que una aplicación impida que los subprocesos sondee sin fin debido a un dispositivo perdido (que no puede responder a la consulta).
Una aplicación nunca debe escribir código que solo invoca GetData ( ... , 0 ), esperando que GetData devuelva finalmente S_OK por sí mismo a lo largo del tiempo. Esto es cierto, incluso si la aplicación ha usado la marca FLUSH con GetData en el pasado. Por ejemplo:
// 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 | Value |
---|---|
Plataforma de destino | Windows |
Encabezado | d3d9helper.h (incluya D3D9.h) |
Library | D3D9.lib |