Anfängerfrage: SDL fürs Menü und OpenGL fürs Spiel?



  • Hi alle, ich arbeite momentan an einem kleinen multiplayer space shooter in C, dazu verwende ich momentan SDL für die Eingaben und OpenGL fürs Grafische. Momentan starte ich meinen Spielclient mit dem Kommandozeilenargument, welches die Adresse meiner Serverapplikation angibt, mit welchem eine Verbindung hergestellt werden soll. Das klappt soweit ganz gut, ist aber nicht das Gelbe vom Ei.

    Daher wollt ich jetzt mal ein kleines Menü erstellen, welches für den Anfang etwa so aussehen soll:

    - Verbinden

    - Adresse: _ _ _ _ _

    - Optionen

    - Verlassen

    Verbinden, Optionen und Verlassen wären dann Buttons und Adresse wär dann eine Inputbox.
    Naja, die Buttons krieg ich hin, die Inputbox kann ich mir auch irgendwie basteln, aaber meine Frage ist, kann ich überhaupt in einen OpenGL Rendering Context SDL_surfaces zeichnen? In der SDL Doku steht nirgens, das ich SDL_HWSURFACE nicht mit SDL_OPENGL kombinieren darf (EDIT: muss ich das überhaupt?), doch was da bei SDL_DOUBLEBUF steht, hat mich dann doch etwas stutzig gemacht:

    Enable hardware double buffering; only valid with SDL_HWSURFACE. Calling SDL_Flip will flip the buffers and update the screen. All drawing will take place on the surface that is not displayed at the moment. If double buffering could not be enabled then SDL_Flip will just perform a SDL_UpdateRect on the entire screen.

    Naja, evtl. bin ich ja auch total auf dem falschen Dampfer (falls ja, wie wird sowas in der Regel denn gemacht?).

    Jemand mit Erfahrung mit SDL + OpenGL?

    Danke im Voraus.

    (EDIT: Entschuldigt die Frage, vermutlich würds nicht lange dauern ein kleines Testprogramm zu schreiben um das zu überprüfen, doch ich erhoffe mir den einen oder anderen nützlichen Hinweis von Leuten, die sowas schon einmal gemacht haben)



  • Hat sich soweit erledigt, hab einfach vor Spielbeginn einen HWSURFACE | DOUBLEBUF context erstellt, in welchem ich das Menu rendere, und danach geh ich in den OPENGL context.



  • Wieso renderst Du nicht komplett in OpenGL?
    Du kannst doch auch das Menü in OpenGL rendern?
    http://img27.imageshack.us/f/mener.jpg/
    Das sind vllt 60 Zeilen modularer Code inkl. Font...
    rya.



  • Danke für den Einwand =).

    Dabei müsste ich vermutlich meine Surfaces als Texturen auf einem Quad auf den Schirm rendern?



  • Entweder das oder du renderst wie ich hier, einfach den Font.
    Ich mach folgendes:
    Ich render dne Font mit FTGL und berechne eine BoundingBox. Die nehme ich dann als indikaor für "kollissionen" mit der Maus, sprich MouseOver-Effekte und klicks etc. Das war einfacher als ich dachte, bin da nämlich auch nicht grade nen profi :D.
    Die Font-Klasse findest Du hier:
    http://code.google.com/p/nightlighttv/source/browse/NightLight/trunk/NightLightDLL/NLFont.cpp

    Die Menü-Klassen:
    http://code.google.com/p/nightlighttv/source/browse/NightLight/trunk/NightLightDLL/NLMenuController.cpp
    http://code.google.com/p/nightlighttv/source/browse/NightLight/trunk/NightLightDLL/NLMenuItem.cpp

    Kannst ja mal anschauen wenn Du magt. Das ganze Projekt baut auf OpenGL, libsgic++, FTGL, boost und SDL auf. Es ist nicht der beste Code der Welt, aber es funktioniert und man kann einfach Spiele damit machen.
    rya.


Anmelden zum Antworten