Méthode IDirect3DQuery9 ::GetData (d3d9.h)
Interroge une ressource interrogée pour obtenir l’état de la requête ou un résultat de requête. Pour plus d’informations sur les requêtes, consultez Requêtes (Direct3D 9).
Syntaxe
HRESULT GetData(
[in, out] void *pData,
[in] DWORD dwSize,
[in] DWORD dwGetDataFlags
);
Paramètres
[in, out] pData
Type : void*
Pointeur vers une mémoire tampon contenant les données de requête. L’utilisateur est responsable de l’allocation de ce. pData peut avoir la valeur NULL uniquement si dwSize a la valeur 0.
[in] dwSize
Type : DWORD
Nombre d’octets de données dans pData. Si vous définissez dwSize sur zéro, vous pouvez utiliser cette méthode pour interroger la ressource pour la status de requête. Consultez la section Remarques.
[in] dwGetDataFlags
Type : DWORD
Indicateurs de données spécifiant le type de requête. Les valeurs valides sont 0 ou D3DGETDATA_FLUSH. Utilisez 0 pour éviter le vidage des requêtes par lots sur le pilote et utilisez D3DGETDATA_FLUSH pour les vider. Pour les applications qui écrivent leur propre version d’attente, un résultat de requête n’est pas réalisé tant que le pilote n’a pas reçu une vidage.
Valeur retournée
Type : HRESULT
Le type de retour identifie l’état de la requête (consultez Requêtes (Direct3D 9)). La méthode retourne S_OK si les données de requête sont disponibles et S_FALSE si ce n’est pas le cas. Celles-ci sont considérées comme des valeurs de retour réussies. Si la méthode échoue lorsque D3DGETDATA_FLUSH est utilisé, la valeur de retour peut être D3DERR_DEVICELOST.
Remarques
Il est possible de perdre l’appareil lors de l’interrogation des status de requête. Lorsque D3DGETDATA_FLUSH est spécifié, cette méthode retourne D3DERR_DEVICELOST en réponse à un appareil perdu. Cela permet à une application d’empêcher les threads d’interroger sans fin en raison d’un appareil perdu (qui ne peut pas répondre à la requête).
Une application ne doit jamais écrire de code qui appelle uniquement GetData ( ... , 0 ), en s’attendant à ce que GetData retourne S_OK par lui-même au fil du temps. Cela est vrai, même si l’application a utilisé l’indicateur FLUSH avec GetData dans le passé. Par exemple :
// 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(...);
}
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Windows |
En-tête | d3d9.h (inclure D3D9.h) |
Bibliothèque | D3D9.lib |