Question

Lors de l'écriture d'applications DirectX, il est évidemment souhaitable de soutenir l'utilisateur de suspendre l'application via Alt - Tab d'une manière qui est rapide et sans erreur . Quel est le meilleur ensemble de pratiques pour assurer cela? Les choses qui doivent être abordés comprennent:

  1. Les meilleures méthodes de détection lorsque votre application a été alt-onglets sur et quand il a été retourné à.
  2. Quelles ressources DirectX sont perdues lorsque les alt-onglets de l'utilisateur, et les meilleures façons de faire face à cela.
  3. grandes choses à faire et les choses à éviter dans l'architecture des applications à des fins de soutien Alt-Tab.
  4. Toute différence significative entre les principales versions de DirectX qu'ils appliquent au-dessus.

et des astuces gotchas sont aussi bons pour entendre parler.

Était-ce utile?

La solution

Je suppose que vous utilisez C ++ pour les besoins de mes réponses, mais si vous pouvez vous permettre d'utiliser C #, XNA ( http://creators.xna.com/ ) est une excellente plate-forme de jeu qui gère toutes ces questions pour vous.

1]

Cet article est utile pour les événements de fenêtres dans la procédure de fenêtre pour détecter lorsqu'une fenêtre perd ou gagne le focus, vous pouvez gérer cela sur votre fenêtre principale: http://www.functionx.com/win32/Lesson05.htm . En outre, consultez le message WM_ACTIVATEAPP ici: http: // msdn .microsoft.com / fr-fr / bibliothèque / ms632614 (VS.85) .aspx

2]

3]

Je veillerais à ne jamais désactiver Alt-Tab. Vous voulez sans doute la charge CPU minimale tandis que l'application n'est pas actif, car l'utilisateur probablement Alt-tabulé parce qu'ils veulent faire quelque chose d'autre, vous pouvez donc tout à fait une pause l'application, ou réduire les images rendues par seconde. Si l'application est minimzed, bien sûr, vous n'avez pas besoin de rendre quoi que ce soit non plus. Après avoir réfléchi à un jeu en réseau, ma meilleure solution est que vous devriez réduire encore les images rendues par seconde ainsi que la quantité de paquets réseau géré, peut-être même jeter un grand nombre des paquets qui viennent jusqu'à ce que le jeu est réactivée.

4]

Honnêtement, je voudrais juste coller à DirectX 9.0c (ou DirectX 10 si vous voulez limiter votre système cible d'exploitation Vista et plus récent) si possible:)

Enfin, le sdk DirectX a de nombreux tutoriels et des exemples: http://www.microsoft.com/downloads/details.aspx?FamilyID=24a541d6-0486-4453-8641-1eee9e21b282&displaylang=en

Autres conseils

Nous avons résolu par ne pas utiliser un périphérique DirectX plein écran du tout - au lieu nous avons utilisé une fenêtre en plein écran avec le haut-drapeau le plus pour le faire cacher la barre des tâches. Si vous Alt-Tab de cela, vous pouvez enlever le drapeau et minimiser la fenêtre. Les ressources de texture sont maintenues en vie par la fenêtre.

Cependant, cette approche ne gère pas l'appareil perdu événement qui se passe en raison de « l'écran de verrouillage », Ctrl + Alt + Suppr, les connexions de bureau à distance, le changement d'utilisateur ou similaire. Mais ceux qui ne ont pas besoin d'être traitées de manière très rapide ou efficace (au moins ce fut le cas dans notre application)

Toutes les applications sérieuses D3D devraient être en mesure de gérer les périphériques perdus car cela est quelque chose qui peut se produire pour diverses raisons.

Dans DX10 sous Vista il y a une nouvelle fonction « Détection délai d'attente et de récupération » qui le rend commun dans mon expérience pour les périphériques graphiques à être remis à zéro qui provoquerait un appareil perdu pour votre application. Cela semble être l'amélioration que les conducteurs âgés, mais vous avez besoin de le manipuler de toute façon.

Dans DX8 et 9 (et 10?) Si vous créez vos ressources (vertex et tampons index et textures principalement) à l'aide D3DPOOL_MANAGED ils persisteront à travers les dispositifs perdus et ne seront pas besoin de recharger. En effet, ils sont stockés dans la mémoire système et les copies d'exécution DX à la mémoire vidéo automatiquement. Cependant, il y a un coût de performance en raison de la copie et ce n'est pas recommandé pour changer rapidement des données de sommet. Bien sûr, vous le profil d'abord déterminer s'il y a un problème de vitesse: -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top