Take screenshots with savestates.

This commit is contained in:
Unknown W. Brackets committed 2014-12-20 23:14:46 -08:00
1 parent b1c9e7382f
commit 2dd9b10c8d
8 files changed
+181 -80

No files matched your search

+14
View File
@@ -29,6 +29,7 @@
#include "Core/Core.h"
#include "Core/CoreTiming.h"
#include "Core/Host.h"
#include "Core/Screenshot.h"
#include "Core/System.h"
#include "Core/FileSystems/MetaFileSystem.h"
#include "Core/ELF/ParamSFO.h"
@@ -55,6 +56,7 @@ namespace SaveState
SAVESTATE_LOAD,
SAVESTATE_VERIFY,
SAVESTATE_REWIND,
SAVESTATE_SAVE_SCREENSHOT,
};
struct Operation
@@ -276,6 +278,11 @@ namespace SaveState
Enqueue(Operation(SAVESTATE_REWIND, std::string(""), callback, cbUserData));
}
void SaveScreenshot(const std::string &filename, Callback callback, void *cbUserData)
{
Enqueue(Operation(SAVESTATE_SAVE_SCREENSHOT, filename, callback, cbUserData));
}
bool CanRewind()
{
return !rewindStates.Empty();
@@ -326,6 +333,7 @@ namespace SaveState
void SaveSlot(int slot, Callback callback, void *cbUserData)
{
std::string fn = GenerateSaveSlotFilename(slot, STATE_EXTENSION);
std::string shot = GenerateSaveSlotFilename(slot, SCREENSHOT_EXTENSION);
if (!fn.empty()) {
auto renameCallback = [=](bool status, void *data) {
if (status) {
@@ -338,6 +346,8 @@ namespace SaveState
callback(status, data);
}
};
// Let's also create a screenshot.
SaveScreenshot(shot, nullptr, 0);
Save(fn + ".tmp", renameCallback, cbUserData);
} else {
I18NCategory *s = GetI18NCategory("Screen");
@@ -552,6 +562,10 @@ namespace SaveState
}
break;
case SAVESTATE_SAVE_SCREENSHOT:
TakeGameScreenshot(op.filename.c_str(), SCREENSHOT_JPG, SCREENSHOT_RENDER);
break;
default:
ERROR_LOG(COMMON, "Savestate failure: unknown operation type %d", op.type);
callbackResult = false;