SDL in GUI einbetten

Simple Directmedia Layer: Portable Spieleprogrammierung
Antworten
nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

SDL in GUI einbetten

Beitrag von nufan » Di Jul 21, 2009 9:40 pm

Hallo :)

Also gleich zum Problem:
Ich würde gerne um ein SDL-Fenster herum ein GUI aufbauen. Mit Menüleiste, Checkboxen, Tabellen, etc. Ich hab das mal teilweise selbst mit Rechtecken gemacht, aber das ist ziemlich aufwendig (die Koordinaten müssen immer angepasst werden) und nebenbei nicht besonders hübsch.
Es gibt da den oft erwähnten WindowID-Hack. Dabei wird ein SDL-Fenster (ohne Rahmen) und ein Fenster mit einer anderen API (z.B. GTK+, Qt) erstellt und danach eine SDL-Umgebungsvariable an die Fenster-ID des anderen Fensters angepasst. Das funktioniert aber angeblich nicht immer (habs nur einmal mit GTK+ ausprobiert und da gings).
Hier gibt es auch einen etwas anderen Ansatz bei dem wxWidgets verwendet wird. Den Code finde ich aber etwas verwirrend...

Kennt jemand eine (möglichst einfache) API bei der ich ein SDL-Fenster unbeeinflusst einbetten kann? Falls das nicht geht mach ich eben einen zweiten Thread. Aber das Einbetten wäre schon mal gut ^^
Schön wäre noch Unicode-Ausgabe beim GUI.
Eignet sich SDL dafür schlicht und einfach nicht? Wäre da die Kombination GTK+/Cairo (kein Unicode?!) besser? Oder gleich Qt (was mir aus Programmierer-Sicht besser gefällt)?

Ich bitte um Rat :)

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: SDL in GUI einbetten

Beitrag von Kerli » Mi Jul 22, 2009 1:08 pm

nufan hat geschrieben:Kennt jemand eine (möglichst einfache) API bei der ich ein SDL-Fenster unbeeinflusst einbetten kann?
Ich glaube da gibt es aktuell eigentlich eh nur zwei Bibliotheken die in Frage kommen, zumindest wenn du plattform unabhängig bleiben möchtest. Das sind eben wxWidgets und QT. Die Frage ist nur was brauchst du denn so spezielles von der SDL das du das dann nicht gleich mit der GUI Bibliothek machen kannst. Schließlich kannst du sowohl bei wxWidgets als auch bei QT recht einfach ein OpenGL Kontext erzeugen und dort hineinrendern.
nufan hat geschrieben:Hier gibt es auch einen etwas anderen Ansatz bei dem wxWidgets verwendet wird. Den Code finde ich aber etwas verwirrend...
Der Code schaut doch gar nicht so schlecht aus. Er ist eben im objektorientierten wxWidgets Stil...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: SDL in GUI einbetten

Beitrag von nufan » Mi Jul 22, 2009 6:42 pm

Kerli hat geschrieben:Die Frage ist nur was brauchst du denn so spezielles von der SDL das du das dann nicht gleich mit der GUI Bibliothek machen kannst. Schließlich kannst du sowohl bei wxWidgets als auch bei QT recht einfach ein OpenGL Kontext erzeugen und dort hineinrendern.
Da würde ich Qt bevorzugen, weil es erstens mehr als "nur" ein GUI und außerdem aus meiner Sicht deutlich leichter als andere Bibliotheken ist (GTK+, wxWidgets).
Ich brauche einfach ein Fenster, in dem ich einfache Grafiken (Rechtecke, etc.) und Bilder ausgeben kann. Dann noch eine Menüleiste und eventuell eine Sidebar. Zusätzlich noch eine Eventabfrage für das Grafikfenster. Kann ich das trotzdem mit SDL machen (da ich es ja ohnehin für die OpenGL-Initialisierung brauche) oder nur über GUI-Callbacks/Slots?

Ich hab zwar noch nie mit OpenGL gearbeitet, aber ich kenn da so eine Seite ;)
Mit Qt hab ich schon ein paar kleine Fenster gemacht.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: SDL in GUI einbetten

Beitrag von Kerli » Do Jul 23, 2009 11:11 am

nufan hat geschrieben:Da würde ich Qt bevorzugen, weil es erstens mehr als "nur" ein GUI und außerdem aus meiner Sicht deutlich leichter als andere Bibliotheken ist (GTK+, wxWidgets).
wxWidgets hat ja auch durchaus deutlich mehr als eine GUI. Was mir an wxWidgets gut gefällt ist das es die nativen GTK Bibliotheken verwendet und nicht so wie Qt noch einen Extra "Vorkompiler" braucht. Wie leicht/schwer es ist mit Qt zu programmieren ist kann ich nicht sagen, da ich es noch nie versucht habe :)
nufan hat geschrieben:Zusätzlich noch eine Eventabfrage für das Grafikfenster. Kann ich das trotzdem mit SDL machen (da ich es ja ohnehin für die OpenGL-Initialisierung brauche) oder nur über GUI-Callbacks/Slots?
Eigentlich sollte die SDL die Nachrichten auch erhalten. Dh. du könntest ja in den OnIdle Events die SDL-Nachrichten pollen. Aber garantieren kann ich es dir nicht. Am Besten du probierst es aus ;)
nufan hat geschrieben:Ich hab zwar noch nie mit OpenGL gearbeitet, aber ich kenn da so eine Seite ;)
Ich auch :P
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: SDL in GUI einbetten

Beitrag von nufan » Do Jul 23, 2009 6:51 pm

Kerli hat geschrieben:Eigentlich sollte die SDL die Nachrichten auch erhalten. Dh. du könntest ja in den OnIdle Events die SDL-Nachrichten pollen. Aber garantieren kann ich es dir nicht. Am Besten du probierst es aus ;)
Werde ich :)
Wäre es nicht einfacher eine SDL-Eventschleife in einem eigenen Thread laufen zu lassen?
Dann werde ich mich mal ein wenig mit Qt und dann mit OpenGL (zumindest dem 2D-Bereich) beschäftigen. Und dann sollte ich das noch irgendwie kombinieren ;)
Gut, dass ich kein Zeitlimit hab ^^
Kerli hat geschrieben:Ich auch :P
NeHe sieht mir auch sehr ausführlich aus und ich hab auch noch eine Seite mir Videotutorials gefunden:
http://videotutorialsrock.com/

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: SDL in GUI einbetten

Beitrag von Kerli » Do Jul 23, 2009 10:51 pm

nufan hat geschrieben: Wäre es nicht einfacher eine SDL-Eventschleife in einem eigenen Thread laufen zu lassen?
Wäre natürlich auch eine gute Möglichkeit. Dann kannst du pollEvent verwenden und schlafst einfach solange keine Nachricht kommt. Die musst halt nur probieren ob sich das auch mit Qt vertragt...
nufan hat geschrieben:Dann werde ich mich mal ein wenig mit Qt und dann mit OpenGL (zumindest dem 2D-Bereich) beschäftigen. Und dann sollte ich das noch irgendwie kombinieren ;)
Das wird schon gehen. Du musst nur immer schön motiviert bleiben ;)
nufan hat geschrieben:und ich hab auch noch eine Seite mir Videotutorials gefunden:
http://videotutorialsrock.com/
Ah cool die hab ich ja noch gar nicht gekannt., Auf den ersten Blick schaut die ja einmal ganz gut aus. Es gibt aber Gott sei Dank auch eine Textversion. Videotutorials sind dann irgendwie doch nicht so meins :)

Und dieses Tutorial ist doch das beste. Dieser blau-rote Boden erinnert mich irgendwie an meine ersten Versuche mit DirectX :P
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: SDL in GUI einbetten

Beitrag von nufan » Do Jul 23, 2009 11:10 pm

Kerli hat geschrieben:Wäre natürlich auch eine gute Möglichkeit. Dann kannst du pollEvent verwenden und schlafst einfach solange keine Nachricht kommt. Die musst halt nur probieren ob sich das auch mit Qt vertragt...
Das ist wohl eines der Hauptprobleme. Irgendwie werde ich das schon hinbekommen ;)
Kerli hat geschrieben:Das wird schon gehen. Du musst nur immer schön motiviert bleiben ;)
Keine Angst, an Motivation fehlt es mir nicht :)
Kerli hat geschrieben:Ah cool die hab ich ja noch gar nicht gekannt., Auf den ersten Blick schaut die ja einmal ganz gut aus. Es gibt aber Gott sei Dank auch eine Textversion. Videotutorials sind dann irgendwie doch nicht so meins :)
Hab ich vor ewigen Zeiten mal gebookmarked als ich zu faul zum Lesen war und heute wieder rausgekramt ^^

Gut - Thema erledigt. Besten Dank, jetzt liegts an mir ;)

Antworten