[DX9] Windowed zu Fullscreen und wieder zurück

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Andi
Beiträge: 81
Registriert: 12.03.2009, 00:19

[DX9] Windowed zu Fullscreen und wieder zurück

Beitrag 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?
Benutzeravatar
Zudomon
Establishment
Beiträge: 2259
Registriert: 25.03.2009, 07:20
Kontaktdaten:

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

Beitrag 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.
Benutzeravatar
Schrompf
Moderator
Beiträge: 5047
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

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

Beitrag 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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
kkrahl
Beiträge: 56
Registriert: 20.10.2008, 13:41

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

Beitrag 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
Benutzeravatar
Zudomon
Establishment
Beiträge: 2259
Registriert: 25.03.2009, 07:20
Kontaktdaten:

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

Beitrag 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.
Benutzeravatar
Andi
Beiträge: 81
Registriert: 12.03.2009, 00:19

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

Beitrag 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 ;)
Benutzeravatar
Zudomon
Establishment
Beiträge: 2259
Registriert: 25.03.2009, 07:20
Kontaktdaten:

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

Beitrag 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.
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

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

Beitrag 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?
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Zudomon
Establishment
Beiträge: 2259
Registriert: 25.03.2009, 07:20
Kontaktdaten:

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

Beitrag 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.
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

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

Beitrag 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 ;)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Zudomon
Establishment
Beiträge: 2259
Registriert: 25.03.2009, 07:20
Kontaktdaten:

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

Beitrag 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.
Benutzeravatar
Schrompf
Moderator
Beiträge: 5047
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

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

Beitrag 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? :-)
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Zudomon
Establishment
Beiträge: 2259
Registriert: 25.03.2009, 07:20
Kontaktdaten:

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

Beitrag 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.
Benutzeravatar
Schrompf
Moderator
Beiträge: 5047
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

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

Beitrag 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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

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

Beitrag von Krishty »

Zu Schrompfs Verteidigung: Ich wusste auch nicht sicher, wie ich das verstehen sollte :)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Zudomon
Establishment
Beiträge: 2259
Registriert: 25.03.2009, 07:20
Kontaktdaten:

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

Beitrag 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?
Benutzeravatar
Krishty
Establishment
Beiträge: 8316
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

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

Beitrag 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.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Andi
Beiträge: 81
Registriert: 12.03.2009, 00:19

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

Beitrag 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..
Antworten