gsk: Refactor damage computation for GL renderer
authorBenjamin Otte <otte@redhat.com>
Fri, 20 Apr 2018 14:07:34 +0000 (16:07 +0200)
committerBenjamin Otte <otte@redhat.com>
Tue, 24 Apr 2018 21:16:58 +0000 (23:16 +0200)
Previously, we got the damage, then computed the changed area, then
started a frame with that changed area.

But starting a frame computes the damage for us.

So now we start a frame, then get the damage area from that, then
compute the change area.

gsk/gl/gskglrenderer.c

index 177ac4b611aa97127878b68409e3039b9d2aaa86..3e9dafaff158f3c7fc010d6eb80e504f3eeda8aa 100644 (file)
@@ -2577,7 +2577,12 @@ gsk_gl_renderer_render (GskRenderer          *renderer,
                       gdk_surface_get_width (surface) * self->scale_factor,
                       gdk_surface_get_height (surface) * self->scale_factor
                   };
-  damage = gdk_gl_context_get_damage (self->gl_context);
+
+  context = gdk_surface_begin_draw_frame (surface,
+                                          GDK_DRAW_CONTEXT (self->gl_context),
+                                          update_area);
+
+  damage = gdk_drawing_context_get_clip (context);
   cairo_region_union (damage, update_area);
 
   if (cairo_region_contains_rectangle (damage, &whole_surface) == CAIRO_REGION_OVERLAP_IN)
@@ -2597,17 +2602,7 @@ gsk_gl_renderer_render (GskRenderer          *renderer,
         self->render_region = cairo_region_reference (damage);
     }
 
-  context = gdk_surface_begin_draw_frame (surface,
-                                          GDK_DRAW_CONTEXT (self->gl_context),
-                                          damage);
-
   cairo_region_destroy (damage);
-  if (self->render_region)
-    {
-      damage = gdk_drawing_context_get_clip (context);
-      cairo_region_union (self->render_region, damage);
-      cairo_region_destroy (damage);
-    }
 
   self->scale_factor = gdk_surface_get_scale_factor (surface);
   gdk_gl_context_make_current (self->gl_context);