diff --git a/src/common/scene-helpers.c b/src/common/scene-helpers.c index 56ac0c57..e4a5e4c4 100644 --- a/src/common/scene-helpers.c +++ b/src/common/scene-helpers.c @@ -48,30 +48,21 @@ lab_wlr_scene_get_prev_node(struct wlr_scene_node *node) */ static void scene_output_damage(struct wlr_scene_output *scene_output, - const pixman_region32_t *region) + const pixman_region32_t *damage) { - wlr_damage_ring_add(&scene_output->damage_ring, region); - struct wlr_output *output = scene_output->output; - enum wl_output_transform transform = - wlr_output_transform_invert(scene_output->output->transform); - int width = output->width; - int height = output->height; - if (transform & WL_OUTPUT_TRANSFORM_90) { - width = output->height; - height = output->width; + pixman_region32_t clipped; + pixman_region32_init(&clipped); + pixman_region32_intersect_rect(&clipped, damage, 0, 0, output->width, output->height); + + if (pixman_region32_not_empty(&clipped)) { + wlr_damage_ring_add(&scene_output->damage_ring, &clipped); + pixman_region32_union(&scene_output->pending_commit_damage, + &scene_output->pending_commit_damage, &clipped); } - pixman_region32_t frame_damage; - pixman_region32_init(&frame_damage); - wlr_region_transform(&frame_damage, region, transform, width, height); - - pixman_region32_union(&scene_output->pending_commit_damage, - &scene_output->pending_commit_damage, &frame_damage); - pixman_region32_intersect_rect(&scene_output->pending_commit_damage, - &scene_output->pending_commit_damage, 0, 0, output->width, output->height); - pixman_region32_fini(&frame_damage); + pixman_region32_fini(&clipped); } /* @@ -141,13 +132,6 @@ lab_wlr_scene_output_commit(struct wlr_scene_output *scene_output, pixman_region32_init_rect(®ion, additional_damage.x, additional_damage.y, additional_damage.width, additional_damage.height); - /* - * Region passed to scene_output_damage() should have the same - * scale as the output buffer but have a different transform. - */ - wlr_region_transform(®ion, ®ion, wlr_output->transform, - wlr_output->width, wlr_output->height); - scene_output_damage(scene_output, ®ion); pixman_region32_fini(®ion); } diff --git a/subprojects/wlroots.wrap b/subprojects/wlroots.wrap index 606bb44c..b51516a2 100644 --- a/subprojects/wlroots.wrap +++ b/subprojects/wlroots.wrap @@ -1,6 +1,6 @@ [wrap-git] url = https://gitlab.freedesktop.org/wlroots/wlroots.git -revision = 502eb38d80eb5a273f5481ec8559cb35d726f5da +revision = 009515161bd97d8f920d72d31ef462f2608688e8 [provide] dependency_names = wlroots-0.19