Support output to HDR monitors

Co-authored-by: Alvin Wong <alvinhochun@gmail.com>
Co-authored-by: Allen Pestaluky <allenpestaluky@gmail.com>
This commit is contained in:
Josh Jones 2025-02-02 18:12:45 -05:00
parent 40448082ab
commit b8389cc76b
65 changed files with 1579 additions and 233 deletions

View file

@ -75,6 +75,80 @@ DisplayServer::VSyncMode RenderingContextDriver::window_get_vsync_mode(DisplaySe
}
}
void RenderingContextDriver::window_set_hdr_output_enabled(DisplayServer::WindowID p_window, bool p_enabled) {
SurfaceID surface = surface_get_from_window(p_window);
if (surface) {
surface_set_hdr_output_enabled(surface, p_enabled);
}
}
bool RenderingContextDriver::window_get_hdr_output_enabled(DisplayServer::WindowID p_window) const {
SurfaceID surface = surface_get_from_window(p_window);
if (surface) {
return surface_get_hdr_output_enabled(surface);
} else {
return false;
}
}
void RenderingContextDriver::window_set_hdr_output_reference_luminance(DisplayServer::WindowID p_window, float p_reference_luminance) {
SurfaceID surface = surface_get_from_window(p_window);
if (surface) {
surface_set_hdr_output_reference_luminance(surface, p_reference_luminance);
}
}
float RenderingContextDriver::window_get_hdr_output_reference_luminance(DisplayServer::WindowID p_window) const {
SurfaceID surface = surface_get_from_window(p_window);
if (surface) {
return surface_get_hdr_output_reference_luminance(surface);
} else {
return 0.0f;
}
}
void RenderingContextDriver::window_set_hdr_output_max_luminance(DisplayServer::WindowID p_window, float p_max_luminance) {
SurfaceID surface = surface_get_from_window(p_window);
if (surface) {
surface_set_hdr_output_max_luminance(surface, p_max_luminance);
}
}
float RenderingContextDriver::window_get_hdr_output_max_luminance(DisplayServer::WindowID p_window) const {
SurfaceID surface = surface_get_from_window(p_window);
if (surface) {
return surface_get_hdr_output_max_luminance(surface);
} else {
return 0.0f;
}
}
void RenderingContextDriver::window_set_hdr_output_linear_luminance_scale(DisplayServer::WindowID p_window, float p_linear_luminance_scale) {
SurfaceID surface = surface_get_from_window(p_window);
if (surface) {
surface_set_hdr_output_linear_luminance_scale(surface, p_linear_luminance_scale);
}
}
float RenderingContextDriver::window_get_hdr_output_linear_luminance_scale(DisplayServer::WindowID p_window) const {
SurfaceID surface = surface_get_from_window(p_window);
if (surface) {
return surface_get_hdr_output_linear_luminance_scale(surface);
} else {
return 0.0f;
}
}
float RenderingContextDriver::window_get_output_max_linear_value(DisplayServer::WindowID p_window) const {
SurfaceID surface = surface_get_from_window(p_window);
if (surface) {
if (surface_get_hdr_output_enabled(surface)) {
return surface_get_hdr_output_max_value(surface);
}
}
return 1.0f; // SDR
}
void RenderingContextDriver::window_destroy(DisplayServer::WindowID p_window) {
SurfaceID surface = surface_get_from_window(p_window);
if (surface) {