Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions drivers/apple_embedded/display_server_apple_embedded.mm
Original file line number Diff line number Diff line change
Expand Up @@ -837,6 +837,7 @@ _FORCE_INLINE_ int _convert_utf32_offset_to_utf16(const String &p_existing_text,

float reference_luminance = _calculate_current_reference_luminance();
rendering_context->window_set_hdr_output_reference_luminance(DisplayServerEnums::MAIN_WINDOW_ID, reference_luminance);
rendering_context->window_set_hdr_output_linear_luminance_scale(DisplayServerEnums::MAIN_WINDOW_ID, reference_luminance);

float max_luminance = _screen_potential_edr_headroom() * hardware_reference_luminance_nits;
rendering_context->window_set_hdr_output_max_luminance(DisplayServerEnums::MAIN_WINDOW_ID, max_luminance);
Expand Down
4 changes: 3 additions & 1 deletion drivers/metal/rendering_context_driver_metal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -461,11 +461,13 @@ float RenderingContextDriverMetal::surface_get_hdr_output_max_luminance(SurfaceI
}

void RenderingContextDriverMetal::surface_set_hdr_output_linear_luminance_scale(SurfaceID p_surface, float p_linear_luminance_scale) {
Surface *surface = (Surface *)(p_surface);
surface->hdr_linear_luminance_scale = p_linear_luminance_scale;
}

float RenderingContextDriverMetal::surface_get_hdr_output_linear_luminance_scale(SurfaceID p_surface) const {
Surface *surface = (Surface *)(p_surface);
return surface->hdr_reference_luminance;
return surface->hdr_linear_luminance_scale;
}

float RenderingContextDriverMetal::surface_get_hdr_output_max_value(SurfaceID p_surface) const {
Expand Down
2 changes: 2 additions & 0 deletions drivers/metal/rendering_context_driver_metal.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@ class API_AVAILABLE(macos(11.0), ios(14.0), tvos(14.0)) RenderingContextDriverMe
// to be a more pleasant player-facing value.
float hdr_reference_luminance = 200.0f;
float hdr_max_luminance = 1000.0f;
// linear_luminance_scale must always equal hdr_reference_luminance on Apple platforms.
float hdr_linear_luminance_scale = 200.0f;
bool needs_resize = false;
bool hdr_output = false;

Expand Down
4 changes: 2 additions & 2 deletions drivers/vulkan/rendering_device_driver_vulkan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7332,8 +7332,8 @@ bool RenderingDeviceDriverVulkan::has_feature(Features p_feature) {
// involving integrated GPU hardware do not function correctly
// with HDR output.
return false;
#elif defined(MACOS_ENABLED) || defined(APPLE_EMBEDDED_ENABLED)
// HDR support has not yet been thoroughly tested and validated for Apple platforms.
#elif defined(APPLE_EMBEDDED_ENABLED)
// HDR output with Vulkan currently does not function correctly on iOS. (Tested on iPhone 13 Pro, iOS 26.3.1(a))
return false;
#else
return context_driver->is_colorspace_supported();
Expand Down
1 change: 1 addition & 0 deletions platform/macos/display_server_macos_base.mm
Original file line number Diff line number Diff line change
Expand Up @@ -569,6 +569,7 @@
float current_ref_luminance = rendering_context->window_get_hdr_output_reference_luminance(p_window);
if (!Math::is_equal_approx(current_ref_luminance, new_reference_luminance)) {
rendering_context->window_set_hdr_output_reference_luminance(p_window, new_reference_luminance);
rendering_context->window_set_hdr_output_linear_luminance_scale(p_window, new_reference_luminance);
hdr_state_changed = true;
}

Expand Down
Loading