From e052f12630ecb8d8b1b35d60cfb8ba14d811d1ac Mon Sep 17 00:00:00 2001 From: Alexander Orzechowski Date: Fri, 10 Mar 2023 13:14:51 +0100 Subject: [PATCH] wlr_scene: Maintain one render_list per scene Since we're now adding every node into the tree into the render_list, the length won't change depending on the output. --- include/wlr/types/wlr_scene.h | 4 ++-- types/scene/wlr_scene.c | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/include/wlr/types/wlr_scene.h b/include/wlr/types/wlr_scene.h index b6f0d2175..6608c41d7 100644 --- a/include/wlr/types/wlr_scene.h +++ b/include/wlr/types/wlr_scene.h @@ -106,6 +106,8 @@ struct wlr_scene { enum wlr_scene_debug_damage_option debug_damage_option; bool direct_scanout; bool calculate_visibility; + + struct wl_array render_list; }; /** A scene-graph node displaying a single surface. */ @@ -200,8 +202,6 @@ struct wlr_scene_output { struct wl_listener output_needs_frame; struct wl_list damage_highlight_regions; - - struct wl_array render_list; }; /** A layer shell scene helper */ diff --git a/types/scene/wlr_scene.c b/types/scene/wlr_scene.c index 58f4a1479..ee392cce9 100644 --- a/types/scene/wlr_scene.c +++ b/types/scene/wlr_scene.c @@ -122,6 +122,8 @@ void wlr_scene_node_destroy(struct wlr_scene_node *node) { wl_list_remove(&scene->presentation_destroy.link); wl_list_remove(&scene->linux_dmabuf_v1_destroy.link); + + wl_array_release(&scene->render_list); } else { assert(node->parent); } @@ -1335,7 +1337,6 @@ void wlr_scene_output_destroy(struct wlr_scene_output *scene_output) { wl_list_remove(&scene_output->output_damage.link); wl_list_remove(&scene_output->output_needs_frame.link); - wl_array_release(&scene_output->render_list); free(scene_output); } @@ -1585,7 +1586,7 @@ bool wlr_scene_output_commit(struct wlr_scene_output *scene_output) { return true; } - struct wl_array *render_list = &scene_output->render_list; + struct wl_array *render_list = &scene_output->scene->render_list; render_list->size = 0; struct wlr_box box = { .x = scene_output->x, .y = scene_output->y };