From 7e4292bdbacbd61e8317de7fa7ef3f5761d67294 Mon Sep 17 00:00:00 2001 From: ev chang Date: Fri, 12 Jul 2024 05:55:16 +0900 Subject: [PATCH] Add HUDCaching FPS (from PolyPatcher) --- .../angelica/config/AngelicaConfig.java | 7 ++++++- .../angelica/hudcaching/HUDCaching.java | 14 +++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/gtnewhorizons/angelica/config/AngelicaConfig.java b/src/main/java/com/gtnewhorizons/angelica/config/AngelicaConfig.java index 7c9d6b6ee..176b82c85 100644 --- a/src/main/java/com/gtnewhorizons/angelica/config/AngelicaConfig.java +++ b/src/main/java/com/gtnewhorizons/angelica/config/AngelicaConfig.java @@ -70,11 +70,16 @@ public class AngelicaConfig { @Config.DefaultBoolean(true) public static boolean showSplashMemoryBar; - @Config.Comment("Renders the HUD elements once per tick and reuses the pixels to improve performance. [Experimental]") + @Config.Comment("Renders the HUD elements once per 20 frames (by default) and reuses the pixels to improve performance. [Experimental]") @Config.DefaultBoolean(true) @Config.RequiresMcRestart public static boolean enableHudCaching; + @Config.Comment("The amount of frames to wait before updating the HUD elements. [Experimental]") + @Config.DefaultInt(20) + @Config.RangeInt(min = 1, max = 60) + public static int hudCachingFPS = 20; + @Config.Comment("Batch drawScreen fonts [Experimental]") @Config.DefaultBoolean(true) @Config.RequiresMcRestart diff --git a/src/main/java/com/gtnewhorizons/angelica/hudcaching/HUDCaching.java b/src/main/java/com/gtnewhorizons/angelica/hudcaching/HUDCaching.java index d9ef54a97..d4ff25832 100644 --- a/src/main/java/com/gtnewhorizons/angelica/hudcaching/HUDCaching.java +++ b/src/main/java/com/gtnewhorizons/angelica/hudcaching/HUDCaching.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import com.gtnewhorizons.angelica.compat.ModStatus; +import com.gtnewhorizons.angelica.config.AngelicaConfig; import com.gtnewhorizons.angelica.mixins.early.angelica.hudcaching.RenderGameOverlayEventAccessor; import cpw.mods.fml.common.eventhandler.EventPriority; import net.dries007.holoInventory.client.Renderer; @@ -43,6 +44,7 @@ public class HUDCaching { private static final Minecraft mc = Minecraft.getMinecraft(); public static Framebuffer framebuffer; private static boolean dirty = true; + private static long nextHudRefresh; public static boolean renderingCacheOverride; @@ -106,13 +108,6 @@ public class HUDCaching { /* TODO END REMOVE DEBUG STUFF */ - @SubscribeEvent - public void onTick(TickEvent.ClientTickEvent event) { - if (event.phase == TickEvent.Phase.END) { - dirty = true; - } - } - // highest so it runs before the GLSM load event @SubscribeEvent(priority = EventPriority.HIGH) public void onJoinWorld(WorldEvent.Load event) { @@ -136,8 +131,13 @@ public class HUDCaching { return; } + if (System.currentTimeMillis() > nextHudRefresh) { + dirty = true; + } + if (dirty) { dirty = false; + nextHudRefresh = System.currentTimeMillis() + (1000 / AngelicaConfig.hudCachingFPS); resetFramebuffer(mc.displayWidth, mc.displayHeight); framebuffer.bindFramebuffer(false); renderingCacheOverride = true;