From a75833847eed497d65093761b397614c808eda6d Mon Sep 17 00:00:00 2001 From: Andrea Odetti Date: Sat, 13 Feb 2021 13:09:55 +0000 Subject: [PATCH] Add cmd line option to switch off vsync. Useful to profile. Signed-off-by: Andrea Odetti --- source/frontends/common2/programoptions.cpp | 2 ++ source/frontends/common2/programoptions.h | 1 + source/frontends/sdl/main.cpp | 17 +++++++++++------ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/source/frontends/common2/programoptions.cpp b/source/frontends/common2/programoptions.cpp index a6519f80..0670fd79 100644 --- a/source/frontends/common2/programoptions.cpp +++ b/source/frontends/common2/programoptions.cpp @@ -85,6 +85,7 @@ bool getEmulatorOptions(int argc, const char * argv [], const std::string & edit ("timer-interval,i", po::value()->default_value(options.timerInterval), "Timer interval in ms") ("loose-mutex,l", "Loose mutex") ("sdl-driver", po::value()->default_value(options.sdlDriver), "SDL driver") + ("gl-swap", po::value()->default_value(options.glSwapInterval), "SDL_GL_SwapInterval") ("imgui", "Render with Dear ImGui") ("size", po::value(), "WxH") ; @@ -114,6 +115,7 @@ bool getEmulatorOptions(int argc, const char * argv [], const std::string & edit options.looseMutex = vm.count("loose-mutex"); options.timerInterval = vm["timer-interval"].as(); options.sdlDriver = vm["sdl-driver"].as(); + options.glSwapInterval = vm["gl-swap"].as(); options.imgui = vm.count("imgui"); if (vm.count("config")) diff --git a/source/frontends/common2/programoptions.h b/source/frontends/common2/programoptions.h index 3eb912b7..f92ad526 100644 --- a/source/frontends/common2/programoptions.h +++ b/source/frontends/common2/programoptions.h @@ -38,6 +38,7 @@ struct EmulatorOptions int sdlDriver = -1; // default = -1 to let SDL choose bool imgui = false; // use imgui renderer std::pair size; // width x height + int glSwapInterval = 1; // SDL_GL_SetSwapInterval std::vector registryOptions; }; diff --git a/source/frontends/sdl/main.cpp b/source/frontends/sdl/main.cpp index 74bee6c3..1df98d76 100644 --- a/source/frontends/sdl/main.cpp +++ b/source/frontends/sdl/main.cpp @@ -105,6 +105,11 @@ void run_sdl(int argc, const char * argv []) frame.reset(new SDLRendererFrame(options)); #endif + if (SDL_GL_SetSwapInterval(options.glSwapInterval)) + { + throw std::runtime_error(SDL_GetError()); + } + SetFrame(frame); if (options.log) @@ -131,14 +136,14 @@ void run_sdl(int argc, const char * argv []) { // we need to switch off vsync, otherwise FPS is limited to 60 // and it will take longer to run - const int res = SDL_GL_SetSwapInterval(0); - // if this fails, should we throw, print something or just ignore? + if (SDL_GL_SetSwapInterval(0)) + { + throw std::runtime_error(SDL_GetError()); + } - const auto redraw = [&frame, res]{ + const auto redraw = [&frame]{ frame->UpdateTexture(); - if (res == 0) { - frame->RenderPresent(); - } + frame->RenderPresent(); }; const auto refresh = [redraw, &video]{