diff options
Diffstat (limited to 'Source/Core/VideoCommon/RenderBase.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/RenderBase.cpp | 147 |
1 files changed, 126 insertions, 21 deletions
diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp index d0bf77e0db..92817805e3 100644 --- a/Source/Core/VideoCommon/RenderBase.cpp +++ b/Source/Core/VideoCommon/RenderBase.cpp @@ -34,7 +34,6 @@ #include "Core/Host.h" #include "Core/Movie.h" -#include "OnScreenDisplay.h" #include "VideoCommon/AVIDump.h" #include "VideoCommon/BPMemory.h" #include "VideoCommon/CPMemory.h" @@ -43,6 +42,7 @@ #include "VideoCommon/FPSCounter.h" #include "VideoCommon/FramebufferManagerBase.h" #include "VideoCommon/ImageWrite.h" +#include "VideoCommon/OnScreenDisplay.h" #include "VideoCommon/PostProcessing.h" #include "VideoCommon/RenderBase.h" #include "VideoCommon/Statistics.h" @@ -52,6 +52,8 @@ // TODO: Move these out of here. int frameCount; +int OSDChoice; +static int OSDTime; std::unique_ptr<Renderer> g_renderer; @@ -104,6 +106,9 @@ Renderer::Renderer() { UpdateActiveConfig(); TextureCacheBase::OnConfigChanged(g_ActiveConfig); + + OSDChoice = 0; + OSDTime = 0; } Renderer::~Renderer() @@ -305,46 +310,146 @@ void Renderer::SetScreenshot(const std::string& filename) s_bScreenshot = true; } +// Create On-Screen-Messages void Renderer::DrawDebugText() { - auto draw_text = [](OSD::MessageType type, const std::string& message) { - OSD::AddTypedMessage(type, message, OSD::Duration::SHORT, OSD::Color::CYAN); - }; - - if (g_ActiveConfig.bShowFPS) - { - draw_text(OSD::MessageType::FPS, - StringFromFormat("FPS: %u", g_renderer->m_fps_counter.GetFPS())); - } + std::string final_yellow, final_cyan; - if (SConfig::GetInstance().m_ShowFrameCount) + if (g_ActiveConfig.bShowFPS || SConfig::GetInstance().m_ShowFrameCount) { - draw_text(OSD::MessageType::FrameCount, - StringFromFormat("Frame: %" PRIu64, Movie::GetCurrentFrame())); + if (g_ActiveConfig.bShowFPS) + final_cyan += StringFromFormat("FPS: %u", g_renderer->m_fps_counter.GetFPS()); - if (Movie::IsPlayingInput()) + if (g_ActiveConfig.bShowFPS && SConfig::GetInstance().m_ShowFrameCount) + final_cyan += " - "; + if (SConfig::GetInstance().m_ShowFrameCount) { - draw_text(OSD::MessageType::MovieInputCount, - StringFromFormat("Input: %" PRIu64 " / %" PRIu64, Movie::GetCurrentInputCount(), - Movie::GetTotalInputCount())); + final_cyan += StringFromFormat("Frame: %llu", (unsigned long long)Movie::GetCurrentFrame()); + if (Movie::IsPlayingInput()) + final_cyan += StringFromFormat("\nInput: %llu / %llu", + (unsigned long long)Movie::GetCurrentInputCount(), + (unsigned long long)Movie::GetTotalInputCount()); } + + final_cyan += "\n"; + final_yellow += "\n"; } if (SConfig::GetInstance().m_ShowLag) { - draw_text(OSD::MessageType::MovieLag, - StringFromFormat("Lag: %" PRIu64, Movie::GetCurrentLagCount())); + final_cyan += StringFromFormat("Lag: %" PRIu64 "\n", Movie::GetCurrentLagCount()); + final_yellow += "\n"; } if (SConfig::GetInstance().m_ShowInputDisplay) { - draw_text(OSD::MessageType::MovieInput, Movie::GetInputDisplay()); + final_cyan += Movie::GetInputDisplay(); + final_yellow += "\n"; } if (SConfig::GetInstance().m_ShowRTC) { - draw_text(OSD::MessageType::RTC, Movie::GetRTCDisplay()); + final_cyan += Movie::GetRTCDisplay(); + final_yellow += "\n"; } + + // OSD Menu messages + if (OSDChoice > 0) + { + OSDTime = Common::Timer::GetTimeMs() + 3000; + OSDChoice = -OSDChoice; + } + + if ((u32)OSDTime > Common::Timer::GetTimeMs()) + { + std::string res_text; + switch (g_ActiveConfig.iEFBScale) + { + case SCALE_AUTO: + res_text = "Auto (fractional)"; + break; + case SCALE_AUTO_INTEGRAL: + res_text = "Auto (integral)"; + break; + case SCALE_1X: + res_text = "Native"; + break; + case SCALE_1_5X: + res_text = "1.5x"; + break; + case SCALE_2X: + res_text = "2x"; + break; + case SCALE_2_5X: + res_text = "2.5x"; + break; + default: + res_text = StringFromFormat("%dx", g_ActiveConfig.iEFBScale - 3); + break; + } + const char* ar_text = ""; + switch (g_ActiveConfig.iAspectRatio) + { + case ASPECT_AUTO: + ar_text = "Auto"; + break; + case ASPECT_STRETCH: + ar_text = "Stretch"; + break; + case ASPECT_ANALOG: + ar_text = "Force 4:3"; + break; + case ASPECT_ANALOG_WIDE: + ar_text = "Force 16:9"; + } + + const char* const efbcopy_text = g_ActiveConfig.bSkipEFBCopyToRam ? "to Texture" : "to RAM"; + + // The rows + const std::string lines[] = { + std::string("Internal Resolution: ") + res_text, + std::string("Aspect Ratio: ") + ar_text + (g_ActiveConfig.bCrop ? " (crop)" : ""), + std::string("Copy EFB: ") + efbcopy_text, + std::string("Fog: ") + (g_ActiveConfig.bDisableFog ? "Disabled" : "Enabled"), + SConfig::GetInstance().m_EmulationSpeed <= 0 ? + "Speed Limit: Unlimited" : + StringFromFormat("Speed Limit: %li%%", + std::lround(SConfig::GetInstance().m_EmulationSpeed * 100.f)), + }; + + enum + { + lines_count = sizeof(lines) / sizeof(*lines) + }; + + // The latest changed setting in yellow + for (int i = 0; i != lines_count; ++i) + { + if (OSDChoice == -i - 1) + final_yellow += lines[i]; + final_yellow += '\n'; + } + + // The other settings in cyan + for (int i = 0; i != lines_count; ++i) + { + if (OSDChoice != -i - 1) + final_cyan += lines[i]; + final_cyan += '\n'; + } + } + + final_cyan += Common::Profiler::ToString(); + + if (g_ActiveConfig.bOverlayStats) + final_cyan += Statistics::ToString(); + + if (g_ActiveConfig.bOverlayProjStats) + final_cyan += Statistics::ToStringProj(); + + // and then the text + g_renderer->RenderText(final_cyan, 20, 20, 0xFF00FFFF); + g_renderer->RenderText(final_yellow, 20, 20, 0xFFFFFF00); } void Renderer::UpdateDrawRectangle(int backbuffer_width, int backbuffer_height) |
