[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);
empty_region(&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
--
1.7.9.5
More information about the wayland-devel
mailing list