aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Orzechowski <alex@ozal.ski>2023-12-04 07:06:35 -0500
committerAlexander Orzechowski <alex@ozal.ski>2023-12-04 07:06:35 -0500
commit62169bf5ac4c7ff4d384e5fd286f07be191830d6 (patch)
tree31d7829bd045f889911ed9f3836e2004750e7474
parent364d7cba42cc450cc31058cef8fb11147d8a59fb (diff)
wlr_scene: fix transformed outputs backend damage clearing
When we cleared the pending backend damage when the output committed, we would not take into account the output transform. It's easiest to fix this by just changing pending_commit_damage to always have transformed coordinates.
-rw-r--r--types/scene/wlr_scene.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/types/scene/wlr_scene.c b/types/scene/wlr_scene.c
index 949b8c89..eebadec8 100644
--- a/types/scene/wlr_scene.c
+++ b/types/scene/wlr_scene.c
@@ -1483,17 +1483,16 @@ static bool construct_render_list_iterator(struct wlr_scene_node *node,
static void output_state_apply_damage(const struct render_data *data,
struct wlr_output_state *state) {
struct wlr_scene_output *output = data->output;
- pixman_region32_union(&output->pending_commit_damage,
- &output->pending_commit_damage, &output->damage_ring.current);
- pixman_region32_intersect_rect(&output->pending_commit_damage,
- &output->pending_commit_damage, 0, 0, data->trans_width, data->trans_height);
pixman_region32_t frame_damage;
pixman_region32_init(&frame_damage);
- pixman_region32_copy(&frame_damage, &output->pending_commit_damage);
+ pixman_region32_copy(&frame_damage, &output->damage_ring.current);
transform_output_damage(&frame_damage, data);
- wlr_output_state_set_damage(state, &frame_damage);
+ pixman_region32_union(&output->pending_commit_damage,
+ &output->pending_commit_damage, &frame_damage);
pixman_region32_fini(&frame_damage);
+
+ wlr_output_state_set_damage(state, &output->pending_commit_damage);
}
static void scene_buffer_send_dmabuf_feedback(const struct wlr_scene *scene,