Frage

Beim Schreiben von DirectX -Anwendungen ist es offensichtlich wünschenswert, den Benutzer zu unterstützen, der die Anwendung durch einsetzte Alt-Tab in gewisser Weise das ist Schnell und fehlerfrei. Was sind die besten Praktiken, um dies sicherzustellen? Dinge, die behandelt werden müssen, sind:

  1. Die besten Methoden zur Erkennung, wenn Ihre Anwendung aus Alt-tababiert wurde und wenn sie zurückgegeben wurde.
  2. Welche DirectX-Ressourcen gehen verloren, wenn der Benutzer Alt-Tabs und die besten Möglichkeiten, damit umzugehen.
  3. Wichtige Dinge und Dinge, die in Anwendungsarchitektur für Zwecke der Unterstützung von Alt-Tabs zu vermeiden sind.
  4. Alle signifikanten Unterschiede zwischen den DirectX -Versionen der DirectX -Versionen, die für die oben genannten gelten.

Interessante Tricks und Gotchas sind auch gut zu hören.

War es hilfreich?

Lösung

Ich gehe davon aus, dass Sie C ++ für die Zwecke meiner Antworten verwenden, aber wenn Sie es sich leisten können, C#, xna (http://creators.xna.com/) ist eine hervorragende Spielplattform, die all diese Probleme für Sie behandelt.

1]

Dieser Artikel ist hilfreich für Windows -Ereignisse in der Fensterverfahren, um zu erkennen, wann ein Fenster verliert oder den Fokus gewinnt. Sie können dies in Ihrem Hauptfenster verarbeiten: http://www.functionx.com/win32/lesson05.htm. Schauen Sie sich hier auch die WM_ACTIVATEAPP -Nachricht an: http://msdn.microsoft.com/en-us/library/ms632614(vs.85).aspx

2]

3]

Ich würde sicherstellen, dass Sie Alt-Tab niemals deaktivieren. Sie möchten wahrscheinlich eine minimale CPU-Last, während die Anwendung nicht aktiv ist, da der Benutzer wahrscheinlich mit Alt-tabbiert ist, weil er etwas anderes tun möchte, sodass Sie die Anwendung vollständig pausieren oder die Rahmen pro Sekunde reduzieren können. Wenn die Anwendung minimiert ist, müssen Sie natürlich auch nichts rendern. Nachdem Sie über ein Netzwerkspiel nachgedacht haben, sollten Sie die Rahmen, die pro Sekunde gerendert werden, sowie die Menge an Netzwerkpaketen immer noch reduzieren sollten, möglicherweise sogar viele der Pakete wegwerfen, die eingeliefert werden, bis das Spiel wieder aktiviert ist.

4]

Ehrlich gesagt würde ich mich einfach an DirectX 9.0c (oder DirectX 10) halten, wenn Sie Ihr Zielbetriebssystem auf Vista und neuer beschränken möchten), wenn dies überhaupt möglich ist :)

Schließlich hat der DirectX SDK zahlreiche Tutorials und Proben: http://www.microsoft.com/downloads/details.aspx?familyid=24a541d6-0486-4453-8641-1eee9e21b282&displaylang=en

Andere Tipps

Wir haben es gelöst, indem wir überhaupt kein Vollbild-DirectX-Gerät verwendet haben. Stattdessen haben wir ein Vollbildfenster mit dem obersten Flag verwendet, um die Aufgabenleiste auszublenden. Wenn Sie das Alt-tab herausbringen, können Sie das Flag entfernen und das Fenster minimieren. Die Texturressourcen werden vom Fenster am Leben erhalten.

Dieser Ansatz verarbeitet jedoch nicht das Gerät verlorene Ereignis, das aufgrund von "Sperrbildschirm", Strg+Alt+Löschen, Remotedesktop -Verbindungen, Benutzerwechsel oder ähnlichem. Diese müssen jedoch nicht extrem schnell oder effizient behandelt werden (zumindest war dies in unserer Bewerbung der Fall)

Alle ernsthaften D3D -Apps sollten in der Lage sein, verlorene Geräte zu handhaben, da dies aus verschiedenen Gründen passieren kann.

In DX10 unter Vista gibt es eine neue Funktion "Timeout Detection and Recovery", die es meiner Erfahrung nach üblich macht, dass Grafikgeräte zurückgesetzt werden, was ein verlorenes Gerät für Ihre App verursacht. Dies scheint sich zu verbessern, da die Fahrer reifen, aber Sie müssen es trotzdem damit umgehen.

In DX8 und 9 (und 10?) Wenn Sie Ihre Ressourcen (Scheitelpunkt- und Indexpuffer und Texturen hauptsächlich) unter Verwendung von d3dpool_Managed erstellen, bleiben sie über verlorene Geräte hinweg und müssen nicht neu geladen werden. Dies liegt daran, dass sie im Systemspeicher und die DX -Laufzeitkopien automatisch zum Videospeicher gespeichert sind. Es gibt jedoch die Leistungskosten aufgrund des Kopierens und dies wird nicht für schnell ändernde Vertex -Daten empfohlen. Natürlich würden Sie zuerst feststellen, ob es ein Geschwindigkeitsproblem gibt :-)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top