Merge pull request #116248 from KoBeWi/ReloadHD

Rework updating editor viewport HDR
This commit is contained in:
Thaddeus Crews 2026-02-26 16:18:39 -06:00
commit 77c66698e6
No known key found for this signature in database
GPG key ID: 8C6E5FEB5FC03CCC
10 changed files with 42 additions and 38 deletions

View file

@ -569,6 +569,24 @@ void EditorNode::_update_from_settings() {
tree->set_debug_collisions_color(GLOBAL_GET("debug/shapes/collision/shape_color"));
tree->set_debug_collision_contact_color(GLOBAL_GET("debug/shapes/collision/contact_color"));
if (ProjectSettings::get_singleton()->check_changed_settings_in_group("display/window/hdr/request_hdr_output") || ProjectSettings::get_singleton()->check_changed_settings_in_group("rendering/viewport/hdr_2d")) {
const bool use_hdr = GLOBAL_GET("display/window/hdr/request_hdr_output").operator bool() || GLOBAL_GET("rendering/viewport/hdr_2d").operator bool();
LocalVector<ObjectID> invalid_viewports;
for (const ObjectID &id : hdr_viewports) {
Viewport *vp = ObjectDB::get_instance<Viewport>(id);
if (vp) {
vp->set_use_hdr_2d(use_hdr);
} else {
invalid_viewports.push_back(id);
}
}
for (const ObjectID &id : invalid_viewports) {
hdr_viewports.erase(id);
}
}
ResourceImporterTexture::get_singleton()->update_imports();
_update_translations();
@ -4701,6 +4719,14 @@ void EditorNode::setup_color_picker(ColorPicker *p_picker) {
palette_file_selected_callback = callable_mp(p_picker, &ColorPicker::_quick_open_palette_file_selected);
}
void EditorNode::register_hdr_viewport(Viewport *p_viewport) {
const bool hdr_requested = GLOBAL_GET("display/window/hdr/request_hdr_output");
const bool hdr_2d_enabled = GLOBAL_GET("rendering/viewport/hdr_2d");
p_viewport->set_use_hdr_2d(hdr_2d_enabled || hdr_requested);
hdr_viewports.push_back(p_viewport->get_instance_id());
}
bool EditorNode::is_scene_open(const String &p_path) {
for (int i = 0; i < editor_data.get_edited_scene_count(); i++) {
if (editor_data.get_scene_path(i) == p_path) {

View file

@ -476,6 +476,7 @@ private:
HashSet<String> textfile_extensions;
HashSet<String> other_file_extensions;
HashSet<FileDialog *> file_dialogs;
LocalVector<ObjectID> hdr_viewports;
Vector<Ref<EditorResourceConversionPlugin>> resource_conversion_plugins;
PrintHandlerList print_handler;
@ -940,6 +941,7 @@ public:
bool is_multi_window_enabled() const;
void setup_color_picker(ColorPicker *p_picker);
void register_hdr_viewport(Viewport *p_viewport);
void request_instantiate_scene(const String &p_path);
void request_instantiate_scenes(const Vector<String> &p_files);

View file

@ -1995,14 +1995,7 @@ SceneImportSettingsDialog::SceneImportSettingsDialog() {
update_view_timer->connect("timeout", callable_mp(this, &SceneImportSettingsDialog::_update_view_gizmos));
add_child(update_view_timer);
ProjectSettings::get_singleton()->connect("settings_changed", callable_mp(this, &SceneImportSettingsDialog::_project_settings_changed));
_project_settings_changed();
}
void SceneImportSettingsDialog::_project_settings_changed() {
const bool hdr_requested = GLOBAL_GET("display/window/hdr/request_hdr_output");
const bool hdr_2d_enabled = GLOBAL_GET("rendering/viewport/hdr_2d");
base_viewport->set_use_hdr_2d(hdr_2d_enabled || hdr_requested);
EditorNode::get_singleton()->register_hdr_viewport(base_viewport);
}
SceneImportSettingsDialog::~SceneImportSettingsDialog() {

View file

@ -207,7 +207,6 @@ class SceneImportSettingsDialog : public ConfirmationDialog {
ResourceImporterScene *_resource_importer_scene = nullptr;
void _re_import();
void _project_settings_changed();
String base_path;

View file

@ -31,6 +31,7 @@
#include "camera_3d_editor_plugin.h"
#include "core/config/project_settings.h"
#include "editor/editor_node.h"
#include "node_3d_editor_plugin.h"
#include "scene/gui/aspect_ratio_container.h"
#include "scene/gui/foldable_container.h"
@ -116,16 +117,16 @@ Camera3DPreview::Camera3DPreview(Camera3D *p_camera) {
RenderingServer::get_singleton()->viewport_attach_camera(sub_viewport->get_viewport_rid(), camera->get_camera());
EditorNode::get_singleton()->register_hdr_viewport(sub_viewport);
ProjectSettings::get_singleton()->connect("settings_changed", callable_mp(this, &Camera3DPreview::_project_settings_changed));
_project_settings_changed();
_update_sub_viewport_size();
}
void Camera3DPreview::_project_settings_changed() {
_update_sub_viewport_size();
const bool hdr_requested = GLOBAL_GET("display/window/hdr/request_hdr_output");
const bool use_hdr_2d = GLOBAL_GET("rendering/viewport/hdr_2d");
sub_viewport->set_use_hdr_2d(use_hdr_2d || hdr_requested);
if (ProjectSettings::get_singleton()->check_changed_settings_in_group("display/window/size")) {
_update_sub_viewport_size();
}
}
bool EditorInspectorPluginCamera3DPreview::can_handle(Object *p_object) {

View file

@ -31,6 +31,7 @@
#include "mesh_editor_plugin.h"
#include "core/config/project_settings.h"
#include "editor/editor_node.h"
#include "editor/themes/editor_scale.h"
#include "scene/gui/button.h"
#include "scene/main/viewport.h"
@ -71,12 +72,6 @@ void MeshEditor::_update_rotation() {
rotation->set_transform(t);
}
void MeshEditor::_project_settings_changed() {
const bool hdr_requested = GLOBAL_GET("display/window/hdr/request_hdr_output");
const bool use_hdr_2d = GLOBAL_GET("rendering/viewport/hdr_2d");
viewport->set_use_hdr_2d(use_hdr_2d || hdr_requested);
}
void MeshEditor::edit(Ref<Mesh> p_mesh) {
mesh = p_mesh;
mesh_instance->set_mesh(mesh);
@ -170,8 +165,7 @@ MeshEditor::MeshEditor() {
rot_x = 0;
rot_y = 0;
ProjectSettings::get_singleton()->connect("settings_changed", callable_mp(this, &MeshEditor::_project_settings_changed));
_project_settings_changed();
EditorNode::get_singleton()->register_hdr_viewport(viewport);
}
///////////////////////

View file

@ -68,7 +68,6 @@ class MeshEditor : public SubViewportContainer {
void _on_light_1_switch_pressed();
void _on_light_2_switch_pressed();
void _update_rotation();
void _project_settings_changed();
protected:
virtual void _update_theme_item_cache() override;

View file

@ -3226,10 +3226,6 @@ void Node3DEditorViewport::_project_settings_changed() {
const bool transparent_background = GLOBAL_GET("rendering/viewport/transparent_background");
viewport->set_transparent_background(transparent_background);
const bool hdr_requested = GLOBAL_GET("display/window/hdr/request_hdr_output");
const bool use_hdr_2d = GLOBAL_GET("rendering/viewport/hdr_2d");
viewport->set_use_hdr_2d(use_hdr_2d || hdr_requested);
const bool use_debanding = GLOBAL_GET("rendering/anti_aliasing/quality/use_debanding");
viewport->set_use_debanding(use_debanding);
@ -6621,6 +6617,8 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, int p
view_type = VIEW_TYPE_USER;
_update_name();
EditorNode::get_singleton()->register_hdr_viewport(viewport);
}
Node3DEditorViewport::~Node3DEditorViewport() {

View file

@ -155,13 +155,6 @@ void MaterialEditor::_update_rotation() {
rotation->set_transform(t);
}
void MaterialEditor::_project_settings_changed() {
const bool hdr_requested = GLOBAL_GET("display/window/hdr/request_hdr_output");
const bool use_hdr_2d = GLOBAL_GET("rendering/viewport/hdr_2d");
viewport->set_use_hdr_2d(use_hdr_2d || hdr_requested);
viewport_2d->set_use_hdr_2d(use_hdr_2d || hdr_requested);
}
void MaterialEditor::edit(Ref<Material> p_material, const Ref<Environment> &p_env) {
material = p_material;
camera->set_environment(p_env);
@ -407,8 +400,8 @@ MaterialEditor::MaterialEditor() {
Vector2 stored_rot = EditorSettings::get_singleton()->get_project_metadata("inspector_options", "material_preview_rotation", Vector2());
_set_rotation(stored_rot.x, stored_rot.y);
ProjectSettings::get_singleton()->connect("settings_changed", callable_mp(this, &MaterialEditor::_project_settings_changed));
_project_settings_changed();
EditorNode::get_singleton()->register_hdr_viewport(viewport);
EditorNode::get_singleton()->register_hdr_viewport(viewport_2d);
}
///////////////////////

View file

@ -102,7 +102,6 @@ class MaterialEditor : public Control {
void _set_rotation(real_t p_x_degrees, real_t p_y_degrees);
void _store_rotation_metadata();
void _update_rotation();
void _project_settings_changed();
protected:
virtual void _update_theme_item_cache() override;