From 7e36195f44f8a3ef3fdf3c450794eeb44cb8b47c Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Sat, 21 Mar 2020 23:05:04 +1000 Subject: [PATCH] HostInterface: Enable on-screen FPS/VPS/Speed display via config --- src/core/host_interface.cpp | 30 ++++++++++++++++------ src/core/host_interface.h | 1 + src/core/settings.cpp | 8 ++++++ src/core/settings.h | 4 +++ src/duckstation-qt/qthostinterface.cpp | 3 +-- src/duckstation-sdl/sdl_host_interface.cpp | 12 ++++----- src/duckstation-sdl/sdl_host_interface.h | 2 +- 7 files changed, 42 insertions(+), 18 deletions(-) diff --git a/src/core/host_interface.cpp b/src/core/host_interface.cpp index 9722c2c13..bd59754b7 100644 --- a/src/core/host_interface.cpp +++ b/src/core/host_interface.cpp @@ -207,13 +207,20 @@ bool HostInterface::ConfirmFormattedMessage(const char* format, ...) return ConfirmMessage(message.c_str()); } +void HostInterface::DrawImGuiWindows() +{ + if (m_system) + { + DrawDebugWindows(); + DrawFPSWindow(); + } + + DrawOSDMessages(); +} + void HostInterface::DrawFPSWindow() { - const bool show_fps = true; - const bool show_vps = true; - const bool show_speed = true; - - if (!(show_fps | show_vps | show_speed) || !m_system) + if (!(m_settings.display_show_fps | m_settings.display_show_vps | m_settings.display_show_speed)) return; const ImVec2 window_size = @@ -231,12 +238,12 @@ void HostInterface::DrawFPSWindow() } bool first = true; - if (show_fps) + if (m_settings.display_show_fps) { ImGui::Text("%.2f", m_system->GetFPS()); first = false; } - if (show_vps) + if (m_settings.display_show_vps) { if (first) { @@ -251,7 +258,7 @@ void HostInterface::DrawFPSWindow() ImGui::Text("%.2f", m_system->GetVPS()); } - if (show_speed) + if (m_settings.display_show_speed) { if (first) { @@ -330,6 +337,9 @@ void HostInterface::DrawOSDMessages() continue; } + if (!m_settings.display_show_osd_messages) + continue; + const float opacity = std::min(time_remaining, 1.0f); ImGui::SetNextWindowPos(ImVec2(position_x, position_y)); ImGui::SetNextWindowSize(ImVec2(0.0f, 0.0f)); @@ -861,6 +871,10 @@ void HostInterface::SetDefaultSettings(SettingsInterface& si) si.SetStringValue("Display", "CropMode", "Overscan"); si.SetBoolValue("Display", "ForceProgressiveScan", true); si.SetBoolValue("Display", "LinearFiltering", true); + si.SetBoolValue("Display", "ShowOSDMessages", true); + si.SetBoolValue("Display", "ShowFPS", false); + si.SetBoolValue("Display", "ShowVPS", false); + si.SetBoolValue("Display", "ShowSpeed", false); si.SetBoolValue("Display", "Fullscreen", false); si.SetBoolValue("Display", "VSync", true); diff --git a/src/core/host_interface.h b/src/core/host_interface.h index 93467c015..f7eccffb9 100644 --- a/src/core/host_interface.h +++ b/src/core/host_interface.h @@ -147,6 +147,7 @@ protected: virtual void OnSystemStateSaved(bool global, s32 slot); virtual void OnRunningGameChanged(); virtual void OnControllerTypeChanged(u32 slot); + virtual void DrawImGuiWindows(); void SetUserDirectory(); diff --git a/src/core/settings.cpp b/src/core/settings.cpp index 757e23f96..54b30bfb1 100644 --- a/src/core/settings.cpp +++ b/src/core/settings.cpp @@ -33,6 +33,10 @@ void Settings::Load(SettingsInterface& si) .value_or(DisplayCropMode::None); display_force_progressive_scan = si.GetBoolValue("Display", "ForceProgressiveScan", true); display_linear_filtering = si.GetBoolValue("Display", "LinearFiltering", true); + display_show_osd_messages = si.GetBoolValue("Display", "ShowOSDMessages", true); + display_show_fps = si.GetBoolValue("Display", "ShowFPS", false); + display_show_vps = si.GetBoolValue("Display", "ShowVPS", false); + display_show_speed = si.GetBoolValue("Display", "ShowSpeed", false); video_sync_enabled = si.GetBoolValue("Display", "VSync", true); cdrom_read_thread = si.GetBoolValue("CDROM", "ReadThread", true); @@ -87,6 +91,10 @@ void Settings::Save(SettingsInterface& si) const si.SetBoolValue("Display", "ForceProgressiveScan", display_force_progressive_scan); si.SetBoolValue("Display", "LinearFiltering", display_linear_filtering); + si.SetBoolValue("Display", "ShowOSDMessages", display_show_osd_messages); + si.SetBoolValue("Display", "ShowFPS", display_show_fps); + si.SetBoolValue("Display", "ShowVPS", display_show_vps); + si.SetBoolValue("Display", "ShowSpeed", display_show_speed); si.SetBoolValue("Display", "VSync", video_sync_enabled); si.SetBoolValue("CDROM", "ReadThread", cdrom_read_thread); diff --git a/src/core/settings.h b/src/core/settings.h index 04b6e704d..f60036fb0 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -54,6 +54,10 @@ struct Settings DisplayCropMode display_crop_mode = DisplayCropMode::None; bool display_force_progressive_scan = false; bool display_linear_filtering = true; + bool display_show_osd_messages = false; + bool display_show_fps = false; + bool display_show_vps = false; + bool display_show_speed = false; bool video_sync_enabled = true; bool cdrom_read_thread = true; diff --git a/src/duckstation-qt/qthostinterface.cpp b/src/duckstation-qt/qthostinterface.cpp index 33dd8eb64..109637723 100644 --- a/src/duckstation-qt/qthostinterface.cpp +++ b/src/duckstation-qt/qthostinterface.cpp @@ -741,8 +741,7 @@ void QtHostInterface::renderDisplay() { m_system->GetGPU()->ResetGraphicsAPIState(); - DrawDebugWindows(); - DrawOSDMessages(); + DrawImGuiWindows(); m_display->Render(); diff --git a/src/duckstation-sdl/sdl_host_interface.cpp b/src/duckstation-sdl/sdl_host_interface.cpp index ceb5ef3ce..8c9745610 100644 --- a/src/duckstation-sdl/sdl_host_interface.cpp +++ b/src/duckstation-sdl/sdl_host_interface.cpp @@ -613,13 +613,13 @@ bool SDLHostInterface::HandleSDLKeyEventForController(const SDL_Event* event) return false; } -void SDLHostInterface::DrawImGui() +void SDLHostInterface::DrawImGuiWindows() { DrawMainMenuBar(); - if (m_system) - DrawDebugWindows(); - else + HostInterface::DrawImGuiWindows(); + + if (!m_system) DrawPoweredOffWindow(); if (m_settings_window_open) @@ -628,8 +628,6 @@ void SDLHostInterface::DrawImGui() if (m_about_window_open) DrawAboutWindow(); - DrawOSDMessages(); - ImGui::Render(); } @@ -1430,7 +1428,7 @@ void SDLHostInterface::Run() // rendering { - DrawImGui(); + DrawImGuiWindows(); if (m_system) m_system->GetGPU()->ResetGraphicsAPIState(); diff --git a/src/duckstation-sdl/sdl_host_interface.h b/src/duckstation-sdl/sdl_host_interface.h index 2cd47e0c3..8376237b9 100644 --- a/src/duckstation-sdl/sdl_host_interface.h +++ b/src/duckstation-sdl/sdl_host_interface.h @@ -98,7 +98,7 @@ private: void SetFullscreen(bool enabled); // We only pass mouse input through if it's grabbed - void DrawImGui(); + void DrawImGuiWindows() override; void DoStartDisc(); void DoChangeDisc(); void DoFrameStep();