Fix editor screenshots with HDR enabled.

This commit is contained in:
Pāvels Nadtočajevs
2026-04-27 23:02:09 +03:00
parent fd8c4ef3e9
commit 37de63d984
2 changed files with 21 additions and 0 deletions
+14
View File
@@ -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<Image> 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<Image> 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<Image> 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 + "'.");