Mehrer GL-Windows in Qt Anwendung

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Jonathan
Establishment
Beiträge: 2398
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Mehrer GL-Windows in Qt Anwendung

Beitrag von Jonathan »

Ich möchte in meinem Leveleditor ein Hauptfenster haben und eine Minimap.
Jetzt ist natürlich die Frage, welcher OpenGL Befehl gilt für welches Fenster? Ich hab ein bisschen gelesen, und ich denke, es funktioniert in etwa so: Jedes Fenster hat einen eigenen OpenGL Context, und mit QGLWidget::makeCurrent() beziehen sich alle folgenden Befehle auf diesen Context.
Das funktioniert ja schonmal aber: Wie krieg ich es hin, die Modelle und Texturen in beiden Contexten nutzen zu können? So wie es aussieht, kann man alle Ressourcen nur in dem Context benutzen, in dem sie erstellt wurden.
Jetzt wäre es aber dämlich, alles 2 mal zu laden, nur um das ganze für die MiniMap nochmal von oben rendern zu können.
Gibt es irgendeine simple Lösung dafür? Ich hab auch gelesen, mehrere Contexte seien schlecht für die Performance, vermutlich weil ja alle States bei jedem Contextwechsel umgeschaltet werden müssen. Allerdings dürfte das ja für den Editor mehr oder weniger egal sein, der braucht ja keine 50fps, sondern rendert nur, wenn sich was ändert. Aber muss ich sosnt noch was bei mehreren Contexten beachten?
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Mehrer GL-Windows in Qt Anwendung

Beitrag von dot »

Du kannst die GL Kontexte ihre namespaces sharen lassen. Ich kenn mich zwar mit Qt nicht aus, aber laut Doku hat das GL Widget im Konstruktor offenbar einen Parameter der es erlaubt den Kontext mit einem anderen Widget zu sharen. Ich würde mal meinen das ist ein heißer Tip, übergib einfach das erste Widget als shareWidget an die Konstruktoren der anderen Widgets ;)
Benutzeravatar
Jonathan
Establishment
Beiträge: 2398
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Mehrer GL-Windows in Qt Anwendung

Beitrag von Jonathan »

Hm, das Problem ist, die Gui ist im Designer erstellt und benutzt dort das promote-Feature benutze. Und jetzt werden ja alle Widgets durch generierten Code erstellt, also ist es nicht so leicht möglich, das zu sharende Widget anzugeben.
Ich schätze ich muss beim zweiten Fenster das erste angeben, das zweite auch beim ersten anzugeben geht ja schlecht, weil es da ja noch nicht existiert, ja?; Allerdings macht der Designer ja auch keine expliziten angaben darüber, was in welcher Reihenfolge erstellt wird und sich auf irgendwas willkürliches zu verlassen ist immer so ein dummes Gefühl...
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
BeRsErKeR
Establishment
Beiträge: 689
Registriert: 27.04.2002, 22:01

Re: Mehrer GL-Windows in Qt Anwendung

Beitrag von BeRsErKeR »

Der Designer erzeugt doch nur Code und den kannst du doch nach Belieben anpassen und ändern. Leite dir doch einfach eine Klasse vom GLWidget ab, die im Konstruktor das SharedWindow entsprechend setzt und ersetze das GLWidget von den generierten Klassen durch die neue Klasse. Das sollte den Designer nicht stören, sprich du kannst mit dem Designer weiterhin arbeiten und erhälst das gewünschte Ergebnis. Das ging bei mir auch immer.
Ohne Input kein Output.
Antworten