Frage

Die Leistung einer Direct3D-Anwendung scheint im Vollbildmodus im Vergleich zum Fenstermodus deutlich besser zu sein. Was sind die technischen Gründe dahinter?

Ich denke, es hat etwas mit der Tatsache zu tun, dass eine Vollbild-Anwendung exklusive Steuerung für die Anzeige gewinnen. Aber warum die Anwendung kann nicht gewinnen exklusive Kontrolle für Teil des Bildschirms (das heißt Fenster) und hat die gleichen Leistungsvorteile?

War es hilfreich?

Lösung

Hier sind die Klippe Hinweise, wie die Dinge unterhalb arbeiten.

Monitor-Bildschirm muss immer mit sogenannten Primärfläche zugeordnet sein, um etwas zu zeigen, das heißt Grafikkarte kann nur aus einer Oberfläche scannen in Videospeicher.

Wenn Anwendung Vollbild wird (und alles war richtig Umklappen zu ermöglichen eingerichtet), primäre Oberfläche ist nur eine der Anwendung backbuffers, und blätterte in jedem Frame zu einem anderen Backbuffer. Es ist der effizienteste Weg, auf dem Bildschirm zu präsentieren, aber es erfordert Anwendung den gesamten Überwachungsbereich (das heißt gesamte Primäroberfläche) zu besitzen.

Wenn es gibt keine Vollbild-Anwendung und DWM ausgeschaltet ist, wird primäre Oberfläche von OS gehört, und jede Fenster Anwendung führt eine blit von Anwendung zu Backbuffer eine Primäroberfläche. Diese blit dauert einige GPU Zeit (sowie blits von den anderen Anwendungen auf dem Bildschirm sichtbar) in Anspruch nehmen, so ist es nicht so effizient wie Vollbild-Darstellung. XP arbeitete auf diese Weise.

Wenn DWM den Bildschirm komponiert, werden die Dinge noch komplizierter. Hier besitzt DWM die primäre Oberfläche und muss dort Anwendungsfenster ziehen. Um es möglich zu machen, hat jedes Fenster eine zugehörige Oberfläche seinen Inhalt hält, die so genannten Umleitungsfläche (die DWM Fenster Ghosting zu ermöglichen, erlaubt, Glaseffekte, und alles, was gute Sachen). Jedes Mal, D3D-Anwendung gibt einen Rahmen, es fügt eine blit zu einer Umleitung Oberfläche. Auf diese Weise müssen mehrere blits geschehen: auf eine Umleitung Oberfläche blit von der App, blit von einer Umleitungsfläche zum Primär von DWM, das ist wiederum ein gewisser Overhead im Vergleich zu Vollbild

.

Beachten Sie alle diese zusätzlichen Arbeiten an der GPU, so dass es keine CPU-Leistung auswirken.

Stuff lesen weiter:

http://blogs.msdn.com/greg_schechter/ Archiv / 2006/03/19 / 555087.aspx

http://blogs.msdn.com/greg_schechter/ Archiv / 2006/05/02 / 588934.aspx

http://blogs.msdn.com/greg_schechter/ Archiv / 2006/03/05 / 544314.aspx

Andere Tipps

Es gibt ein bisschen auf MSDN das sagt Vollbildmodus Puffer Flipping verwendet, wenn richtig eingerichtet ist, im Gegensatz zu Blitten. Es macht Sinn.

Natürlich können Sie (und in gewisser Weise tun) geben exklusive Steuerung für einen Teil des Bildschirms, um eine Anwendung, aber was passiert mit dem Rest des Bildschirms? Sie haben noch zu blit, Okklusion Kontrolle zu tun, usw. auf dem Rest der Fenster, und ich denke, das ist, was die Performance-Einbußen führt.

Ich werde in den @ aib 's Antwort, dass der Rest des Bildschirms durch das Betriebssystem verwaltet wird. Also, wenn irgendetwas anderes gezogen werden muss / bei gleichzeitig gearbeitet, es hat eine Leistung getroffen werden.

Zum Beispiel, wenn Sie ein Video abspielen in Windows Media Player in einem Fenster, dann startet Zivilisation in einem anderen, wenn Civ beginnt seine Phantasie Grafiken zu tun, es muss mit aller anderen Platz auf dem Bildschirm teilen (wie das Video.

Während, wenn die DirectX App hat über den gesamten Bildschirm, alles andere könnte „Aktualisierung“ oder „spielen“, aber nicht gezogen werden.

Grundsätzlich ist die Video-Hardware zur exklusiven Modus-Anwendung vollständig gewidmet ist.

Es gibt keine Konkurrenz für Video-Ressourcen (Pipeline, Texturspeicher, etc ...)

Insbesondere Textur-Upload kann ein großer Engpass sein. Je weniger Sie müssen es tun (weil man alles haben), desto besser.

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