From 74b5fb3ab4b066681336d1be44c7eecfcf6a4dc6 Mon Sep 17 00:00:00 2001 From: comex Date: Sat, 2 Nov 2013 22:42:46 -0400 Subject: [PATCH] Actually, filename really does need to be a parameter because of some random debug thing. --- Source/Core/VideoBackends/D3D/Src/Render.cpp | 7 ++++--- Source/Core/VideoBackends/D3D/Src/Render.h | 2 +- Source/Core/VideoBackends/OGL/Src/Render.cpp | 7 ++++--- Source/Core/VideoBackends/OGL/Src/Render.h | 2 +- Source/Core/VideoBackends/OGL/Src/VertexManager.cpp | 2 +- Source/Core/VideoCommon/Src/RenderBase.cpp | 7 +++---- Source/Core/VideoCommon/Src/RenderBase.h | 2 +- 7 files changed, 15 insertions(+), 14 deletions(-) diff --git a/Source/Core/VideoBackends/D3D/Src/Render.cpp b/Source/Core/VideoBackends/D3D/Src/Render.cpp index e0f9aa7230..eb2f54387f 100644 --- a/Source/Core/VideoBackends/D3D/Src/Render.cpp +++ b/Source/Core/VideoBackends/D3D/Src/Render.cpp @@ -680,7 +680,7 @@ void Renderer::SetBlendMode(bool forceUpdate) } } -void Renderer::TakeScreenshot(const TargetRectangle &rc) +void Renderer::TakeScreenshot(const TargetRectangle &rc, std::string filename) { if (!s_screenshot_texture) CreateScreenshotTexture(rc); @@ -708,7 +708,7 @@ void Renderer::TakeScreenshot(const TargetRectangle &rc) } D3D::context->Unmap(s_screenshot_texture, 0); - SaveScreenshot(dest, rc.GetWidth(), rc.GetHeight()); + SaveScreenshot(dest, rc.GetWidth(), rc.GetHeight(), filename); } void formatBufferDump(const u8* in, u8* out, int w, int h, int p) @@ -846,7 +846,8 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangle& r // done with drawing the game stuff, good moment to save a screenshot if (s_bScreenshot) { - TakeScreenshot(GetTargetRectangle()); + TakeScreenshot(GetTargetRectangle(), s_sScreenshotName); + s_bScreenshot = false; } // Dump frames diff --git a/Source/Core/VideoBackends/D3D/Src/Render.h b/Source/Core/VideoBackends/D3D/Src/Render.h index 0d5a569eaf..e899484111 100644 --- a/Source/Core/VideoBackends/D3D/Src/Render.h +++ b/Source/Core/VideoBackends/D3D/Src/Render.h @@ -48,7 +48,7 @@ public: void UpdateViewport(); - static void TakeScreenshot(const TargetRectangle &rc); + static void TakeScreenshot(const TargetRectangle &rc, std::string filename); static bool CheckForResize(); diff --git a/Source/Core/VideoBackends/OGL/Src/Render.cpp b/Source/Core/VideoBackends/OGL/Src/Render.cpp index 9cae3b337a..537e04a25e 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Src/Render.cpp @@ -1378,7 +1378,8 @@ void Renderer::Swap(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangle& r // Save screenshot if (s_bScreenshot) { - TakeScreenshot(flipped_trc); + TakeScreenshot(flipped_trc, s_sScreenshotName); + s_bScreenshot = false; // Reset settings } @@ -1772,7 +1773,7 @@ void Renderer::FlipImageData(u8 *data, int w, int h) } } -void Renderer::TakeScreenshot(const TargetRectangle &back_rc) +void Renderer::TakeScreenshot(const TargetRectangle &back_rc, std::string filename) { u32 W = back_rc.GetWidth(); u32 H = back_rc.GetHeight(); @@ -1792,7 +1793,7 @@ void Renderer::TakeScreenshot(const TargetRectangle &back_rc) // Turn image upside down FlipImageData(data, W, H); - SaveScreenshot(data, W, H); + SaveScreenshot(data, W, H, filename); } } diff --git a/Source/Core/VideoBackends/OGL/Src/Render.h b/Source/Core/VideoBackends/OGL/Src/Render.h index f0ddbb8862..96a001eca4 100644 --- a/Source/Core/VideoBackends/OGL/Src/Render.h +++ b/Source/Core/VideoBackends/OGL/Src/Render.h @@ -80,7 +80,7 @@ public: void UpdateViewport(); - static void TakeScreenshot(const TargetRectangle &rc); + static void TakeScreenshot(const TargetRectangle &rc, std::string filename); private: void UpdateEFBCache(EFBAccessType type, u32 cacheRectIdx, const EFBRectangle& efbPixelRc, const TargetRectangle& targetPixelRc, const u32* data); diff --git a/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp b/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp index 620df0c161..4b2e3cb4c0 100644 --- a/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp +++ b/Source/Core/VideoBackends/OGL/Src/VertexManager.cpp @@ -341,7 +341,7 @@ void VertexManager::vFlush() tr.right = Renderer::GetTargetWidth(); tr.top = 0; tr.bottom = Renderer::GetTargetHeight(); - g_renderer->SaveScreenshot(str, tr); + static_cast(g_renderer)->TakeScreenshot(tr, str); } #endif g_Config.iSaveTargetId++; diff --git a/Source/Core/VideoCommon/Src/RenderBase.cpp b/Source/Core/VideoCommon/Src/RenderBase.cpp index c969885bdd..bb3dad8a73 100644 --- a/Source/Core/VideoCommon/Src/RenderBase.cpp +++ b/Source/Core/VideoCommon/Src/RenderBase.cpp @@ -294,13 +294,13 @@ void Renderer::SaveScreenshotOnThread(u8* data, size_t width, size_t height, std } #endif -void Renderer::SaveScreenshot(u8* ptr, size_t width, size_t height) +void Renderer::SaveScreenshot(u8* ptr, size_t width, size_t height, std::string filename) { std::lock_guard lk(s_criticalScreenshot); #if defined(HAVE_WX) && HAVE_WX // Create wxImage - std::thread thread(SaveScreenshotOnThread, ptr, width, height, s_sScreenshotName); + std::thread thread(SaveScreenshotOnThread, ptr, width, height, filename); #ifdef _WIN32 SetThreadPriority(thread.native_handle(), THREAD_PRIORITY_BELOW_NORMAL); #endif @@ -309,11 +309,10 @@ void Renderer::SaveScreenshot(u8* ptr, size_t width, size_t height) OSD::AddMessage("Saving Screenshot... ", 2000); #else - SaveTGA(s_sScreenshotName.c_str(), width, height, ptr); + SaveTGA(filename.c_str(), width, height, ptr); free(ptr); #endif - s_sScreenshotName.clear(); s_bScreenshot = false; } diff --git a/Source/Core/VideoCommon/Src/RenderBase.h b/Source/Core/VideoCommon/Src/RenderBase.h index 22f5df0cd7..7a153fb5cc 100644 --- a/Source/Core/VideoCommon/Src/RenderBase.h +++ b/Source/Core/VideoCommon/Src/RenderBase.h @@ -124,7 +124,7 @@ protected: #if defined(HAVE_WX) && HAVE_WX static void SaveScreenshotOnThread(u8* data, size_t width, size_t height, std::string filename); #endif - static void SaveScreenshot(u8* ptr, size_t width, size_t height); + static void SaveScreenshot(u8* ptr, size_t width, size_t height, std::string filename); static volatile bool s_bScreenshot; static std::mutex s_criticalScreenshot;