From 37de63d984230ee212a0dae41f2aa506f3c8152d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pa=CC=84vels=20Nadtoc=CC=8Cajevs?= <7645683+bruvzg@users.noreply.github.com> Date: Mon, 27 Apr 2026 23:02:09 +0300 Subject: [PATCH] Fix editor screenshots with HDR enabled. --- editor/editor_node.cpp | 14 ++++++++++++++ scene/debugger/scene_debugger.cpp | 7 +++++++ 2 files changed, 21 insertions(+) diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index c0eb3efd44..d4a6ccf12f 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -177,6 +177,7 @@ #include "servers/display/display_server.h" #include "servers/navigation_2d/navigation_server_2d.h" #include "servers/navigation_3d/navigation_server_3d.h" +#include "servers/rendering/rendering_device.h" #include "servers/rendering/rendering_server.h" #ifdef VULKAN_ENABLED @@ -4011,6 +4012,12 @@ void EditorNode::_save_screenshot_with_embedded_process(int64_t p_w, int64_t p_h Ref img = texture->get_image(); ERR_FAIL_COND_MSG(img.is_null(), "Cannot get an image from a viewport texture of the editor main screen."); img->convert(Image::FORMAT_RGBA8); +#ifdef RD_ENABLED + RenderingDevice *rendering_device = RD::get_singleton(); + if (rendering_device && RenderingServer::get_singleton()->viewport_is_using_hdr_2d(viewport->get_viewport_rid())) { + img->linear_to_srgb(); + } +#endif ERR_FAIL_COND(p_emb_path.is_empty()); Ref overlay = Image::load_from_file(p_emb_path); DirAccess::remove_absolute(p_emb_path); @@ -4035,6 +4042,13 @@ void EditorNode::_save_screenshot(const String &p_path) { ERR_FAIL_COND_MSG(texture.is_null(), "Cannot get a viewport texture from the editor main screen."); Ref img = texture->get_image(); ERR_FAIL_COND_MSG(img.is_null(), "Cannot get an image from a viewport texture of the editor main screen."); + img->convert(Image::FORMAT_RGBA8); +#ifdef RD_ENABLED + RenderingDevice *rendering_device = RD::get_singleton(); + if (rendering_device && RenderingServer::get_singleton()->viewport_is_using_hdr_2d(viewport->get_viewport_rid())) { + img->linear_to_srgb(); + } +#endif Error error = img->save_png(p_path); ERR_FAIL_COND_MSG(error != OK, "Cannot save screenshot to file '" + p_path + "'."); diff --git a/scene/debugger/scene_debugger.cpp b/scene/debugger/scene_debugger.cpp index 9adf9b8943..bf3551609b 100644 --- a/scene/debugger/scene_debugger.cpp +++ b/scene/debugger/scene_debugger.cpp @@ -550,6 +550,13 @@ Error SceneDebugger::_msg_rq_screenshot(const Array &p_args) { } suffix_i += 1; } + img->convert(Image::FORMAT_RGBA8); +#ifdef RD_ENABLED + RenderingDevice *rendering_device = RD::get_singleton(); + if (rendering_device && RenderingServer::get_singleton()->viewport_is_using_hdr_2d(viewport->get_viewport_rid())) { + img->linear_to_srgb(); + } +#endif img->save_png(path); Array arr;