From 2893090a502f9601ff271faa6f22b0d0df4cff30 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Wed, 2 Mar 2022 22:16:13 +0100 Subject: [PATCH] Color 3D editor FPS label depending on the performance level This provides easier visual grepping. Incindentally, this change will force constant editor redrawing whenever the View FPS option is enabled in the 3D viewport settings. This is required to get an accurate FPS display in 3.x. Otherwise, the FPS counter shot all the way up to 145 FPS whenever nothing was changing on screen (even if actual performance was much lower). --- editor/plugins/spatial_editor_plugin.cpp | 23 +++++++++++++++++++---- editor/plugins/spatial_editor_plugin.h | 2 ++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/editor/plugins/spatial_editor_plugin.cpp b/editor/plugins/spatial_editor_plugin.cpp index b7aa846b234..ab64430363c 100644 --- a/editor/plugins/spatial_editor_plugin.cpp +++ b/editor/plugins/spatial_editor_plugin.cpp @@ -2686,10 +2686,13 @@ void SpatialEditorViewport::_notification(int p_what) { fps_label->set_visible(show_fps); if (show_fps) { - String text; - const float temp_fps = Engine::get_singleton()->get_frames_per_second(); - text += vformat(TTR("FPS: %d (%s ms)"), temp_fps, rtos(1000.0f / temp_fps).pad_decimals(2)); - fps_label->set_text(text); + const float fps = Engine::get_singleton()->get_frames_per_second(); + fps_label->set_text(vformat(TTR("FPS: %d (%s ms)"), fps, rtos(1000.0f / fps).pad_decimals(2))); + // Middle point is at 60 FPS. + fps_label->add_color_override( + "font_color", + frame_time_gradient->get_color_at_offset( + Math::range_lerp(fps, 110, 10, 0, 1))); } bool show_cinema = view_menu->get_popup()->is_item_checked(view_menu->get_popup()->get_item_index(VIEW_CINEMATIC_PREVIEW)); @@ -2747,6 +2750,10 @@ void SpatialEditorViewport::_notification(int p_what) { fps_label->add_style_override("normal", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); cinema_label->add_style_override("normal", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); locked_label->add_style_override("normal", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); + + frame_time_gradient->set_color(0, get_color("success_color", "Editor")); + frame_time_gradient->set_color(1, get_color("warning_color", "Editor")); + frame_time_gradient->set_color(2, get_color("error_color", "Editor")); } } @@ -4186,6 +4193,10 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed rotation_control->set_viewport(this); top_right_vbox->add_child(rotation_control); + frame_time_gradient = memnew(Gradient); + // The color is set when the theme changes. + frame_time_gradient->add_point(0.5, Color()); + fps_label = memnew(Label); fps_label->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_END, -90 * EDSCALE); fps_label->set_anchor_and_margin(MARGIN_TOP, ANCHOR_BEGIN, 10 * EDSCALE); @@ -4220,6 +4231,10 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed EditorSettings::get_singleton()->connect("settings_changed", this, "update_transform_gizmo_view"); } +SpatialEditorViewport::~SpatialEditorViewport() { + memdelete(frame_time_gradient); +} + ////////////////////////////////////////////////////////////// void SpatialEditorViewportContainer::_gui_input(const Ref &p_event) { diff --git a/editor/plugins/spatial_editor_plugin.h b/editor/plugins/spatial_editor_plugin.h index 41954aacb4f..310bede2389 100644 --- a/editor/plugins/spatial_editor_plugin.h +++ b/editor/plugins/spatial_editor_plugin.h @@ -285,6 +285,7 @@ private: VBoxContainer *top_right_vbox; ViewportRotationControl *rotation_control; + Gradient *frame_time_gradient; Label *fps_label; struct _RayResult { @@ -487,6 +488,7 @@ public: Camera *get_camera() { return camera; } // return the default camera object. SpatialEditorViewport(SpatialEditor *p_spatial_editor, EditorNode *p_editor, int p_index); + ~SpatialEditorViewport(); }; class SpatialEditorSelectedItem : public Object {