QGLWidget::makeCurrent blockiert

Alles rund um die Programmierung mit Qt
Antworten
mollitz
Beiträge: 81
Registriert: 5. April 2007 10:55

QGLWidget::makeCurrent blockiert

Beitrag 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
bbuerger
Beiträge: 1
Registriert: 24. September 2008 16:47

Beitrag 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
Antworten