[PATCH 1/4] compositor: When redrawing, don't clip opaque regions from other planes

Ander Conselvan de Oliveira conselvan2 at gmail.com
Thu Aug 9 06:44:58 PDT 2012

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.
 src/compositor.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/compositor.c b/src/compositor.c
index a3273dc..6a22f1c 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -1120,7 +1120,8 @@ surface_accumulate_damage(struct weston_surface *surface,
 			      &surface->plane->damage, &surface->damage);
 	pixman_region32_copy(&surface->clip, opaque);
-	pixman_region32_union(opaque, opaque, &surface->transform.opaque);
+	if (surface->plane == &surface->compositor->primary_plane)
+		pixman_region32_union(opaque, opaque, &surface->transform.opaque);
 static void

More information about the wayland-devel mailing list