diff --git a/docs/env_vars.md b/docs/env_vars.md index 609ca97b..22626c6b 100644 --- a/docs/env_vars.md +++ b/docs/env_vars.md @@ -45,6 +45,12 @@ wlroots reads these environment variables * *WLR_RENDERER_ALLOW_SOFTWARE*: allows the gles2 renderer to use software rendering +## scenes + +* *WLR_SCENE_DEBUG_DAMAGE*: specifies debug options for screen damage related +tasks for compositors that use scenes. (available options: NONE, RERENDER, +HIGHLIGHT) + # Generic * *DISPLAY*: if set probe X11 backend in `wlr_backend_autocreate` diff --git a/include/wlr/types/wlr_scene.h b/include/wlr/types/wlr_scene.h index f3302574..2625dd80 100644 --- a/include/wlr/types/wlr_scene.h +++ b/include/wlr/types/wlr_scene.h @@ -71,6 +71,12 @@ struct wlr_scene_node { struct wlr_addon_set addons; }; +enum wlr_scene_debug_damage_option { + WLR_SCENE_DEBUG_DAMAGE_NONE, + WLR_SCENE_DEBUG_DAMAGE_RERENDER, + WLR_SCENE_DEBUG_DAMAGE_HIGHLIGHT +}; + /** The root scene-graph node. */ struct wlr_scene { struct wlr_scene_node node; @@ -83,6 +89,8 @@ struct wlr_scene { // private state struct wl_listener presentation_destroy; + + enum wlr_scene_debug_damage_option debug_damage_option; }; /** A sub-tree in the scene-graph. */ diff --git a/types/scene/wlr_scene.c b/types/scene/wlr_scene.c index 303325fd..4241a57c 100644 --- a/types/scene/wlr_scene.c +++ b/types/scene/wlr_scene.c @@ -130,6 +130,23 @@ struct wlr_scene *wlr_scene_create(void) { scene_node_init(&scene->node, WLR_SCENE_NODE_ROOT, NULL); wl_list_init(&scene->outputs); wl_list_init(&scene->presentation_destroy.link); + + char *debug_damage = getenv("WLR_SCENE_DEBUG_DAMAGE"); + if (debug_damage) { + wlr_log(WLR_INFO, "Loading WLR_SCENE_DEBUG_DAMAGE option: %s", debug_damage); + } + + if (!debug_damage || strcmp(debug_damage, "none") == 0) { + scene->debug_damage_option = WLR_SCENE_DEBUG_DAMAGE_NONE; + } else if (strcmp(debug_damage, "rerender") == 0) { + scene->debug_damage_option = WLR_SCENE_DEBUG_DAMAGE_RERENDER; + } else if (strcmp(debug_damage, "highlight") == 0) { + scene->debug_damage_option = WLR_SCENE_DEBUG_DAMAGE_HIGHLIGHT; + } else { + wlr_log(WLR_ERROR, "Unknown WLR_SCENE_DEBUG_DAMAGE option: %s", debug_damage); + scene->debug_damage_option = WLR_SCENE_DEBUG_DAMAGE_NONE; + } + return scene; }