From 6d86dcc56d449dbf9fcc18a46d0ebd02fea8b704 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Thu, 26 Jun 2025 13:48:24 +0200 Subject: [PATCH] scene: adjust rendering luminances based on output image description --- types/scene/wlr_scene.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/types/scene/wlr_scene.c b/types/scene/wlr_scene.c index 8c58ea2b1..bb97a4dfb 100644 --- a/types/scene/wlr_scene.c +++ b/types/scene/wlr_scene.c @@ -2282,12 +2282,26 @@ bool wlr_scene_output_build_state(struct wlr_scene_output *scene_output, struct wlr_color_transform *color_transform = NULL; const struct wlr_color_primaries *primaries = NULL; + const struct wlr_color_luminances *target_luminances = NULL; struct wlr_color_primaries primaries_value; + struct wlr_color_luminances target_luminances_value; const struct wlr_output_image_description *img_desc = output_pending_image_description(output, state); if (img_desc != NULL) { color_transform = wlr_color_transform_init_linear_to_inverse_eotf(img_desc->transfer_function); + wlr_color_primaries_from_named(&primaries_value, img_desc->primaries); primaries = &primaries_value; + + if (img_desc->mastering_luminance.min != 0 || img_desc->mastering_luminance.max != 0) { + struct wlr_color_luminances default_lum = {0}; + wlr_color_transfer_function_get_default_luminance(img_desc->transfer_function, &default_lum); + target_luminances_value = (struct wlr_color_luminances){ + .min = img_desc->mastering_luminance.min, + .max = img_desc->mastering_luminance.max, + .reference = default_lum.reference, // TODO: make configurable + }; + target_luminances = &target_luminances_value; + } } if (options->color_transform != NULL) { assert(color_transform == NULL); @@ -2300,6 +2314,7 @@ bool wlr_scene_output_build_state(struct wlr_scene_output *scene_output, .timer = timer ? timer->render_timer : NULL, .color_transform = options->color_transform, .primaries = primaries, + .luminances = target_luminances, .signal_timeline = scene_output->in_timeline, .signal_point = scene_output->in_point, });