From 1a667b22b3607129628c330fcc26bd0339f7eec5 Mon Sep 17 00:00:00 2001 From: DreamMaoMao <2523610504@qq.com> Date: Fri, 26 Jun 2026 10:14:54 +0800 Subject: [PATCH] fix: hdr miss add color mangaer mgr --- src/mango.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/mango.c b/src/mango.c index 35f9266e..29859377 100644 --- a/src/mango.c +++ b/src/mango.c @@ -31,6 +31,8 @@ #include #include #include +#include +#include #include #include #include @@ -6200,6 +6202,48 @@ void setup(void) { if (!(drw = fx_renderer_create(backend))) die("couldn't create renderer"); + if (drw->features.input_color_transform) { + const enum wp_color_manager_v1_render_intent render_intents[] = { + WP_COLOR_MANAGER_V1_RENDER_INTENT_PERCEPTUAL, + }; + size_t transfer_functions_len = 0; + enum wp_color_manager_v1_transfer_function *transfer_functions = + wlr_color_manager_v1_transfer_function_list_from_renderer( + drw, &transfer_functions_len); + + size_t primaries_len = 0; + enum wp_color_manager_v1_primaries *primaries = + wlr_color_manager_v1_primaries_list_from_renderer(drw, + &primaries_len); + + struct wlr_color_manager_v1 *cm = wlr_color_manager_v1_create( + dpy, 2, + &(struct wlr_color_manager_v1_options){ + .features = + { + .parametric = true, + .set_mastering_display_primaries = true, + }, + .render_intents = render_intents, + .render_intents_len = ARRAY_SIZE(render_intents), + .transfer_functions = transfer_functions, + .transfer_functions_len = transfer_functions_len, + .primaries = primaries, + .primaries_len = primaries_len, + }); + + free(transfer_functions); + free(primaries); + + if (cm) { + wlr_scene_set_color_manager_v1(scene, cm); + } else { + wlr_log(WLR_ERROR, "unable to create color manager"); + } + } + + wlr_color_representation_manager_v1_create_with_renderer(dpy, 1, drw); + wl_signal_add(&drw->events.lost, &gpu_reset); /* Create shm, drm and linux_dmabuf interfaces by ourselves.