Seite 1 von 1

[DX9] Windowed zu Fullscreen und wieder zurück

Verfasst: 14.09.2009, 20:39
von Andi
Hallöchen

Irgendwie finde ich keine Infos zum "Problem". Ich möchte zur Laufzeit, dass das Fenster in den Vollbildmodus wechseln kann und wieder zurück. Was genau muss ich machen, habe überhaupt kein Plan.
Kann mir bitte jemand ein Beispiel posten/zeigen?

Re: [DX9] Windowed zu Fullscreen und wieder zurück

Verfasst: 14.09.2009, 22:18
von Zudomon
Soweit ich das von DX9 kenne musst du das Device freigeben und neu erstellen. Bei den Device-Parametern kannst du ja "Windowed" auf true und false setzen.
Ein besserer Weg ist mir nicht bekannt. Hat natürlich zur Folge, das man alles neu erstellen muss.
Ich benutze in meinem Editor übrigens kein Fullscreen Modus.... mein Monitor braucht eh so ewig um da zu wechseln.... dadurch ist das dann sofort umgeschaltet und ich habe auch keine Probleme mit [alt]+[tab]. Im dem vorgetäuschten Fullscreen ist die Darstellungsfläche einfach Bildschirmfüllend.

Vielleicht gibt es noch was besseres. Würde mich auch sehr interessieren.

Re: [DX9] Windowed zu Fullscreen und wieder zurück

Verfasst: 15.09.2009, 14:51
von Schrompf
Schau mal in das Framework, was die DX9-Beispiele aus dem DX-SDK benutzen. Soweit ich weiß, schalten die da mit Hilfe der WinAPI ein Fenster zwischen Vollbild und Fenstermodus um. Das D3DDevice und alle Resourcen musst Du dann halt neu erzeugen, so wie das auch bei Alt+Tab teilweise schon nötig ist.

Re: [DX9] Windowed zu Fullscreen und wieder zurück

Verfasst: 15.09.2009, 16:30
von kkrahl
Zudomon hat geschrieben:Im dem vorgetäuschten Fullscreen ist die Darstellungsfläche einfach Bildschirmfüllend.
Machts du da einfach nur ResizeTarget oder auch ein ResizeBuffer?

Ich frage weil bei einer Desktop-Größe von 1920x1080 ein Fester von 1024x768 das mit Hilfe von ResizeTarget gescalet wird nicht wirklich gut aussieht. Wenn ich aber mit ResizeBuffer wirklich den Renderbereich vergrößtere habe ich zwar das bei weitem schönere Bild muss nun aber 1920x1080 Pixel rendern. Der Vorteil liegt hier im Full-Screen Modus, das ich auch nur 1024x768 Pixel rendern muss und das Bild sieht dazu noch "schön" aus.

Karl

Re: [DX9] Windowed zu Fullscreen und wieder zurück

Verfasst: 15.09.2009, 19:08
von Zudomon
Ich brauche ja bei dem Editor sowieso mehrere Ansichten... vor kurzem war hier ein Thread, da hatte ich wegen den Swapchains gefragt. Die habe ich nun rausgeschmissen und benutze nur noch einen Backbuffer, der die größe des Bildschirms hat. Wenn man dann kleinere Fenster rendern möchte, reicht es, wenn man den Viewport auf die Fenstergröße stellt, so entstehen dann auch keine Skalierungsartefakte.

Es hindert dich auch niemand daran die Desktopauflösung umzustellen.

Edit:
Der Vorteil beim Fullscreen-Rendering ist, dass Windows selbst nicht mehr gerendert wird, also Taskleiste usw.
Wie viel Geschwindigkeit das ausmacht, weiß ich nicht.

Re: [DX9] Windowed zu Fullscreen und wieder zurück

Verfasst: 15.09.2009, 21:32
von Andi
Danke schon mal.

In den Beispielen der DX-SDK zu schauen, da hätte ich selbst drauf kommen können *indieeckeschähm* :oops:
Ich dachte eigentlich, dass es eine passende Funktion defür geben muss. Hat zwar mit der eigentlichen Frage nichts zu tun: aber wie macht man es, wenn man zur Laufzeit die Fensterauflösung ändern will?
Zudomon hat geschrieben:...Die habe ich nun rausgeschmissen und benutze nur noch einen Backbuffer, der die größe des Bildschirms hat. Wenn man dann kleinere Fenster rendern möchte, reicht es, wenn man den Viewport auf die Fenstergröße stellt, so entstehen dann auch keine Skalierungsartefakte. ...
Das Verstehe ich nicht ganz. Dein Backbuffer ist grösser als das Fenster, das hätte doch zur Folge, dass der Inahlt auf den Fensterinhalt skaliert wird?

Also bei meiner aktuellen noch sehr kleiner Applikation macht der Fullscreen ca. 200FPS mehr. Wie das dan mit der Zeit aussieht wenn mehr passiert, wäre eigentlich auch noch interessant.

Melde mich wieder am Weekend bei miss-/erfolg ;)

Re: [DX9] Windowed zu Fullscreen und wieder zurück

Verfasst: 15.09.2009, 21:48
von Zudomon
Genau, hast du richtig verstanden. Im normalfall würde es dann runterskaliert. Aber von dem 1920x1200 Backbuffer beschreibe ich z.B. nur 640x480. Wobei dann 640x480 die Fenstergröße darstellt. Beim present kann man angeben, ob nur ein bestimmter Ausschnitt des Backbuffers angezeigt wird. Auch hierbei gebe ich genau diese Auflösung an, so dass eigentlich auch nichts skaliert werden sollte.

Normalerweise musst du beim Skalieren entweder das Device mit der neuen Backbuffergröße angeben oder mit Swapchains arbeiten, wobei dann das alte Swapchain zerstört und ein neues mit der neuen Größe erzeugt wird.

Könnte sein, dass es noch bessere Möglichkeiten gibt, ich habe mich damit nicht so wirklich intensiv beschäftigt... ansonsten hoffe ich, dass das etwas weiter hilft.

Re: [DX9] Windowed zu Fullscreen und wieder zurück

Verfasst: 16.09.2009, 17:57
von Krishty
Zudomon hat geschrieben:Es hindert dich auch niemand daran die Desktopauflösung umzustellen.
Geht das denn, ohne die Desktop-Symbole durcheinander zu werfen?

Re: [DX9] Windowed zu Fullscreen und wieder zurück

Verfasst: 16.09.2009, 20:38
von Zudomon
Krishty hat geschrieben:
Zudomon hat geschrieben:Zudomon hat geschrieben:
Es hindert dich auch niemand daran die Desktopauflösung umzustellen.
Geht das denn, ohne die Desktop-Symbole durcheinander zu werfen?
Ne... ich glaube nicht. Also ich kenne das nur mit so nem API Aufruf, ist aber schon lange her. Könnte das aber bei Interesse nochmal raussuchen.

Re: [DX9] Windowed zu Fullscreen und wieder zurück

Verfasst: 16.09.2009, 22:06
von Krishty
Zudomon hat geschrieben:
Krishty hat geschrieben:Geht das denn, ohne die Desktop-Symbole durcheinander zu werfen?
Ne... ich glaube nicht. Also ich kenne das nur mit so nem API Aufruf, ist aber schon lange her. Könnte das aber bei Interesse nochmal raussuchen.
Würde mich echt interessieren … denn falls jemals ein Programm von jemandem aus diesem Forum so eine Schweinerei mit meinem Desktop anstellen sollte, werde ich durch diesen Bildschirm über ZFX durch den Bildschirm des entsprechenden Programmierers greifen und ihn würgen ;)

Re: [DX9] Windowed zu Fullscreen und wieder zurück

Verfasst: 16.09.2009, 23:03
von Zudomon
So sehe ich das auch!
Es ist die Pflicht eines jeden Programmierers hier, bevor die Auflösung umgestellt wird, rauszufinden, welche Icons auf dem Dekstop und wo diese angeordnet sind! :D

Aber ist echt verwunderlich das Windows nicht selbstständig die Positionen der Icons in den verschiedenen Auflösung einfach speichert.

Re: [DX9] Windowed zu Fullscreen und wieder zurück

Verfasst: 17.09.2009, 08:25
von Schrompf
Du bist da völlig auf dem falschen Pferd. Wenn irgendein Programm meine Desktop-Auflösung ändert, gibt's paar auf die Mütze. Oder kämst Du auch auf den Gedanken, den Systemfont ein Stück größer zu stellen, weil Du das in Deinem Programm so brauchst? :-)

Re: [DX9] Windowed zu Fullscreen und wieder zurück

Verfasst: 18.09.2009, 02:06
von Zudomon
@Schrompf
Auf wen beziehst du dich eigentlich? Da Krishty und ich es ja genauso sehen wie du, ist mir jetzt nicht wirklich klar, wen du meinst.

Re: [DX9] Windowed zu Fullscreen und wieder zurück

Verfasst: 18.09.2009, 08:25
von Schrompf
Du schriebst, dass Du von Windows erwartet hättest, dass es sich die Icon-Positionen in verschiedenen Auflösungen merkt. Das ist aber nur nötig, wenn tatsächlich jemand die Auflösung des Desktops ändern will. Daher ging ich davon aus, dass Du tatsächlich vor hast, die Desktop-Auflösung des Nutzers zu ändern. Und das gäbe zornige Mails.

Re: [DX9] Windowed zu Fullscreen und wieder zurück

Verfasst: 18.09.2009, 12:21
von Krishty
Zu Schrompfs Verteidigung: Ich wusste auch nicht sicher, wie ich das verstehen sollte :)

Re: [DX9] Windowed zu Fullscreen und wieder zurück

Verfasst: 18.09.2009, 12:29
von Zudomon
Also mich nervt das auch, wenn die Auflösung umgestellt wird, und meine Icons dann sonstwo landen.

Ich bezweifle allerdings, dass das hier von jeder Demo, die auf ZFX gepostet wird, beachtet wird und rechne auch damit.

Wie ist das denn nun überhaupt mit Windows? Man kann doch garnicht vermeiden, wenn die Auflösung gewechselt wird, dass dann die Symbole nicht verschoben werden, oder doch?

Re: [DX9] Windowed zu Fullscreen und wieder zurück

Verfasst: 18.09.2009, 12:41
von Krishty
Afaik nicht. Für Windows ist die Bildschirmauflösung kein temporärer Zustand, der nur für die Laufzeit eines Programms anhält, sondern ein permanenter – und damit gibt es auch keinen Bedarf, die Positionen zu speichern oder solche Aktionen sonstwie zu vereinfachen.

Re: [DX9] Windowed zu Fullscreen und wieder zurück

Verfasst: 19.09.2009, 17:20
von Andi
Also vom Fenster in den Vollbild zu wechseln funtioniert soweit, nur ist der Inhalt weg und der switch zurück zum Fenstermodus funktioniert auch nicht...
Also ich mache folgendes:

Code: Alles auswählen

bool fullscreen;

....

d3dpp.Windwed = !fullscreen;
SetWindowLongPtr(hwnd, GWL_STYLE, WS_POPUP);
SetWindowPos(hwnd, HWND_TOP, width, height, SWP_mozrender | SWP_SHOWWINDOW);

d3dfont->OnLostDevice();
d3ddevice->Reset(&d3dpp);
d3dfont->OnResetDevice();

...
Der Back Buffer hat einfachheits halber immer die grösse des Fenster (800x600)

Habe ich irgend was vergessen, muss man noch was ändern?
Kann mir bitte jemand nochmals Helfen..