diff --git a/ClassicalSharp/2D/Screens/Menu/ClassicOptionsScreen.cs b/ClassicalSharp/2D/Screens/Menu/ClassicOptionsScreen.cs index ea8171567..682d33e59 100644 --- a/ClassicalSharp/2D/Screens/Menu/ClassicOptionsScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/ClassicOptionsScreen.cs @@ -50,9 +50,7 @@ namespace ClassicalSharp.Gui.Screens { MakeOpt(1, 0, "FPS mode", OnWidgetClick, g => g.FpsLimit.ToString(), - (g, v) => { object raw = Enum.Parse(typeof(FpsLimitMethod), v); - g.SetFpsLimitMethod((FpsLimitMethod)raw); - Options.Set(OptionsKey.FpsLimit, v); }), + (g, v) => { }), !game.ClassicHacks ? null : MakeBool(0, 60, "Hacks enabled", OptionsKey.HacksEnabled, @@ -67,6 +65,11 @@ namespace ClassicalSharp.Gui.Screens { MakeBack(400, "Done", 25, titleFont, (g, w) => g.Gui.SetNewScreen(new PauseScreen(g))), null, null, }; + + // NOTE: we need to override the default setter here, because changing FPS limit method + // recreates the graphics context on some backends (such as Direct3D9) + ButtonWidget btn = (ButtonWidget)widgets[7]; + btn.SetValue = SetFPSLimitMethod; } void MakeValidators() { diff --git a/ClassicalSharp/2D/Screens/Menu/GraphicsOptionsScreen.cs b/ClassicalSharp/2D/Screens/Menu/GraphicsOptionsScreen.cs index 3f6a14132..d4e16d829 100644 --- a/ClassicalSharp/2D/Screens/Menu/GraphicsOptionsScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/GraphicsOptionsScreen.cs @@ -57,16 +57,6 @@ namespace ClassicalSharp.Gui.Screens { btn.SetValue = SetFPSLimitMethod; } - void SetFPSLimitMethod(Game g, string v) { - object rawFps = Enum.Parse(typeof(FpsLimitMethod), v); - g.SetFpsLimitMethod((FpsLimitMethod)rawFps); - Options.Set(OptionsKey.FpsLimit, v); - - // NOTE: OpenGL backend doesn't recreate context, so cheat and act like recreated anyways - ContextLost(); - ContextRecreated(); - } - void SetSmoothLighting(Game g, bool v) { g.SmoothLighting = v; ChunkMeshBuilder builder = g.MapRenderer.DefaultMeshBuilder(); diff --git a/ClassicalSharp/2D/Screens/Menu/MenuOptionsScreen.cs b/ClassicalSharp/2D/Screens/Menu/MenuOptionsScreen.cs index abd32e89e..8acf559f7 100644 --- a/ClassicalSharp/2D/Screens/Menu/MenuOptionsScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/MenuOptionsScreen.cs @@ -254,5 +254,15 @@ namespace ClassicalSharp.Gui.Screens { widgets[okayIndex].Dispose(); widgets[okayIndex] = null; } + + protected void SetFPSLimitMethod(Game g, string v) { + object rawFps = Enum.Parse(typeof(FpsLimitMethod), v); + g.SetFpsLimitMethod((FpsLimitMethod)rawFps); + Options.Set(OptionsKey.FpsLimit, v); + + // NOTE: OpenGL backend doesn't recreate context, so cheat and act like recreated anyways + ContextLost(); + ContextRecreated(); + } } } \ No newline at end of file