Seite 1 von 1

QGLWidget::makeCurrent blockiert

Verfasst: 4. August 2008 16:29
von mollitz
Hi,

versuche mir grad eine kleine 3D-Umgebung mit OpenGL einzurichten, dazu verwende ich Threads um möglichst viele fps zu erreichen.

Im Renderthread( geerbt von QThread) hole ich mir in einer while Schleife immer den Rendercontext mit makeCurrent() um dort zeichnen zu können.

Jedoch blockiert die Funktion makeCurrent() beim Aufrufen so lange bis ich
a) die fenstergröße ändere
b) eine taste drücke während das fenster aktiv ist
c) die maus im fenster bewege

getestet hab ich das mit dem debugger: die while schleife geht bis zu dem makeCurrent() stoppt dann und geht erst weiter wenn a, b oder c eintrifft.

Hier die Schleife:

Code: Alles auswählen

while(render_flag)
	{
		gettimeofday(&startTime, 0);
		if( resize_flag )
		{
			resizeGL(viewport_size.width(),viewport_size.height());
			resize_flag = false;
		}
		paintGL();
	
		glWidget.swapBuffers();
		glWidget.doneCurrent();
		glWidget.mutex().unlock();
		glWidget.mutex().lock();
		glWidget.makeCurrent();
		gettimeofday(&endTime, 0);
		dif = (endTime.tv_sec - startTime.tv_sec) * 1000000 + (endTime.tv_usec - startTime.tv_usec);
		qDebug() << dif;
	}
falls ihr mehr code oder informationen braucht sagt es bitte,

danke moritz

Verfasst: 24. September 2008 16:58
von bbuerger
Hallo,

ich habe das gleiche Problem, allerdings bei einem etwas größeren Softwareprojekt. Ich habe festgestellt das nicht nur makeCurrent blockiert sondern auch doneCurrent. Es kann sein, dass für ein paar Sekunden gerendert wird doch, dann hängt das Programm wieder bis a,b oder c ausgeführt wurde.
Ist mittlerweile eine Lösung zu diesem Problem bekannt?

Grüße
Benny