From 8c384444bc8ed16b85bfa42ce22d424a9a16c434 Mon Sep 17 00:00:00 2001 From: Panos Karabelas Date: Thu, 13 Jul 2023 16:06:59 +0100 Subject: [PATCH] [Editor] Moved editor ticking (including child windows) before engine ticking, this enliminates any latency between user input an on screen presentation --- editor/Editor.cpp | 74 ++++++++++++++------------- editor/WidgetsDeferred/FileDialog.cpp | 4 +- 2 files changed, 41 insertions(+), 37 deletions(-) diff --git a/editor/Editor.cpp b/editor/Editor.cpp index c1d1b50f0..6ff091f77 100644 --- a/editor/Editor.cpp +++ b/editor/Editor.cpp @@ -21,10 +21,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. //= INCLUDES ==================================== #include "Editor.h" -#include "Core/Event.h" #include "Core/Engine.h" #include "Core/Settings.h" -#include "Core/Window.h" #include "ImGui/ImGuiExtension.h" #include "ImGui/Implementation/ImGui_RHI.h" #include "ImGui/Implementation/imgui_impl_sdl2.h" @@ -39,7 +37,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "Widgets/ResourceViewer.h" #include "Widgets/Profiler.h" #include "Widgets/RenderOptions.h" -#include "Widgets/TextureViewer.h" //=============================================== //= NAMESPACES ===== @@ -235,50 +232,57 @@ void Editor::Tick() { bool render_editor = !Spartan::Window::IsFullScreen(); - // ImGui - Begin - if (render_editor) + // Editor { - ImGui_ImplSDL2_NewFrame(); - ImGui::NewFrame(); - } - - // Engine - Tick - Spartan::Engine::Tick(); - - // Editor - Tick/End - if (render_editor) - { - // Editor - Begin - BeginWindow(); + // Begin + if (render_editor) + { + ImGui_ImplSDL2_NewFrame(); + ImGui::NewFrame(); + } - // Editor - Tick - for (shared_ptr& widget : m_widgets) + // Tick + if (render_editor) { - widget->Tick(); + // Begin window + BeginWindow(); + + // Tick widgets + for (shared_ptr& widget : m_widgets) + { + widget->Tick(); + } + + // End window + if (m_editor_begun) + { + ImGui::End(); + } + + // Render + ImGui::Render(); + ImGui::RHI::Render(ImGui::GetDrawData()); } - // Editor - End - if (m_editor_begun) + // Child windows + if (render_editor && ImGui::GetIO().ConfigFlags & ImGuiConfigFlags_ViewportsEnable) { - ImGui::End(); + ImGui::UpdatePlatformWindows(); + ImGui::RenderPlatformWindowsDefault(); } - // ImGui - End/Render - ImGui::Render(); - ImGui::RHI::Render(ImGui::GetDrawData()); } - // Present - if (!Spartan::Window::IsMinimised()) + // Engine { - Spartan::Renderer::Present(); - } + // Tick + Spartan::Engine::Tick(); - // ImGui - Child windows - if (render_editor && ImGui::GetIO().ConfigFlags & ImGuiConfigFlags_ViewportsEnable) - { - ImGui::UpdatePlatformWindows(); - ImGui::RenderPlatformWindowsDefault(); + // Present + if (!Spartan::Window::IsMinimised()) + { + Spartan::Renderer::Present(); + } } } } diff --git a/editor/WidgetsDeferred/FileDialog.cpp b/editor/WidgetsDeferred/FileDialog.cpp index 18693fa5c..7c116bc27 100644 --- a/editor/WidgetsDeferred/FileDialog.cpp +++ b/editor/WidgetsDeferred/FileDialog.cpp @@ -124,9 +124,9 @@ void FileDialog::ShowTop(bool* is_visible, Editor* editor) { if (m_is_window) { - ImGui::SetNextWindowPos(editor->GetWidget()->GetCenter(), ImGuiCond_Always, ImVec2(0.5f, 0.5f)); + ImGui::SetNextWindowPos(editor->GetWidget()->GetCenter(), ImGuiCond_FirstUseEver, ImVec2(0.5f, 0.5f)); ImGui::SetNextWindowSizeConstraints(ImVec2(350, 250), ImVec2(FLT_MAX, FLT_MAX)); - ImGui::Begin(m_title.c_str(), is_visible, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoDocking); + ImGui::Begin(m_title.c_str(), is_visible, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoDocking); ImGui::SetWindowFocus(); }