[C++] wxWidgets und OpenGL im Fullscreen Modus

Hi Community!

Im Moment arbeite ich an einer Projektarbeit für die Schule. Dabie handelt es sich um ein 3D Spiel. Ich vermute aufgrund dieses Spieles werde ich das Forum in der nächsten Zeit noch öfters bombadieren. :)

Im Moment habe ich aber Hauotsächlich ein Problem: Da ich selbst ein Apple-Freak und begeisterter Mac-User bin und obendrein nur einen einzigen Windowsrechner (der nichtmal Internet hat) zur Verfügung habe liegt es natürlich auch der Hand das ich das Spiel Platformunabhängig schreibe. Ausserdem war ich eh nie ein Freund von DirectX und finde es äusserst blöd das es kaum Spiele für Mac bei Steam gibt.

Damit das alles so klappt benutze ich nur Platformunabhängige Bibilotheken (OpenGL, wxWidgets, OpenAL, Bullet-Physiks, Lua)
Nun ist es aber so das ich bis jetzt noch nie ein größeres Projekt mit wxWidetgs und OpenGL gemacht habe. wxWidgets kenne ich schon lange benutze ich aber relativ selten. OpenGL dagegen benutze ich fast ständig allerdings meistens mit der SDL (Die bei OS X leider keinen Fullscreen Modus besitzt :( )

Nun steht ich schon stundenlang vor dem Problem den Fullscreen Modus in wxWidgets zu aktivieren.
Die Doku ist (leider) aufschlussreich gewesen. Es ist zwar möglich mit
Code:
 frame->ShowFullScreen(true, wxFULLSCREEN_ALL);
in den Fullscreen Modus zu wechseln allerdings ist das ehr so ein... lala...
Zwar nimmt das Spiel den gesamten Bildschirm ein allerdings nimmt er die Bildschirmauflösung des Desktops. Überhaupt wechselt er nicht in den gewohnten Fullscreen Modus wie er auf Mac und Windows bekannt ist sonder öffnet nur ein Bildschirmfüllendes Fenster das ein paar nette Sondereigenschaften bekommt mit denen z.B. das Dock ausgeblendet wird. Gerade aber weil ich eine ehr Untypische auflösung (Im Vergleich zu dne Schulrechnern) habe wäre es mir lieber diese ingame ändern und testen zu können. Nebenbei ist ein richtiger Fullscreen Modus viel cooler ;) (Im Sinne: Wenn das Spiel schon eine sch**** Grafik hat kann es zumindest einen ordentlichen Fullscreen Modus besitzten)

Nun ist meine Frage ob der ein oder andere vielleicht ein platformunabhängiges (!) Workaround kennt mit dem man diesen kleinen Schönheitsfehler verbessern kann.

Wie gesagt das ist nur ein schönheitsfehler der moich nervt, hat also keine Priorität. :p

Grüße,
Nico
 
OpenGL dagegen benutze ich fast ständig allerdings meistens mit der SDL (Die bei OS X leider keinen Fullscreen Modus besitzt :( )
Wie kommst du denn darauf?

Ich frage nur weil sich in der SDL ChangeLog folgende Zeilen finden:
Mac OS X Notes

Transitions between fullscreen resolutions and windowed mode now use a much faster asynchronous fade to hide desktop flicker.

Fixed changing the cursor in fullscreen mode on Mac OS X.
Das läßt mich stark vermuten, das es doch einen Fullscreen Modus bei SDL für Mac OS X gibt.

Gruß
 
@deepthroat
Ja du hast recht :)
Der fullscreen Modus am Mac funktioniert sogar echt super und schön einfach allerdings nur solange man sich mit der Standart SDL ohne OpenGL zufrieden gibt. Zumindest unter OS X Lion funktioniert der Fullscreen Modus der SDL im zusammenhang mit OpenGL nicht, was natürlich die grundlage eines 3D Spieles ist. Zumindest eins in dem ausmaßen wie wir es vorhaben :p

Ich habe auch schon einen ganzen Tag damit verbracht eine Lösung fürdas Problem zu finden und ich bin auhc eindeutig nicht der einzige. (Erstmal funktioniert es an meinen beiden Macs nicht und ausserdme gibt es einige Themen auf Stack Overflow dazu)

Aber trotzdem danke!
 
Hm...
echt ist hier denke ich eine relatives Wort. Für mich ist es jedenfalls ein echter Fullscreen wenn die Anwendung den gesammten Bildschirm einnimmt, dabei die Anwendung eine eigene Bildschirmauflösung wählen und keine andere Anwendung sich davor schieben kann. Ausserdem ist es gerade unter Mac OS X nicht mehr so einfach möglich die ANwendung weg zu bekommen ohne sie gleich zu beenden. Ausserdem sollte es auch nicht möglich sein während die Anwendung im Vordergrund ist den Bildschirm zu wechseln. Dazu muss man wissen das OS X es ermöglicht mehrere, virtuelle, Bildschirme zu definieren. Ein Feature was mit unter Windows sehr fehlt. Und alle diese Eigenschaften hat die SDL auf OS X im Fullscreen Modus (der ja leider nur mit 2D klar kommt :( ). Bie wxWidgets allerdings ist das Fenster nur genaus groß wie der Bildschirm (und hat auch die gleiche Auflösung) nur eben mit dem Vorteil das man es nicht ausversehn verschieben kann und sich die Statusleiste sowei das Dock ausblenden.

Grüße
 
Ok, scheinbar weis leider keiner was. :(
Aber ich hab jetzt mit diesem "Zwischenmodus" eh rechtz viel gemacht weswegen ich denke das ich mich damit zu frieden geben kann :)

Trotzdem danke für eure Hilfe!
 
Wie sieht denn so die Rechnerlandschaft in eurem Team aus?

Nur so aus Neugier, weil du mit Plattformunabhängigkeit angefangen hast. Grundsätzlich kannst du sowas natürlich plattformunabhängig machen, soweit es den reinen OpenGL-Code betrifft. Alles weitere wird erfahrungsgemäß ein bisschen ekelhaft. Im Grunde läuft das doch dann auf jede Menge #ifdef hinaus, oder nicht?

Aber zum Thema... wieso baust du dir nicht einfach schnell ein natives Fenster? Hab die Erfahrung gemacht, dass man damit schneller oder in der selben Zeit dahin kommt, wohin man will, wenn man sich einfach selber ein Fenster baut und nicht auf irgendwelche OpenGL Windowing Systeme zurück greift. Wie das unter MacOS ist, weiß ich nicht mehr genau, weil mein Mac vor 3 Monaten gestorben ist und sich Apple weigert, ihn zu reparieren. Bin dann wieder zurück zu Windows. Wenn du aber ein Windows (7) - Fenster haben möchtest, ich hatte heut auch mehr oder minder ein Problem damit, das jetzt gelöst ist. Und großzügig wie ich bin, würd ich dir das Fenster zukommen lassen, wenn du möchtest.
 
DIe Rechnerlandschaft. Naja.... mehr oder wenig einseitig :)
Zwei Macs (Mac Book, iMac beide mit 10.7 Lion). Ansonsten habe ich noch einen Windows 7 rechner und nen Ubuntu Laptop wobei aus Zeitlichen gründen Linux wohl nicht unterstüzt wird. Allerdings glaube ich das einer im Team noch einen Laptop mit XP haben müsste. Und auf Win XP sollte es schon noch laufen.

Ich weis jetzt leider nicht wirklich was du mit OpenGL Windowsing System meinst :) OpenGL hat nähmlich eigentlich garkeine Fensterklassen bzw. möglichkeiten ein Fenster zu erstellen. Oder meinst du GLUT?

Das mit den #ifdefs ist schon richtig. Allerdings weniger in meinem Code als in dem von wxWidgets. wxWidgets regelt die abhängigkeiten nähmlich selbst, vorrausgesetzt ich habe ne runtime bzw. static lib für jedes System :D

Die meisten #ifdef sind ehr für den Debug Modus, da ich es recht unschön finde, wenn im Release unbenutzter Wartungscode liegt. (Der Womöglich sogar noch Rechenzeit zieht)

Ansonsten bin ich jetzt doch relativ zufrieden mit wxWidets. Ist zwar nicht das Sahnehäufchen aber in ordnung für unsere Zwecke.

Trotzdem danke!
 

Neue Beiträge

Zurück