Skip to content

Commit a5051f4

Browse files
committed
Add vsync option
1 parent 05bb462 commit a5051f4

File tree

5 files changed

+44
-6
lines changed

5 files changed

+44
-6
lines changed

platforms/common/src/main/java/dynamic_fps/impl/DynamicFPSMod.java

+11
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,10 @@ public static int targetFrameRate() {
161161
return config.frameRateTarget();
162162
}
163163

164+
public static boolean enableVsync() {
165+
return config.enableVsync();
166+
}
167+
164168
public static float volumeMultiplier(SoundSource source) {
165169
return config.volumeMultiplier(source);
166170
}
@@ -237,6 +241,13 @@ public static void handleStateChange(PowerState previous, PowerState current) {
237241

238242
OptionHolder.applyOptions(minecraft.options, config.graphicsState());
239243
}
244+
245+
// The FOCUSED config doesn't have the user's actual vsync preference sadly ...
246+
boolean enableVsync = current != PowerState.FOCUSED ? config.enableVsync() : minecraft.options.enableVsync().get();
247+
248+
if (enableVsync != before.enableVsync()) {
249+
minecraft.getWindow().updateVsync(enableVsync);
250+
}
240251
}
241252

242253
private static void checkForStateChanges() {

platforms/common/src/main/java/dynamic_fps/impl/compat/ClothConfig.java

+10
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,16 @@ public static Screen genConfigScreen(Screen parent) {
217217
.build()
218218
);
219219

220+
category.addEntry(
221+
entryBuilder.startBooleanToggle(
222+
Component.translatable("options.vsync"),
223+
instance.enableVsync()
224+
)
225+
.setDefaultValue(standard.enableVsync())
226+
.setSaveConsumer(instance::setEnableVsync)
227+
.build()
228+
);
229+
220230
// Further options are not allowed since this state is used while active.
221231
if (state.configurabilityLevel == PowerState.ConfigurabilityLevel.SOME) {
222232
continue;

platforms/common/src/main/java/dynamic_fps/impl/config/Config.java

+12-2
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,19 @@
1111

1212
public class Config {
1313
private int frameRateTarget;
14+
private boolean enableVsync;
1415
private final Map<String, Float> volumeMultipliers;
1516
private GraphicsState graphicsState;
1617
private boolean showToasts;
1718
private boolean runGarbageCollector;
1819

1920
protected transient PowerState state; // Set by main config, allows retrieving values from the default power state config
2021

21-
public static final Config ACTIVE = new Config(-1, new HashMap<>(), GraphicsState.DEFAULT, true, false);
22+
public static final Config ACTIVE = new Config(-1, false, new HashMap<>(), GraphicsState.DEFAULT, true, false);
2223

23-
public Config(int frameRateTarget, Map<String, Float> volumeMultipliers, GraphicsState graphicsState, boolean showToasts, boolean runGarbageCollector) {
24+
public Config(int frameRateTarget, boolean enableVsync, Map<String, Float> volumeMultipliers, GraphicsState graphicsState, boolean showToasts, boolean runGarbageCollector) {
2425
this.frameRateTarget = frameRateTarget;
26+
this.enableVsync = enableVsync;
2527
this.volumeMultipliers = new HashMap<>(volumeMultipliers); // Ensure the map is mutable
2628
this.graphicsState = graphicsState;
2729
this.showToasts = showToasts;
@@ -44,6 +46,14 @@ public void setFrameRateTarget(int value) {
4446
}
4547
}
4648

49+
public boolean enableVsync() {
50+
return this.enableVsync;
51+
}
52+
53+
public void setEnableVsync(boolean value) {
54+
this.enableVsync = value;
55+
}
56+
4757
public float volumeMultiplier(SoundSource source) {
4858
if (this.rawVolumeMultiplier(SoundSource.MASTER) == 0.0f) {
4959
return 0.0f;

platforms/common/src/main/java/dynamic_fps/impl/mixin/DebugScreenOverlayMixin.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,14 @@ private List<String> getGameInformation(List<String> result) {
2929
PowerState status = DynamicFPSMod.powerState();
3030

3131
if (status != PowerState.FOCUSED) {
32-
int target = DynamicFPSMod.targetFrameRate();
33-
String fps = target == Constants.NO_FRAME_RATE_LIMIT ? "inf" : Integer.toString(target);
32+
int fps = DynamicFPSMod.targetFrameRate();
33+
34+
String vsync = DynamicFPSMod.enableVsync() ? " vsync": "";
35+
String target = fps == Constants.NO_FRAME_RATE_LIMIT ? "inf" : Integer.toString(fps);
3436

3537
result.add(
3638
2,
37-
this.format("§c[Dynamic FPS] FPS: %s P: %s§r", fps, status.toString().toLowerCase())
39+
this.format("§c[Dynamic FPS] FPS: %s%s P: %s§r", target, vsync, status.toString().toLowerCase())
3840
);
3941
}
4042
}

platforms/common/src/main/resources/assets/dynamic_fps/data/default_config.json

+6-1
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@
2121
"states": {
2222
"hovered": {
2323
"frame_rate_target": 60,
24+
"enable_vsync": "false",
2425
"volume_multipliers": {},
2526
"graphics_state": "default",
2627
"show_toasts": true,
2728
"run_garbage_collector": false
2829
},
2930
"unfocused": {
3031
"frame_rate_target": 1,
32+
"enable_vsync": "false",
3133
"volume_multipliers": {
3234
"master": 0.25
3335
},
@@ -37,6 +39,7 @@
3739
},
3840
"invisible": {
3941
"frame_rate_target": 0,
42+
"enable_vsync": "false",
4043
"volume_multipliers": {
4144
"master": 0.0
4245
},
@@ -45,14 +48,16 @@
4548
"run_garbage_collector": false
4649
},
4750
"unplugged": {
48-
"frame_rate_target": 60,
51+
"frame_rate_target": -1,
52+
"enable_vsync": "true",
4953
"volume_multipliers": {},
5054
"graphics_state": "default",
5155
"show_toasts": true,
5256
"run_garbage_collector": false
5357
},
5458
"abandoned": {
5559
"frame_rate_target": 10,
60+
"enable_vsync": "false",
5661
"volume_multipliers": {},
5762
"graphics_state": "default",
5863
"show_toasts": false,

0 commit comments

Comments
 (0)