Re: [GtkGLExt] Multithreading vs glXMakeCurrent()
- From: Jason Newton <nevion gmail com>
- To: Norbert Schultz <norbert schultz insa-lyon fr>
- Cc: gtkglext-list gnome org
- Subject: Re: [GtkGLExt] Multithreading vs glXMakeCurrent()
- Date: Tue, 04 Mar 2008 03:59:57 -0800
Multithreading with opengl is a bad idea, but only because of drivers
using tls (thread local storage). Nvidia's driver is one such driver
and a context can only be access/manipulated in the thread that created
it. Essentially this means you must communicate with an opengl
drawing/managing thread using message passing. The whole multithreading
topic really leads to a nightmarish situation and difficult debugging
given the sad state of affairs with many video card drivers, so if you
want your program to run reliably on different computers, run all the
direct gui code in a single thread. You might consider using processes
instead of threads even, then tls cannot be an issue.
Norbert Schultz wrote:
Hi out there,
I have a strange multi threading problem using GtkGLextmm. Thread 1 creates a
Gtk::GL::DrawingArea, does some initialization. Then Thread 1 (regular
Actualisation) and Thread 2 (which handles all GTK Events) want to update
things. But Thread2 cannot get a the start operations with
Glib::RefPtr<Gdk::GL::Context> context=m_glDrawingArea->get_gl_context();
Glib::RefPtr<Gdk::GL::Drawable> drawable=m_glDrawingArea->get_gl_drawable();
drawable->gl_begin (context); // fails
At the console I receive just:
GdkGLExt-WARNING **: glXMakeCurrent() failed
But this happens only to Thread2. Sometimes the situation is changed and only
Thread 2 can paint. All OpenGL code fenced with a Lock so that only one
Thread can do OpenGL actions at once. I think it's possible to put all the
drawing commands into a third thread (and let Thread 1 and 2 call them for
repainting operations) but before I do that I want to ask if someone has
another idea?
According to the man page glXMakeCurrent() should generate an error when it
fails, but I don't receive one (at least nobody kills my program, which seems
usual on X11 errors without error handler).
Single threaded OpenGL seems to work, OS is a Gutsy AMD64 with current nVidia
Drivers 169.09 on a Geforce8.
Greetings from France,
Norbert
_______________________________________________
gtkglext-list mailing list
gtkglext-list gnome org
http://mail.gnome.org/mailman/listinfo/gtkglext-list
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]