diff --git a/CHANGES b/CHANGES index 035e9ae8c..af0702264 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,7 @@ Features: - Custom border support - New option to lock the maximum frame size - Memory access and information logging + - 3DS: Add faster "loose" sync mode, default enabled - Scripting: New `input` API for getting raw keyboard/mouse/controller state - Scripting: New `storage` API for saving data for a script, e.g. settings - Scripting: New `image` and `canvas` APIs for drawing images and displaying on-screen diff --git a/src/feature/gui/gui-runner.c b/src/feature/gui/gui-runner.c index 76e15cdad..407a59781 100644 --- a/src/feature/gui/gui-runner.c +++ b/src/feature/gui/gui-runner.c @@ -702,6 +702,7 @@ void mGUIRun(struct mGUIRunner* runner, const char* path) { mCoreConfigGetIntValue(&runner->config, "showOSD", &showOSD); mCoreConfigGetIntValue(&runner->config, "mute", &mute); mCoreConfigGetIntValue(&runner->config, "fastForwardMute", &fastForwardMute); + runner->core->reloadConfigOption(runner->core, "threadedVideo.flushScanline", &runner->config); #ifdef M_CORE_GB if (runner->core->platform(runner->core) == mPLATFORM_GB) { runner->core->reloadConfigOption(runner->core, "gb.pal", &runner->config); diff --git a/src/platform/3ds/main.c b/src/platform/3ds/main.c index 2d7f80d15..7bac5f61e 100644 --- a/src/platform/3ds/main.c +++ b/src/platform/3ds/main.c @@ -273,6 +273,7 @@ static void _resetCamera(struct m3DSImageSource* imageSource) { static void _setup(struct mGUIRunner* runner) { if (core2) { mCoreConfigSetDefaultIntValue(&runner->config, "threadedVideo", 1); + mCoreConfigSetDefaultIntValue(&runner->config, "threadedVideo.flushScanline", 0); mCoreLoadForeignConfig(runner->core, &runner->config); } @@ -968,6 +969,22 @@ int main(int argc, char* argv[]) { { .id = 0 } }, .configExtra = (struct GUIMenuItem[]) { +#ifdef M_CORE_GBA + { + .title = "Sync", + .data = GUI_V_S("threadedVideo.flushScanline"), + .state = 0, + .validStates = (const char*[]) { + "Loose (faster, can tear)", "Strict (slower, less input lag)" + }, + .stateMappings = (const struct GUIVariant[]) { + GUI_V_I(0), + GUI_V_I(-1), + }, + .nStates = 2 + }, +#endif + { .title = "Screen mode", .data = GUI_V_S("screenMode"),