summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/RenderBase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoCommon/RenderBase.cpp')
-rw-r--r--Source/Core/VideoCommon/RenderBase.cpp147
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)