gl: Call make_current() before doing any GL work
authorBenjamin Otte <otte@redhat.com>
Fri, 22 Oct 2021 15:37:34 +0000 (17:37 +0200)
committerBenjamin Otte <otte@redhat.com>
Fri, 22 Oct 2021 15:51:40 +0000 (17:51 +0200)
But don't call it too early, we only want to call it once we have
prepared the target.

This way, we guarantee that a GL context is always available and that it
is bound to the correct target.

gsk/gl/gskglrenderer.c

index 0b1e9eddda7094035efe4b746c32cfd6695541e8..c11715ae9eb6b98f09e9d257a2a7b66009285e59 100644 (file)
@@ -203,11 +203,12 @@ gsk_gl_renderer_render (GskRenderer          *renderer,
   viewport.size.width = gdk_surface_get_width (surface) * scale_factor;
   viewport.size.height = gdk_surface_get_height (surface) * scale_factor;
 
-  gdk_gl_context_make_current (self->context);
   gdk_draw_context_begin_frame_full (GDK_DRAW_CONTEXT (self->context),
                                      gsk_render_node_prefers_high_depth (root),
                                      update_area);
 
+  gdk_gl_context_make_current (self->context);
+
   /* Must be called *AFTER* gdk_draw_context_begin_frame() */
   render_region = get_render_region (surface, self->context);
 
@@ -221,7 +222,6 @@ gsk_gl_renderer_render (GskRenderer          *renderer,
   gsk_gl_driver_end_frame (self->driver);
   gsk_gl_render_job_free (job);
 
-  gdk_gl_context_make_current (self->context);
   gdk_draw_context_end_frame (GDK_DRAW_CONTEXT (self->context));
 
   gsk_gl_driver_after_frame (self->driver);
@@ -251,6 +251,8 @@ gsk_gl_renderer_render_texture (GskRenderer           *renderer,
 
   format = gsk_render_node_prefers_high_depth (root) ? GL_RGBA32F : GL_RGBA8;
 
+  gdk_gl_context_make_current (self->context);
+
   if (gsk_gl_driver_create_render_target (self->driver,
                                           width, height,
                                           format,