Compare commits
No commits in common. "c0943bd084663d428e9b21fc30418f95a0c1e412" and "a8ab212931567dc49825f3d8697f8f12f32ed717" have entirely different histories.
c0943bd084
...
a8ab212931
5 changed files with 50 additions and 75 deletions
|
@ -18,7 +18,7 @@ set(CMAKE_CXX_STANDARD 14)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
set(SAVETOOL_PROJECT_VERSION 1.4.1)
|
set(SAVETOOL_PROJECT_VERSION 1.4.0)
|
||||||
|
|
||||||
find_package(Corrade REQUIRED Main Containers Utility)
|
find_package(Corrade REQUIRED Main Containers Utility)
|
||||||
find_package(Magnum REQUIRED GL Sdl2Application)
|
find_package(Magnum REQUIRED GL Sdl2Application)
|
||||||
|
|
|
@ -128,6 +128,15 @@ SaveTool::SaveTool(const Arguments& arguments):
|
||||||
|
|
||||||
initialiseConfiguration();
|
initialiseConfiguration();
|
||||||
|
|
||||||
|
switch(_framelimit) {
|
||||||
|
case Framelimit::Vsync:
|
||||||
|
setSwapInterval(1);
|
||||||
|
break;
|
||||||
|
case Framelimit::HalfVsync:
|
||||||
|
setSwapInterval(2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
LOG_INFO("Initialising update checker.");
|
LOG_INFO("Initialising update checker.");
|
||||||
curl_global_init(CURL_GLOBAL_DEFAULT);
|
curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||||
if(_checkUpdatesOnStartup) {
|
if(_checkUpdatesOnStartup) {
|
||||||
|
@ -145,8 +154,6 @@ SaveTool::SaveTool(const Arguments& arguments):
|
||||||
_uiState = UiState::Initialising;
|
_uiState = UiState::Initialising;
|
||||||
_initThread = std::thread{[this]{ initialiseManager(); }};
|
_initThread = std::thread{[this]{ initialiseManager(); }};
|
||||||
}
|
}
|
||||||
|
|
||||||
_timeline.start();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SaveTool::~SaveTool() {
|
SaveTool::~SaveTool() {
|
||||||
|
@ -163,8 +170,17 @@ SaveTool::~SaveTool() {
|
||||||
_conf.setValue("advanced_mode"_s, _advancedMode);
|
_conf.setValue("advanced_mode"_s, _advancedMode);
|
||||||
_conf.setValue("startup_update_check"_s, _checkUpdatesOnStartup);
|
_conf.setValue("startup_update_check"_s, _checkUpdatesOnStartup);
|
||||||
_conf.setValue("skip_disclaimer"_s, _skipDisclaimer);
|
_conf.setValue("skip_disclaimer"_s, _skipDisclaimer);
|
||||||
_conf.setValue("swap_interval"_s, _swapInterval);
|
|
||||||
_conf.setValue("fps_cap"_s, _fpsCap);
|
switch(_framelimit) {
|
||||||
|
case Framelimit::Vsync:
|
||||||
|
_conf.setValue("frame_limit"_s, "vsync"_s);
|
||||||
|
break;
|
||||||
|
case Framelimit::HalfVsync:
|
||||||
|
_conf.setValue("frame_limit"_s, "half_vsync"_s);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
_conf.setValue("frame_limit"_s, "vsync"_s);
|
||||||
|
}
|
||||||
|
|
||||||
_conf.save();
|
_conf.save();
|
||||||
|
|
||||||
|
@ -181,14 +197,7 @@ void SaveTool::drawEvent() {
|
||||||
drawImGui();
|
drawImGui();
|
||||||
|
|
||||||
swapBuffers();
|
swapBuffers();
|
||||||
|
|
||||||
if(_swapInterval == 0 && _fpsCap < 301.0f) {
|
|
||||||
while(_timeline.currentFrameDuration() < (1.0f / _fpsCap));
|
|
||||||
}
|
|
||||||
|
|
||||||
redraw();
|
redraw();
|
||||||
|
|
||||||
_timeline.nextFrame();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SaveTool::viewportEvent(ViewportEvent& event) {
|
void SaveTool::viewportEvent(ViewportEvent& event) {
|
||||||
|
|
|
@ -23,11 +23,7 @@
|
||||||
#include <Corrade/Containers/String.h>
|
#include <Corrade/Containers/String.h>
|
||||||
#include <Corrade/Utility/Configuration.h>
|
#include <Corrade/Utility/Configuration.h>
|
||||||
#include <Corrade/Utility/Resource.h>
|
#include <Corrade/Utility/Resource.h>
|
||||||
#ifdef SAVETOOL_DEBUG_BUILD
|
|
||||||
#include <Corrade/Utility/Tweakable.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <Magnum/Timeline.h>
|
|
||||||
#include <Magnum/Platform/Sdl2Application.h>
|
#include <Magnum/Platform/Sdl2Application.h>
|
||||||
#include <Magnum/ImGuiIntegration/Context.h>
|
#include <Magnum/ImGuiIntegration/Context.h>
|
||||||
|
|
||||||
|
@ -43,6 +39,8 @@
|
||||||
#include "../ToastQueue/ToastQueue.h"
|
#include "../ToastQueue/ToastQueue.h"
|
||||||
|
|
||||||
#ifdef SAVETOOL_DEBUG_BUILD
|
#ifdef SAVETOOL_DEBUG_BUILD
|
||||||
|
#include <Corrade/Utility/Tweakable.h>
|
||||||
|
|
||||||
#define tw CORRADE_TWEAKABLE
|
#define tw CORRADE_TWEAKABLE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -176,7 +174,7 @@ class SaveTool: public Platform::Sdl2Application, public efsw::FileWatchListener
|
||||||
// Also, func should be a lambda if there are any default arguments, like ImGui::Button(), etc...
|
// Also, func should be a lambda if there are any default arguments, like ImGui::Button(), etc...
|
||||||
|
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
void drawUnsafeText(const char* text, Args... args) { // Alternative to the above, for ImGui::Text*() variants.
|
void drawUnsafeText(Containers::StringView text, Args... args) { // Alternative to the above, for ImGui::Text*() variants.
|
||||||
if(_gameState != GameState::NotRunning) {
|
if(_gameState != GameState::NotRunning) {
|
||||||
ImGui::TextDisabled(text, std::forward<Args>(args)...);
|
ImGui::TextDisabled(text, std::forward<Args>(args)...);
|
||||||
}
|
}
|
||||||
|
@ -262,8 +260,10 @@ class SaveTool: public Platform::Sdl2Application, public efsw::FileWatchListener
|
||||||
};
|
};
|
||||||
Containers::StaticArray<2, efsw::WatchID> _watchIDs;
|
Containers::StaticArray<2, efsw::WatchID> _watchIDs;
|
||||||
|
|
||||||
int _swapInterval = 1;
|
enum class Framelimit: UnsignedByte {
|
||||||
float _fpsCap = 60.0f;
|
Vsync,
|
||||||
|
HalfVsync
|
||||||
|
} _framelimit{Framelimit::Vsync};
|
||||||
|
|
||||||
bool _skipDisclaimer{false};
|
bool _skipDisclaimer{false};
|
||||||
bool _checkUpdatesOnStartup{true};
|
bool _checkUpdatesOnStartup{true};
|
||||||
|
@ -292,6 +292,4 @@ class SaveTool: public Platform::Sdl2Application, public efsw::FileWatchListener
|
||||||
|
|
||||||
bool _cheatMode{false};
|
bool _cheatMode{false};
|
||||||
bool _advancedMode{false};
|
bool _advancedMode{false};
|
||||||
|
|
||||||
Timeline _timeline;
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -79,31 +79,17 @@ void SaveTool::initialiseConfiguration() {
|
||||||
_conf.setValue("skip_disclaimer"_s, _skipDisclaimer);
|
_conf.setValue("skip_disclaimer"_s, _skipDisclaimer);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_conf.hasValue("swap_interval"_s)) {
|
|
||||||
_swapInterval = _conf.value<int>("swap_interval"_s);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_conf.setValue("swap_interval"_s, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(_conf.hasValue("fps_cap"_s)) {
|
|
||||||
_fpsCap = _conf.value<float>("fps_cap");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_conf.setValue("fps_cap", 60.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(_conf.hasValue("frame_limit"_s)) {
|
if(_conf.hasValue("frame_limit"_s)) {
|
||||||
std::string frame_limit = _conf.value("frame_limit"_s);
|
std::string frame_limit = _conf.value("frame_limit"_s);
|
||||||
if(frame_limit == "half_vsync"_s) {
|
if(frame_limit == "half_vsync"_s) {
|
||||||
_swapInterval = 2;
|
_framelimit = Framelimit::HalfVsync;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_framelimit = Framelimit::Vsync;
|
||||||
}
|
}
|
||||||
_conf.removeValue("frame_limit"_s);
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
setSwapInterval(_swapInterval);
|
_conf.setValue("frame_limit"_s, "vsync"_s);
|
||||||
if(_swapInterval == 0) {
|
|
||||||
setMinimalLoopPeriod(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_conf.save();
|
_conf.save();
|
||||||
|
|
|
@ -55,49 +55,31 @@ void SaveTool::drawMainMenu() {
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
|
||||||
if(ImGui::BeginMenu(ICON_FA_COG " Settings")) {
|
if(ImGui::BeginMenu(ICON_FA_COG " Settings")) {
|
||||||
ImGui::BeginGroup();
|
drawAlignedText("Frame limiter:");
|
||||||
drawAlignedText("Vertical sync:");
|
|
||||||
if(_swapInterval == 0) {
|
|
||||||
drawAlignedText("FPS cap:");
|
|
||||||
}
|
|
||||||
ImGui::EndGroup();
|
|
||||||
|
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
|
|
||||||
ImGui::BeginGroup();
|
static auto selection = static_cast<UnsignedByte>(_framelimit);
|
||||||
|
static const char* framelimit_labels[2] = {
|
||||||
static const char* framelimit_labels[] = {
|
"V-sync",
|
||||||
"Off",
|
"Half V-sync"
|
||||||
"Every VBLANK",
|
|
||||||
"Every second VBLANK",
|
|
||||||
"Every third VBLANK",
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ImGui::PushItemWidth(300.0f);
|
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||||
|
if(ImGui::BeginCombo("##FrameLimit", framelimit_labels[selection])) {
|
||||||
if(ImGui::BeginCombo("##FrameLimit", framelimit_labels[_swapInterval])) {
|
if(ImGui::Selectable(framelimit_labels[0], _framelimit == Framelimit::Vsync)) {
|
||||||
for(int i = 0; i <= 3; i++) {
|
selection = 0;
|
||||||
if(ImGui::Selectable(framelimit_labels[i], _swapInterval == i)) {
|
_framelimit = Framelimit::Vsync;
|
||||||
_swapInterval = i;
|
setSwapInterval(1);
|
||||||
setSwapInterval(i);
|
}
|
||||||
if(i == 0) {
|
if(ImGui::Selectable(framelimit_labels[1], _framelimit == Framelimit::HalfVsync)) {
|
||||||
setMinimalLoopPeriod(0);
|
selection = 1;
|
||||||
}
|
_framelimit = Framelimit::HalfVsync;
|
||||||
}
|
setSwapInterval(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::EndCombo();
|
ImGui::EndCombo();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_swapInterval == 0) {
|
|
||||||
ImGui::SliderFloat("##FpsCapSlider", &_fpsCap, 15.0f, 301.0f,
|
|
||||||
_fpsCap != 301.0f ? "%.0f" : "Uncapped", ImGuiSliderFlags_AlwaysClamp);
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGui::PopItemWidth();
|
|
||||||
|
|
||||||
ImGui::EndGroup();
|
|
||||||
|
|
||||||
ImGui::Checkbox("Cheat mode", &_cheatMode);
|
ImGui::Checkbox("Cheat mode", &_cheatMode);
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::AlignTextToFramePadding();
|
ImGui::AlignTextToFramePadding();
|
||||||
|
|
Loading…
Reference in a new issue