mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-01-02 19:42:37 +00:00
wayland: Update the HDR data on placeholder displays
Update the HDR data on a placeholder display if it hasn't been finalized and added yet, or the HDR data on the added display will be incorrect.
(cherry picked from commit 235f417616)
This commit is contained in:
@@ -106,6 +106,15 @@ static void image_description_info_handle_done(void *data,
|
||||
case WAYLAND_COLOR_OBJECT_TYPE_DISPLAY:
|
||||
{
|
||||
SDL_copyp(&state->display_data->HDR, &state->HDR);
|
||||
|
||||
if (state->display_data->display) {
|
||||
SDL_VideoDisplay *disp = SDL_GetVideoDisplay(state->display_data->display);
|
||||
if (disp) {
|
||||
SDL_SetDisplayHDRProperties(disp, &state->HDR);
|
||||
}
|
||||
} else {
|
||||
SDL_copyp(&state->display_data->placeholder.HDR, &state->HDR);
|
||||
}
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1056,8 +1056,6 @@ static void display_handle_done(void *data,
|
||||
AddEmulatedModes(internal, native_mode.w, native_mode.h);
|
||||
}
|
||||
|
||||
SDL_SetDisplayHDRProperties(dpy, &internal->HDR);
|
||||
|
||||
if (internal->display == 0) {
|
||||
// First time getting display info, initialize the VideoDisplay
|
||||
if (internal->physical_width_mm >= internal->physical_height_mm) {
|
||||
@@ -1070,6 +1068,9 @@ static void display_handle_done(void *data,
|
||||
|
||||
// During initialization, the displays will be added after enumeration is complete.
|
||||
if (!video->initializing) {
|
||||
if (video->wp_color_manager_v1) {
|
||||
Wayland_GetColorInfoForOutput(internal, false);
|
||||
}
|
||||
internal->display = SDL_AddVideoDisplay(&internal->placeholder, true);
|
||||
SDL_free(internal->placeholder.name);
|
||||
SDL_zero(internal->placeholder);
|
||||
@@ -1119,7 +1120,6 @@ static void handle_output_image_description_changed(void *data,
|
||||
struct wp_color_management_output_v1 *wp_color_management_output_v1)
|
||||
{
|
||||
SDL_DisplayData *display = (SDL_DisplayData *)data;
|
||||
// wl_display.done is called after this event, so the display HDR status will be updated there.
|
||||
Wayland_GetColorInfoForOutput(display, false);
|
||||
}
|
||||
|
||||
@@ -1159,7 +1159,11 @@ static bool Wayland_add_display(SDL_VideoData *d, uint32_t id, uint32_t version)
|
||||
if (data->videodata->wp_color_manager_v1) {
|
||||
data->wp_color_management_output = wp_color_manager_v1_get_output(data->videodata->wp_color_manager_v1, output);
|
||||
wp_color_management_output_v1_add_listener(data->wp_color_management_output, &wp_color_management_output_listener, data);
|
||||
Wayland_GetColorInfoForOutput(data, true);
|
||||
|
||||
// If not initializing, this will be queried synchronously in wl_output.done.
|
||||
if (d->initializing) {
|
||||
Wayland_GetColorInfoForOutput(data, true);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user