diff --git a/source/ps/CLogger.cpp b/source/ps/CLogger.cpp index de2752701a..53df2773e1 100644 --- a/source/ps/CLogger.cpp +++ b/source/ps/CLogger.cpp @@ -150,7 +150,7 @@ static std::string ToHTML(const wchar_t* message) return cmessage; } -void CLogger::WriteMessage(const wchar_t* message) +void CLogger::WriteMessage(const wchar_t* message, bool doRender = false) { std::string cmessage = ToHTML(message); @@ -163,8 +163,12 @@ void CLogger::WriteMessage(const wchar_t* message) *m_MainLog << "
" << cmessage << "
\n"; m_MainLog->flush(); - // Don't do this since it results in too much noise: -// PushRenderMessage(Normal, message); + if (doRender) + { + if (g_Console) g_Console->InsertMessage(L"INFO: %ls", message); + + PushRenderMessage(Normal, message); + } } void CLogger::WriteError(const wchar_t* message) @@ -254,6 +258,22 @@ void CLogger::LogMessage(const wchar_t* fmt, ...) WriteMessage(buffer); } +void CLogger::LogMessageRender(const wchar_t* fmt, ...) +{ + va_list argp; + wchar_t buffer[BUFFER_SIZE] = {0}; + + va_start(argp, fmt); + if (sys_vswprintf(buffer, ARRAY_SIZE(buffer), fmt, argp) == -1) + { + // Buffer too small - ensure the string is nicely terminated + wcscpy_s(buffer+ARRAY_SIZE(buffer)-4, 4, L"..."); + } + va_end(argp); + + WriteMessage(buffer, true); +} + void CLogger::LogWarning(const wchar_t* fmt, ...) { va_list argp; diff --git a/source/ps/CLogger.h b/source/ps/CLogger.h index ab8508631f..52cf864e8f 100644 --- a/source/ps/CLogger.h +++ b/source/ps/CLogger.h @@ -34,6 +34,7 @@ extern CLogger* g_Logger; // from all of the files. LOG_INFO, LOG_WARNING and LOG_ERROR are currently existing macros. #define LOGMESSAGE g_Logger->LogMessage +#define LOGMESSAGERENDER g_Logger->LogMessageRender #define LOGWARNING g_Logger->LogWarning #define LOGERROR g_Logger->LogError @@ -67,7 +68,7 @@ public: // Functions to write different message types (Errors and warnings are placed // both in mainLog and intrestingLog.) - void WriteMessage(const wchar_t* message); + void WriteMessage(const wchar_t* message, bool doRender); void WriteError (const wchar_t* message); void WriteWarning(const wchar_t* message); @@ -77,6 +78,7 @@ public: // Functions to write a message, warning or error to file. void LogMessage(const wchar_t* fmt, ...) WPRINTF_ARGS(2); + void LogMessageRender(const wchar_t* fmt, ...) WPRINTF_ARGS(2); void LogWarning(const wchar_t* fmt, ...) WPRINTF_ARGS(2); void LogError(const wchar_t* fmt, ...) WPRINTF_ARGS(2); diff --git a/source/ps/GameSetup/GameSetup.cpp b/source/ps/GameSetup/GameSetup.cpp index 9ccb694eef..43a231342d 100644 --- a/source/ps/GameSetup/GameSetup.cpp +++ b/source/ps/GameSetup/GameSetup.cpp @@ -113,6 +113,7 @@ ERROR_TYPE(System, RequiredExtensionsMissing); #define LOG_CATEGORY L"gamesetup" bool g_DoRenderGui = true; +bool g_DoRenderLogger = true; static const int SANE_TEX_QUALITY_DEFAULT = 5; // keep in sync with code @@ -258,7 +259,7 @@ void Render() ogl_WarnIfError(); PROFILE_START("render logger"); - g_Logger->Render(); + if(g_DoRenderLogger) g_Logger->Render(); PROFILE_END("render logger"); ogl_WarnIfError(); @@ -734,7 +735,7 @@ void EarlyInit() static bool Autostart(const CmdLineArgs& args); -void Init(const CmdLineArgs& args, int flags) +void Init(const CmdLineArgs& args, int UNUSED(flags)) { h_mgr_init(); @@ -878,6 +879,10 @@ void RenderGui(bool RenderingState) g_DoRenderGui = RenderingState; } +void RenderLogger(bool RenderingState) +{ + g_DoRenderLogger = RenderingState; +} static bool Autostart(const CmdLineArgs& args) { diff --git a/source/ps/GameSetup/GameSetup.h b/source/ps/GameSetup/GameSetup.h index 755d8a3e68..60073e8871 100644 --- a/source/ps/GameSetup/GameSetup.h +++ b/source/ps/GameSetup/GameSetup.h @@ -49,6 +49,7 @@ enum InitFlags * enable/disable rendering of the GUI (intended mainly for screenshots) */ extern void RenderGui(bool RenderingState); +extern void RenderLogger(bool RenderingState); class CmdLineArgs; extern void Init(const CmdLineArgs& args, int flags); diff --git a/source/ps/Util.cpp b/source/ps/Util.cpp index ad4763e0dd..1a1113fdfb 100644 --- a/source/ps/Util.cpp +++ b/source/ps/Util.cpp @@ -36,6 +36,7 @@ #include "ps/GameSetup/Config.h" #include "ps/GameSetup/GameSetup.h" #include "ps/Game.h" +#include "ps/CLogger.h" #include "ps/Filesystem.h" #include "ps/VideoMode.h" #include "renderer/Renderer.h" @@ -243,6 +244,11 @@ void WriteScreenshot(const std::wstring& extension) flags |= TEX_BGR; } + // Hide log messages and re-render + RenderLogger(false); + Render(); + RenderLogger(true); + const size_t img_size = w * h * bpp/8; const size_t hdr_size = tex_hdr_size(filename); shared_ptr