Notification asynchrone (Direct3D 9)

Il existe un certain nombre de requêtes intéressantes sur un pilote qu’une application peut prendre en cas de baisse des performances. Dans Direct3D 7 et Direct3D 8, un mécanisme de requête synchrone, GetInfo, fonctionnait bien pour des statistiques, mais aucune requête critique pour les performances n’a été ajoutée. Il existe d’autres éléments (tels que des délimiteurs) qui sont intrinsèquement asynchrones. Il s’agit d’une API simple pour effectuer des requêtes synchrones et asynchrones. GetInfo sera mis hors service dans Direct3D 9.

Créez une requête à l’aide de IDirect3DDevice9 :: CreateQuery. Cette méthode prend un D3DQUERYTYPE, qui définit le type de requête à créer et retourne un pointeur vers un objet IDirect3DQuery9 . Si le type de requête n’est pas pris en charge, l’appel retourne une erreur D3DERR _ NOTAVAILABLE. À l’aide de l’objet de requête, l’application soumet la requête au runtime à l’aide de IDirect3DQuery9 :: issue, et interroge l’état de la requête à l’aide de IDirect3DQuery9 :: GetData. Si le résultat de la requête est disponible, S _ OK est retourné ; sinon, s _ false est retourné. L’application est censée passer une mémoire tampon de taille appropriée pour les résultats de la requête.

L’application a la possibilité de forcer le runtime à vider la requête au pilote à l’aide de D3DGETDATA _ flush avec IDirect3DQuery9 :: GetData. Elle provoque un vidage, forçant le pilote à voir la requête. Dans ce cas, D3DERR _ DEVICELOST est retourné si l’appareil est perdu.

Toutes les requêtes sont perdues lorsque l’appareil est perdu, l’application doit les recréer. Si l’appareil ne prend pas en charge la requête et que pQueryID a la valeur null, la création de la requête échoue avec D3DERR _ INVALIDCALL.

Le tableau suivant récapitule les informations importantes sur chaque type de requête.

QuertyType Indicateur de problème valide Mémoire tampon GetData Runtime Début de requête implicite
D3DQUERYTYPE _ Vcache Fin de D3DISSUE _ D3DDEVINFO _ Vcache Vente au détail/débogage CreateDevice
D3DQUERYTYPE _ ResourceManager Fin de D3DISSUE _ D3DDEVINFO _ ResourceManager Déboguer uniquement Présent
D3DQUERYTYPE _ VERTEXSTATS Fin de D3DISSUE _ D3DDEVINFO _ D3DVERTEXSTATS Déboguer uniquement Présent
_Événement D3DQUERYTYPE Fin de D3DISSUE _ BOOL Vente au détail/débogage CreateDevice
_Occlusion D3DQUERYTYPE D3DISSUE _ Begin, D3DISSUE _ end DWORD Vente au détail/débogage N/A

Champ Flags pour IDirect3DQuery9 :: issue:

#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. 

Champ Flags pour IDirect3DQuery9 :: GetData:

 
#define D3DGETDATA_FLUSH (1 << 0) // Tells the runtime to flush 
// if the query is outstanding.

Astuces de programmation