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.