From 413ba4b4304473ddcb548f6c4078ec1baad2f794 Mon Sep 17 00:00:00 2001 From: Tyler Wilding Date: Mon, 2 Jul 2018 20:40:00 -0400 Subject: [PATCH] GSdx: implemented saving a snapshot to a dialog provided file path --- plugins/GSdx/GS.cpp | 12 +++++- plugins/GSdx/Renderers/Common/GSRenderer.cpp | 44 ++++++++++++-------- 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/plugins/GSdx/GS.cpp b/plugins/GSdx/GS.cpp index 193e632439..ea1b03800f 100644 --- a/plugins/GSdx/GS.cpp +++ b/plugins/GSdx/GS.cpp @@ -740,9 +740,17 @@ EXPORT_C_(uint32) GSmakeSnapshot(char* path) { std::string s{path}; - if(!s.empty() && s[s.length() - 1] != DIRECTORY_SEPARATOR) + if (!s.empty()) { - s = s + DIRECTORY_SEPARATOR; + // Facilitates Save As.. Feature + if (s.substr(s.size() - 4, 4) == ".bmp") + { + return s_gs->MakeSnapshot(s); + } + else if (s[s.length() - 1] != DIRECTORY_SEPARATOR) + { + s = s + DIRECTORY_SEPARATOR; + } } return s_gs->MakeSnapshot(s + "gsdx"); diff --git a/plugins/GSdx/Renderers/Common/GSRenderer.cpp b/plugins/GSdx/Renderers/Common/GSRenderer.cpp index 7d6a90fe53..07775d7ed7 100644 --- a/plugins/GSdx/Renderers/Common/GSRenderer.cpp +++ b/plugins/GSdx/Renderers/Common/GSRenderer.cpp @@ -501,27 +501,35 @@ bool GSRenderer::MakeSnapshot(const std::string& path) { if(m_snapshot.empty()) { - time_t cur_time = time(nullptr); - static time_t prev_snap; - // The variable 'n' is used for labelling the screenshots when multiple screenshots are taken in - // a single second, we'll start using this variable for naming when a second screenshot request is detected - // at the same time as the first one. Hence, we're initially setting this counter to 2 to imply that - // the captured image is the 2nd image captured at this specific time. - static int n = 2; - char local_time[16]; - - if (strftime(local_time, sizeof(local_time), "%Y%m%d%H%M%S", localtime(&cur_time))) + // Facilitates Save As.. Feature + if (path.substr(path.size() - 4, 4) == ".bmp") { - if (cur_time == prev_snap) + m_snapshot = path.substr(0, path.size() - 4); + } + else + { + time_t cur_time = time(nullptr); + static time_t prev_snap; + // The variable 'n' is used for labelling the screenshots when multiple screenshots are taken in + // a single second, we'll start using this variable for naming when a second screenshot request is detected + // at the same time as the first one. Hence, we're initially setting this counter to 2 to imply that + // the captured image is the 2nd image captured at this specific time. + static int n = 2; + char local_time[16]; + + if (strftime(local_time, sizeof(local_time), "%Y%m%d%H%M%S", localtime(&cur_time))) { - m_snapshot = format("%s_%s_(%d)", path.c_str(), local_time, n++); + if (cur_time == prev_snap) + { + m_snapshot = format("%s_%s_(%d)", path.c_str(), local_time, n++); + } + else + { + n = 2; + m_snapshot = format("%s_%s", path.c_str(), local_time); + } + prev_snap = cur_time; } - else - { - n = 2; - m_snapshot = format("%s_%s", path.c_str(), local_time); - } - prev_snap = cur_time; } }