3

I use Python in combination with the gtk3 and the GTKGLExt fork from https://github.com/tdz/gtkglext so I can use the gobject introspection feature to use Gtk3 from python. I created a Gtk.DrawingArea to draw my OpenGL stuff. Everything works fine as long as I have just one instance of this widget.

However, I use a Gtk Notebook to have multiple instances of this widget present in different pages of the notebook (one widget per page).

Sometimes (meaning in a non deterministic way) the program crashes with a segmentation fault. I ran a stacktrace using gdb and located the problem to be the call to "gtk_widget_end_gl" which is placed at the end of my drawing, realize and configure handler methods (of course there is a gtk_widget_begin_gl at the beginning of each of those as well).

Here is the relevant excerpt from the stacktrace:

0  0xb1170b58 in _gdk_x11_gl_context_impl_get_current () at gdkglcontext-x11.c:514
1  0xb116c094 in gdk_gl_context_get_current () at gdkglcontext.c:244
2  0xb116c0b4 in gdk_gl_context_release_current () at gdkglcontext.c:215
3  0xb4d04592 in gtk_widget_end_gl (widget=0xa175608, do_swap=0) at gtkglwidget.c:549

and below is a minimal example of my realize method where the problem occurs where "widget" is an instance of Gtk.DrawingArea:

def on_realize(self, widget, *user_data):
    if not GtkGLExt.widget_begin_gl(widget):
        return False
    gl.glClearColor(BACKGROUND_COLOR[0],
                    BACKGROUND_COLOR[1],
                    BACKGROUND_COLOR[2],
                    BACKGROUND_COLOR[3])
    GtkGLExt.widget_end_gl(widget, False)  

Since I am pretty much clueless why this problem occurs sometimes (around every 5th time a new widget is created) I wonder if anyone ever has experienced the same or can reproduce the problem or help me to find a solution.

I need to say that I don't manually create an OpenGL context here since in the provided examples this never seemed necessary and I figured the widget would do this on it's own. The stacktrace implies that there seems to be a problem getting the context. Whats startles me is the fact that this only happens sometimes. So if someone could even hint me how to tackle this problem I would be very glad as I am not an experienced C programmer.

Andon M. Coleman
  • 42,359
  • 2
  • 81
  • 106
jenzzaflow
  • 46
  • 2

0 Answers0