clutter/stage-cogl: Stop painting redraw clip outline

We already have a better way to paint the redraw clip: Painting the
damage region paints the individual rects of the clip region and not
only the bounding rect.

So stop painting an outline around the redraw clip bounding rect when
CLUTTER_DEBUG_REDRAWS is set.

https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1113
This commit is contained in:
Jonas Dreßler 2020-03-06 12:09:29 +01:00 committed by Jonas Ådahl
parent 3fed768db4
commit afe4cd482e

View File

@ -581,19 +581,15 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window,
gboolean has_buffer_age; gboolean has_buffer_age;
gboolean do_swap_buffer; gboolean do_swap_buffer;
gboolean swap_with_damage; gboolean swap_with_damage;
ClutterActor *wrapper;
cairo_region_t *redraw_clip; cairo_region_t *redraw_clip;
cairo_region_t *queued_redraw_clip = NULL; cairo_region_t *queued_redraw_clip = NULL;
cairo_region_t *fb_clip_region; cairo_region_t *fb_clip_region;
cairo_region_t *swap_region; cairo_region_t *swap_region;
cairo_rectangle_int_t redraw_rect;
gboolean clip_region_empty; gboolean clip_region_empty;
float fb_scale; float fb_scale;
int fb_width, fb_height; int fb_width, fb_height;
int buffer_age; int buffer_age;
wrapper = CLUTTER_ACTOR (stage_cogl->wrapper);
clutter_stage_view_get_layout (view, &view_rect); clutter_stage_view_get_layout (view, &view_rect);
fb_scale = clutter_stage_view_get_scale (view); fb_scale = clutter_stage_view_get_scale (view);
fb_width = cogl_framebuffer_get_width (fb); fb_width = cogl_framebuffer_get_width (fb);
@ -738,47 +734,6 @@ clutter_stage_cogl_redraw_view (ClutterStageWindow *stage_window,
paint_stage (stage_cogl, view, redraw_clip); paint_stage (stage_cogl, view, redraw_clip);
} }
cairo_region_get_extents (redraw_clip, &redraw_rect);
if (may_use_clipped_redraw &&
G_UNLIKELY ((clutter_paint_debug_flags & CLUTTER_DEBUG_REDRAWS)))
{
CoglContext *ctx = cogl_framebuffer_get_context (fb);
static CoglPipeline *outline = NULL;
ClutterActor *actor = CLUTTER_ACTOR (wrapper);
float x_1 = redraw_rect.x;
float x_2 = redraw_rect.x + redraw_rect.width;
float y_1 = redraw_rect.y;
float y_2 = redraw_rect.y + redraw_rect.height;
CoglVertexP2 quad[4] = {
{ x_1, y_1 },
{ x_2, y_1 },
{ x_2, y_2 },
{ x_1, y_2 }
};
CoglPrimitive *prim;
CoglMatrix modelview;
if (outline == NULL)
{
outline = cogl_pipeline_new (ctx);
cogl_pipeline_set_color4ub (outline, 0xff, 0x00, 0x00, 0xff);
}
prim = cogl_primitive_new_p2 (ctx,
COGL_VERTICES_MODE_LINE_LOOP,
4, /* n_vertices */
quad);
cogl_framebuffer_push_matrix (fb);
cogl_matrix_init_identity (&modelview);
_clutter_actor_apply_modelview_transform (actor, &modelview);
cogl_framebuffer_set_modelview_matrix (fb, &modelview);
cogl_framebuffer_draw_primitive (fb, outline, prim);
cogl_framebuffer_pop_matrix (fb);
cogl_object_unref (prim);
}
/* XXX: It seems there will be a race here in that the stage /* XXX: It seems there will be a race here in that the stage
* window may be resized before the cogl_onscreen_swap_region * window may be resized before the cogl_onscreen_swap_region
* is handled and so we may copy the wrong region. I can't * is handled and so we may copy the wrong region. I can't