diff options
Diffstat (limited to 'gdk/gdkwindow.c')
-rw-r--r-- | gdk/gdkwindow.c | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 31033678db..9cc257b49a 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -2724,8 +2724,11 @@ gdk_window_ref_impl_surface (GdkWindow *window) } GdkGLContext * -gdk_window_get_paint_gl_context (GdkWindow *window, GError **error) +gdk_window_get_paint_gl_context (GdkWindow *window, + GError **error) { + GError *internal_error = NULL; + if (_gdk_gl_flags & GDK_GL_DISABLE) { g_set_error_literal (error, GDK_GL_ERROR, @@ -2741,21 +2744,36 @@ gdk_window_get_paint_gl_context (GdkWindow *window, GError **error) TRUE, GDK_GL_PROFILE_3_2_CORE, NULL, - error); + &internal_error); if (window->impl_window->gl_paint_context == NULL && - g_error_matches (*error, GDK_GL_ERROR, + g_error_matches (internal_error, GDK_GL_ERROR, GDK_GL_ERROR_UNSUPPORTED_PROFILE)) { - g_clear_error (error); + g_clear_error (&internal_error); window->impl_window->gl_paint_context = GDK_WINDOW_IMPL_GET_CLASS (window->impl)->create_gl_context (window->impl_window, TRUE, GDK_GL_PROFILE_DEFAULT, NULL, - error); + &internal_error); } } + if (internal_error != NULL) + { + g_propagate_error (error, internal_error); + g_clear_object (&(window->impl_window->gl_paint_context)); + return NULL; + } + + gdk_gl_context_realize (window->impl_window->gl_paint_context, &internal_error); + if (internal_error != NULL) + { + g_propagate_error (error, internal_error); + g_clear_object (&(window->impl_window->gl_paint_context)); + return NULL; + } + return window->impl_window->gl_paint_context; } @@ -2771,6 +2789,9 @@ gdk_window_get_paint_gl_context (GdkWindow *window, GError **error) * * If the creation of the #GdkGLContext failed, @error will be set. * + * Before using the returned #GdkGLContext, you will need to + * call gdk_gl_context_make_current(). + * * Returns: (transfer full): the newly created #GdkGLContext, or * %NULL on error * |