From 3c71f61c0b6dc191ffbf049c7bb6ec86a8c09023 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 17acf3388..812804c66 100644 --- a/include/wlr/types/wlr_scene.h +++ b/include/wlr/types/wlr_scene.h @@ -110,6 +110,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. */ @@ -214,8 +216,6 @@ struct wlr_scene_output { struct wl_listener output_needs_frame; struct wl_list damage_highlight_regions; - - struct wl_array render_list; }; struct wlr_scene_timer { diff --git a/types/scene/wlr_scene.c b/types/scene/wlr_scene.c index 042afea6c..5dc2d702e 100644 --- a/types/scene/wlr_scene.c +++ b/types/scene/wlr_scene.c @@ -125,6 +125,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); } @@ -1377,7 +1379,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); } @@ -1718,7 +1719,7 @@ bool wlr_scene_output_build_state(struct wlr_scene_output *scene_output, bool calculate_visibility = scene_output->scene->calculate_visibility; struct wlr_scene_node *tree_node = &scene_output->scene->tree.node; - struct wl_array *render_list = &scene_output->render_list; + struct wl_array *render_list = &scene_output->scene->render_list; int x, y; render_list->size = 0;