diff options
| author | Stenzek <stenzek@gmail.com> | 2017-03-04 16:42:35 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2017-03-04 16:53:16 +1000 |
| commit | 459a5ab554af24c8e2c1978d02444bac5aa85e3f (patch) | |
| tree | c6f50463674e8d629bec3d3abd0422167d11b41f /Source/Core/VideoCommon | |
| parent | 811eafda576dd38a4bbff779d078762dbb3bd8b4 (diff) | |
Android: Move screenshot waiting logic to Renderer
Diffstat (limited to 'Source/Core/VideoCommon')
| -rw-r--r-- | Source/Core/VideoCommon/RenderBase.cpp | 19 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/RenderBase.h | 5 |
2 files changed, 16 insertions, 8 deletions
diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp index 990f01d53d..7e598e2373 100644 --- a/Source/Core/VideoCommon/RenderBase.cpp +++ b/Source/Core/VideoCommon/RenderBase.cpp @@ -276,11 +276,20 @@ void Renderer::ConvertStereoRectangle(const TargetRectangle& rc, TargetRectangle } } -void Renderer::SetScreenshot(const std::string& filename) +void Renderer::SaveScreenshot(const std::string& filename, bool wait_for_completion) { - std::lock_guard<std::mutex> lk(m_screenshot_lock); - m_screenshot_name = filename; - m_screenshot_request.Set(); + // We must not hold the lock while waiting for the screenshot to complete. + { + std::lock_guard<std::mutex> lk(m_screenshot_lock); + m_screenshot_name = filename; + m_screenshot_request.Set(); + } + + if (wait_for_completion) + { + // This is currently only used by Android, and it was using a wait time of 2 seconds. + m_screenshot_completed.WaitFor(std::chrono::seconds(2)); + } } // Create On-Screen-Messages @@ -814,7 +823,7 @@ void Renderer::RunFrameDumps() // Reset settings m_screenshot_name.clear(); - s_screenshot_completed.Set(); + m_screenshot_completed.Set(); } if (SConfig::GetInstance().m_DumpFrames) diff --git a/Source/Core/VideoCommon/RenderBase.h b/Source/Core/VideoCommon/RenderBase.h index a8323c27a2..79c174e28c 100644 --- a/Source/Core/VideoCommon/RenderBase.h +++ b/Source/Core/VideoCommon/RenderBase.h @@ -111,7 +111,7 @@ public: float EFBToScaledXf(float x) { return x * ((float)GetTargetWidth() / (float)EFB_WIDTH); } float EFBToScaledYf(float y) { return y * ((float)GetTargetHeight() / (float)EFB_HEIGHT); } // Random utilities - void SetScreenshot(const std::string& filename); + void SaveScreenshot(const std::string& filename, bool wait_for_completion); void DrawDebugText(); virtual void RenderText(const std::string& text, int left, int top, u32 color) = 0; @@ -140,8 +140,6 @@ public: // Max height/width virtual u32 GetMaxTextureSize() = 0; - Common::Event s_screenshot_completed; - // Final surface changing // This is called when the surface is resized (WX) or the window changes (Android). virtual void ChangeSurface(void* new_surface_handle) {} @@ -158,6 +156,7 @@ protected: void FinishFrameData(); Common::Flag m_screenshot_request; + Common::Event m_screenshot_completed; std::mutex m_screenshot_lock; std::string m_screenshot_name; |
