Was kann dazu führen, dass ALT-TAB ärgerlich / langsam / fehlerhaft ist?

25

Dies ist eher eine offene Frage, aber ich hoffe, einen guten Einblick zu bekommen, wie das Problem vermieden werden kann.

Wenn ich Spiele unter Windows spiele, möchte ich möglicherweise ALT-TAB deaktivieren. Einige Spiele haben keine Probleme, andere sind nicht so einfach: Es kann sein, dass AGES aus- und wieder einschaltet. Einige neigen sogar zum Absturz oder zu seltsamen Verhaltensweisen wie Grafikverzerrungen oder stotterndem Sound.

Ich frage mich nur, was dieses Verhalten verursacht? Ist das eher eine DirectX- oder eine OpenGL-Sache? Liegt es daran, dass Spiele "clever" sind und den Cache zwischenspeichern / löschen, wenn sich die Bildschirmeinstellungen ändern? (Ich nehme an, sie bekommen ein Signal, wenn ich ALT-TAB?)

Ich habe keine eigenen Probleme, aber ich möchte gerne wissen, was ich vermeiden soll und welcher "clevere" Trick kann diese Art von schrecklichem Kundenerlebnis verursachen?

Michael Stum
quelle
1
Gute Frage! Hoffentlich bekommen wir wie immer ein paar aufschlussreiche Antworten!

Antworten:

17

In einigen Situationen führt ALT-TAB zum Verlust des DirectX-Geräts. Wenn das Gerät verloren geht, müssen alle GPU-Ressourcen (Scheitelpunkte, Texturen, Shader usw.) als ungültig betrachtet werden und können nicht mehr verwendet werden. MSDN-Referenz hier .

Diese verlorenen Ressourcen müssen freigegeben und bei der Wiederherstellung des Geräts neu erstellt werden. Bei den meisten Spielen, bei denen diese Ressourcen wiederhergestellt werden, müssen viele Daten erneut von der Festplatte geladen werden - oft der gleiche Ladevorgang wie zu Beginn des Spiels / Levels.

Was kann getan werden, um dies zu vermeiden?

  • Sie können einen Cache mit Ihren Daten im RAM-Speicher behalten, sodass die Rückübertragung auf die GPU schneller ist als das erneute Laden von HD. Ich glaube, es gibt eine Möglichkeit, DirectX dazu zu bringen, dies automatisch zu tun.
  • Verwenden Sie eine neue Version von DirectX. Dieses Zitat ( Quelle ) stammt von MSDN unter DirectX 9Ex:

Geräte gehen nur noch unter zwei Umständen verloren. Wenn die Hardware zurückgesetzt wird, weil sie hängt, und wenn der Gerätetreiber gestoppt wird. Wenn die Hardware hängt, kann das Gerät durch Aufrufen von ResetEx zurückgesetzt werden. Wenn die Hardware hängt, geht der Texturspeicher verloren.

CiscoIPPhone
quelle
Könnten Sie einen Link für dieses Zitat bereitstellen? Wir stellen fest, dass das Gerät verloren geht, wenn Sie auch den Desktop sperren.
Kylotan
Ich habe den Link für das Zitat hinzugefügt.
CiscoIPPhone
1
Die Änderung des DirectX-Verhaltens ist ein Nebeneffekt der Änderung des Treibermodells. Das heißt, es ist WDDM erforderlich. SO ist es nur Vista / Win7.
Bahbar
7

In Direct3D kann ein Gerät verloren gehen, wenn Sie ALT-TAB außerhalb des Vollbildfensters drücken. In diesem Fall müssen Sie die Ressourcen freigeben und wiederherstellen und das Gerät zurücksetzen. Dies kann schwierig sein, abhängig von der Komplexität des Spiels oder der Faulheit der Entwickler (hi Valve!). Ich glaube nicht, dass OpenGL unter demselben Problem leidet, da der Treiber dafür verantwortlich ist, den OpenGL-Kontext für Sie zu behalten, aber ich bin nicht sicher.

Auf StackOverflow gibt es eine Frage zu den Best Practices für die ALT-TAB-Unterstützung in einer DirectX-App, die nützliche Links von MSDN und anderen Quellen enthält.

Firas Assaad
quelle
3
Sie haben Recht, der Grund, warum OpenGL nicht (so sehr) darunter leidet, ist, dass der Treiber unter Windows eine Kopie von allem für Sie aufbewahrt. Dies kann dazu führen, dass GL-Apps mehr RAM als DX-Apps verwenden. Eine gut erzogene DX-App sollte jedoch alles zwischenspeichern, falls die Kontextdaten trotzdem wiederhergestellt werden müssen, sodass die Verantwortung für das Zwischenspeichern beim Kunden liegt.
Branan
Das stimmt (über OpenGL).
topright
0

Es kann die verfügbare Menge an freiem RAM sein. Wenn es bei der Ausführung Ihres Spiels zu niedrig ist, versteckt Windows die meisten seiner Dienste im Auslagerungsbereich (dh es nimmt die meisten der im RAM geladenen Daten und legt sie stattdessen in einem speziellen Bereich Ihrer Festplatte ab), damit Ihr Spiel funktioniert so viel RAM-Speicher wie möglich zur Verfügung zu haben.

Wenn Sie die Tastenkombination Alt + Tab vom Spiel in Windows drücken, müssen diese Dienste in den Arbeitsspeicher geladen werden, damit sie ausgeführt werden können. Daher werden die Spieldaten aus dem Arbeitsspeicher entnommen, im Swap gespeichert und die Windows-Daten abgerufen der Swap in den RAM.

Und wie Sie wissen, kann das Schreiben auf die Festplatte AGES im Vergleich zum RAM-Speicher in Anspruch nehmen. Das gleiche passiert auch, wenn Sie ein schweres Spiel beenden. Aus diesem Grund kann es sehr viel komfortabler sein, über genügend RAM-Speicher sowohl für ein Spiel als auch für Windows zu verfügen.

Aurelien Ribon
quelle