OpenGL bindTexture Problem

Alles rund um die Programmierung mit Qt
Antworten
tomf
Beiträge: 12
Registriert: 24. Oktober 2007 19:07

OpenGL bindTexture Problem

Beitrag von tomf »

Habe das Problem, dass bindTexture bzw. glTexImage2D bei großen Texturen etwas länger dauern und somit meinen Maus/Tastaturinput in dieser Zeit blockieren.

Da es sich um ein Bildbetrachtungsprogramm handelt werden die Texturen natürlich immer dynamisch geladen (je nachdem in welchen Ordner man sich befindet) und können nicht zu Beginn geladen werden.

Ich habe zwar das Laden der Bilder schon in einen seperaten Thread ausgelagert, allerdings kann ich eben diesen bindTexture Befehl nicht weiter auslagern. Gibt es jetzt irgendeine Möglichkeit Texturen komplett, also inkl. des bindTexture Befehls in einen seperaten Thread zu verfrachten? Habe schon einiges probiert - dachte zuerst ich erstelle einfach ein zweites QGLWidget und share dieses mit meinem Hauptwidget. In meinen Threads in denen die Bilder geladen werden benutze ich einfach das zweite Widget -> mit dem Ergebniss, dass ich immer folgende Meldung bekomme: "QGLContext::makeCurrent() : wglMakeCurrent failed". Was ich allerdings nicht ganz verstehe, denn es sind ja eigentlich zwei seperate Rendering Contexte - oder nicht?
tomf
Beiträge: 12
Registriert: 24. Oktober 2007 19:07

Beitrag von tomf »

Hab ein kleines Beispiel gebaut um das ganze zu veranschaulichen. Das Beispiel baut auf dem "Textures" Beispiel aus der QT Doku auf (http://doc.trolltech.com/4.1/opengl-textures.html).

Im Prinzip wurde nur eine neue Klasse (ImageLoader) hinzugefügt die von QThread ableitet und eben ein Bild laded. Im MainWindow wurde ein zweiter Timer hinzugefügt der alle 3 Sekunden ein neues Bild mittels der ImageLoader Klasse ladet.

http://old.teichpiraten.at/files/textures.zip

Im zip befindet sich eine Visual Studio Solution, sollte aber auch unter Linux ohne Probleme laufen wenn vom Textures Beispiel das Makefile abgeändert wird (muss nur die ImageLoader Klasse eingebaut werden).

Arbeite jetzt schon seit 2-3 Wochen an diesem verflixten Problem und komme einfach nicht weiter. Habe schon alles mögliche durchprobiert. Wäre wirklich sehr sehr dankbar wenn sich das Beispiel jemand anschauen könnte - vielleicht hat ja dann jemand eine Idee dazu.
thinkabit
Beiträge: 1
Registriert: 23. April 2011 22:34

lösung?

Beitrag von thinkabit »

hi, ist schon eine geraume weile hier deine frage ...

hast du mittlerweile eine lösung gefunden? ich nage nämlich die letzten tage an einem ähnlichen problem und komme nihct weiter und wäre um hilfe sehr froh.

danke,

oliver
Antworten