[Qt-interest] custom OpenGL widget update blocks other Qt GUI rendering

Artem Kharitonyuk artemalive at gmail.com
Mon Feb 21 20:14:39 CET 2011


Konstantin Tokarev <annulen <at> yandex.ru> writes:

> 
> 
> 21.02.2011, 14:35, "Artem Kharitonyuk" <artemalive <at> gmail.com>:
> > Have the same problem.
> > We implement gui for our raytracer with QT and we have preview window that
> > renders using OpenGL (QGLWidget). Rendering is updated by the timer. For 
simple
> > scenes everything is OK, but for really complex ones (> 10M triangles), when 
one
> > frame takes > 100ms to render, we have a problem - open file dialog simply
> > failed to draw itself - only some parts of it are appeared and than entire 
app
> > stops responding.
> 
> You need to do OpenGL rendering in a separate thread
> 

Thanks, Konstantin!

I've found another solution (In fact, I'm not sure that rendering should be done 
in separate thread, OpenGL functions are async, so it's not a problem).

I simply added to the end of the function that is called by the timer and 
invokes "updateGL" method the following line: qApp->processEvents();

void PreviewWindow::OnTimerEvent()
{
  ... some other stuff

  updateGL();

  // Prevents GUI thread from stalling when frame rate is low.
  qApp->processEvents();
}






More information about the Qt-interest-old mailing list