Hi,
ich habe hier eine Anwendung, welche von OpenGL Gebrauch macht (da wxWidgets als Basis verwendet wird, ist es kein reines OpenGL, aber das Prinzip bleibt das gleiche). Der Code sieht dabei im Prinzip folgendermaßen aus:
- wenn ein solcher OpenGL-View erzeugt wird, so passiert das alles in eigenen Objekten, sprich es ist alles gekapselt und zumindest meine Applikation verwendet keine globalen Variablen
- während der Erzeugung werden alle Strukturen neu angelegt, Shaders mit glCreateShader() erzeugt, Shader-Programme mit glCreateProgram() neu angelegt etc.
- wenn ein solcher OpenGL-View wieder gelöscht wird, so werden im Destruktor alle Ressourcen wieder freigegeben, also z.B. Shaders mit glDeleteShader() gelöscht
Das funktioniert so weit hervorragend, so lange nur ein OpenGL-View verwendet wird.
Wenn ich aber
- einen OpenGL-View erzeuge
- einen zweiten OpenGL-View mit komplett eigenen Objekten und in einem eigenen Fenster erzeuge
- den zweiten View wieder lösche
...dann funktioniert der Erste nicht mehr richtig. Sprich es wird noch alles angezeigt, aber die Anzeige ist statisch. Ursache ist, dass keines der Shaderprogramme in den bestehenden Elementen mehr gefunden wird und z.B. ein Aufruf
transformLoc = glGetUniformLocation(element->shaderProgram,"inputTransform");
immer nur 0 zurückliefert. Heißt, das Shaderprogramm ist nicht mehr vorhanden/"inputTransform" kann nicht mehr gefunden werden.
Das lässt mich jetzt vermuten, dass die Deinitialisierung des zweiten OpenGL-Views irgendwas gelöscht hat, was vom ersten View noch benötigt werden würde. Deswegen meine Frage: ist in OpenGL irgendwas zu beachten, wenn mehrere Views verwendet werden sollen? Oder gibt es irgend eine globale Initialiasierung, die das Verhalten erklären würde (und die ich aktuell nicht sehen kann, weil sie irgendwo in wxWidgets gekapselt ist)?
Bin für jeden Hinweis dankbar :-)