From 2acaa5d9a05247ad7f39a260f2979bdfe7c74dc0 Mon Sep 17 00:00:00 2001 From: atomicf32 Date: Fri, 20 Mar 2026 22:53:16 -0500 Subject: [PATCH 1/2] Rudimentary fps limiter --- osu.Framework/Configuration/FrameSync.cs | 2 ++ osu.Framework/Configuration/FrameworkConfigManager.cs | 2 ++ osu.Framework/Game.cs | 2 +- osu.Framework/Platform/GameHost.cs | 5 +++++ 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/osu.Framework/Configuration/FrameSync.cs b/osu.Framework/Configuration/FrameSync.cs index 2630c2b06c..4d200df730 100644 --- a/osu.Framework/Configuration/FrameSync.cs +++ b/osu.Framework/Configuration/FrameSync.cs @@ -23,5 +23,7 @@ public enum FrameSync [Description("Basically unlimited")] Unlimited, + + Custom, } } diff --git a/osu.Framework/Configuration/FrameworkConfigManager.cs b/osu.Framework/Configuration/FrameworkConfigManager.cs index 8a1f261ab0..982c7aa365 100644 --- a/osu.Framework/Configuration/FrameworkConfigManager.cs +++ b/osu.Framework/Configuration/FrameworkConfigManager.cs @@ -40,6 +40,7 @@ protected override void InitialiseDefaults() SetDefault(FrameworkSetting.SizeFullscreen, new Size(9999, 9999), new Size(320, 240)); SetDefault(FrameworkSetting.MinimiseOnFocusLossInFullscreen, RuntimeInfo.IsDesktop); SetDefault(FrameworkSetting.FrameSync, FrameSync.Limit2x); + SetDefault(FrameworkSetting.CustomDrawLimit, 0, 0, 1000); SetDefault(FrameworkSetting.WindowMode, WindowMode.Windowed); SetDefault(FrameworkSetting.Renderer, RendererType.Automatic); SetDefault(FrameworkSetting.ShowUnicode, false); @@ -103,6 +104,7 @@ public enum FrameworkSetting WindowMode, ConfineMouseMode, FrameSync, + CustomDrawLimit, ExecutionMode, ShowUnicode, diff --git a/osu.Framework/Game.cs b/osu.Framework/Game.cs index f3df452320..a11e32a5a3 100644 --- a/osu.Framework/Game.cs +++ b/osu.Framework/Game.cs @@ -398,7 +398,7 @@ public bool OnPressed(KeyBindingPressEvent e) case FrameworkAction.CycleFrameSync: var nextFrameSync = frameSyncMode.Value + 1; - if (nextFrameSync > FrameSync.Unlimited) + if (nextFrameSync > FrameSync.Custom) nextFrameSync = FrameSync.VSync; frameSyncMode.Value = nextFrameSync; diff --git a/osu.Framework/Platform/GameHost.cs b/osu.Framework/Platform/GameHost.cs index a29c197f2d..d2ce0393ad 100644 --- a/osu.Framework/Platform/GameHost.cs +++ b/osu.Framework/Platform/GameHost.cs @@ -1371,6 +1371,11 @@ private void updateFrameSyncMode() drawLimiter = int.MaxValue; updateLimiter = int.MaxValue; break; + + case FrameSync.Custom: + drawLimiter = Config.GetBindable(FrameworkSetting.CustomDrawLimit).Value; + updateLimiter = int.MaxValue; + break; } if (!AllowBenchmarkUnlimitedFrames) From e5b40bc599f8e24b98b5a140f5e4ee0706206911 Mon Sep 17 00:00:00 2001 From: atomicf32 Date: Mon, 23 Mar 2026 00:50:57 -0500 Subject: [PATCH 2/2] Removed custom fps cap from FrameSync cycle --- osu.Framework/Game.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Framework/Game.cs b/osu.Framework/Game.cs index a11e32a5a3..f3df452320 100644 --- a/osu.Framework/Game.cs +++ b/osu.Framework/Game.cs @@ -398,7 +398,7 @@ public bool OnPressed(KeyBindingPressEvent e) case FrameworkAction.CycleFrameSync: var nextFrameSync = frameSyncMode.Value + 1; - if (nextFrameSync > FrameSync.Custom) + if (nextFrameSync > FrameSync.Unlimited) nextFrameSync = FrameSync.VSync; frameSyncMode.Value = nextFrameSync;