diff --git a/compositor/compositor.c b/compositor/compositor.c index 01fb25730..e545a6a28 100644 --- a/compositor/compositor.c +++ b/compositor/compositor.c @@ -492,7 +492,7 @@ wlsc_output_repaint(struct wlsc_output *output) struct wlsc_compositor *ec = output->compositor; struct wlsc_surface *es; struct wlsc_input_device *eid; - pixman_region32_t new_damage, total_damage; + pixman_region32_t new_damage, total_damage, repaint; output->prepare_render(output); @@ -520,6 +520,18 @@ wlsc_output_repaint(struct wlsc_output *output) glClear(GL_COLOR_BUFFER_BIT); wlsc_surface_draw(es, output, &total_damage); } else { + wl_list_for_each(es, &ec->surface_list, link) { + if (es->visual != &ec->compositor.rgb_visual) + continue; + + pixman_region32_init_rect(&repaint, + es->x, es->y, + es->width, es->height); + wlsc_surface_draw(es, output, &total_damage); + pixman_region32_subtract(&total_damage, + &total_damage, &repaint); + } + if (output->background) wlsc_surface_draw(output->background, output, &total_damage); @@ -531,6 +543,14 @@ wlsc_output_repaint(struct wlsc_output *output) ec->switcher->current == es) continue; + if (es->visual == &ec->compositor.rgb_visual) { + pixman_region32_union_rect(&total_damage, + &total_damage, + es->x, es->y, + es->width, es->height); + continue; + } + wlsc_surface_draw(es, output, &total_damage); } }