compositor: When redrawing, don't clip opaque regions from other planes

When accumulating damage in the repaint loop, the opaque region of
surfaces in other planes is added to the overall opaque region. This
causes surface->clip to contain the areas obscured by surfaces in
other planes. Change it to contain only the opaque region of surfaces
in the primary plane

This fixes a bug where moving a window that was just moved from the
primary plane to another would leave artifacts on the screen. The
problem was that the damage generated by weston_surface_move_to_plane()
would be clipped on weston_surface_redraw(), leaving the contets below
it unchanged. Moving the overlaid surface would no longer generate
damage on the primary plane, so the contents would remain unchanged
(i.e. wrong) indefinitely.
dev
Ander Conselvan de Oliveira 12 years ago committed by Kristian Høgsberg
parent 84cf541b27
commit 3b70b66fa9
  1. 1
      src/compositor.c

@ -1122,6 +1122,7 @@ surface_accumulate_damage(struct weston_surface *surface,
&surface->plane->damage, &surface->damage); &surface->plane->damage, &surface->damage);
empty_region(&surface->damage); empty_region(&surface->damage);
pixman_region32_copy(&surface->clip, opaque); pixman_region32_copy(&surface->clip, opaque);
if (surface->plane == &surface->compositor->primary_plane)
pixman_region32_union(opaque, opaque, &surface->transform.opaque); pixman_region32_union(opaque, opaque, &surface->transform.opaque);
} }

Loading…
Cancel
Save