diff --git a/apps/OpenSpace/main.cpp b/apps/OpenSpace/main.cpp index 3f66512e83..ec1d62ec3f 100644 --- a/apps/OpenSpace/main.cpp +++ b/apps/OpenSpace/main.cpp @@ -925,6 +925,9 @@ void setSgctDelegateFunctions() { return currentWindow->swapGroupFrameNumber(); }; + sgctDelegate.setScreenshotFolder = [](std::string path) { + Settings::instance().setCapturePath(std::move(path)); + }; } void checkCommandLineForSettings(int& argc, char** argv, bool& hasSGCT, bool& hasProfile, diff --git a/include/openspace/engine/windowdelegate.h b/include/openspace/engine/windowdelegate.h index 0fd27ba589..b5b978c8dc 100644 --- a/include/openspace/engine/windowdelegate.h +++ b/include/openspace/engine/windowdelegate.h @@ -100,6 +100,8 @@ struct WindowDelegate { Frustum (*frustumMode)() = []() { return Frustum::Mono; }; uint64_t (*swapGroupFrameNumber)() = []() { return uint64_t(0); }; + + void (*setScreenshotFolder)(std::string) = [](std::string) {}; }; } // namespace openspace diff --git a/src/engine/openspaceengine.cpp b/src/engine/openspaceengine.cpp index 61442d56c8..edb6de88f3 100644 --- a/src/engine/openspaceengine.cpp +++ b/src/engine/openspaceengine.cpp @@ -1522,6 +1522,13 @@ scripting::LuaLibrary OpenSpaceEngine::luaLibrary() { "", "Remove all registered virtual properties" }, + { + "setScreenshotFolder", + &luascriptfunctions::setScreenshotFolder, + {}, + "string", + "Sets the folder used for storing screenshots or session recording frames" + }, { "addTag", &luascriptfunctions::addTag, diff --git a/src/engine/openspaceengine_lua.inl b/src/engine/openspaceengine_lua.inl index f92dad961b..e9e647296c 100644 --- a/src/engine/openspaceengine_lua.inl +++ b/src/engine/openspaceengine_lua.inl @@ -27,6 +27,7 @@ #include #include #include +#include namespace openspace::luascriptfunctions { @@ -182,6 +183,27 @@ int removeAllVirtualProperties(lua_State* L) { return 0; } +int setScreenshotFolder(lua_State* L) { + ghoul::lua::checkArgumentsAndThrow(L, 1, "lua::setScreenshotFolder"); + + std::string arg = ghoul::lua::value(L); + lua_pop(L, 0); + + std::string folder = FileSys.absolutePath(arg); + if (!std::filesystem::exists(folder)) { + std::filesystem::create_directory(folder); + } + + FileSys.registerPathToken( + "${SCREENSHOTS}", + folder, + ghoul::filesystem::FileSystem::Override::Yes + ); + + global::windowDelegate->setScreenshotFolder(folder); + return 0; +} + /** * \ingroup LuaScripts * addTag()