From 497b8440cad0c1da2069d99c59d171e12be22afd Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sun, 10 Apr 2022 19:53:15 +0200 Subject: [PATCH] Call Window.onFramebufferSizeChanged to resize (fixes #705) Instead of setting the the values via accessor and calling the handler directly. This allows mods like ResolutionControl+ to properly resize its internal framebuffers as well. --- .../java/com/replaymod/core/versions/MCVer.java | 15 ++++----------- .../render/gui/progress/VirtualWindow.java | 2 ++ .../render/mixin/MainWindowAccessor.java | 2 ++ 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/replaymod/core/versions/MCVer.java b/src/main/java/com/replaymod/core/versions/MCVer.java index c239d9b0..e53ed093 100644 --- a/src/main/java/com/replaymod/core/versions/MCVer.java +++ b/src/main/java/com/replaymod/core/versions/MCVer.java @@ -27,9 +27,9 @@ import net.minecraft.resource.ResourcePackSource; //#if MC>=11400 import com.replaymod.render.mixin.MainWindowAccessor; import net.minecraft.SharedConstants; -import net.minecraft.client.gl.Framebuffer; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.AbstractButtonWidget; +import net.minecraft.client.util.Window; import java.util.concurrent.CompletableFuture; @@ -106,17 +106,10 @@ public class MCVer { public static void resizeMainWindow(MinecraftClient mc, int width, int height) { //#if MC>=11400 - Framebuffer fb = mc.getFramebuffer(); - if (fb.viewportWidth != width || fb.viewportHeight != height) { - fb.resize(width, height, false); - } + Window window = mc.getWindow(); + MainWindowAccessor mainWindow = (MainWindowAccessor) (Object) window; //noinspection ConstantConditions - MainWindowAccessor mainWindow = (MainWindowAccessor) (Object) mc.getWindow(); - mainWindow.setFramebufferWidth(width); - mainWindow.setFramebufferHeight(height); - //#if MC>=11500 - mc.gameRenderer.onResized(width, height); - //#endif + mainWindow.invokeOnFramebufferSizeChanged(window.getHandle(), width, height); //#else //$$ if (width != mc.displayWidth || height != mc.displayHeight) { //$$ mc.resize(width, height); diff --git a/src/main/java/com/replaymod/render/gui/progress/VirtualWindow.java b/src/main/java/com/replaymod/render/gui/progress/VirtualWindow.java index 82977526..6f2b2bc0 100644 --- a/src/main/java/com/replaymod/render/gui/progress/VirtualWindow.java +++ b/src/main/java/com/replaymod/render/gui/progress/VirtualWindow.java @@ -56,12 +56,14 @@ public class VirtualWindow implements Closeable { gameHeight = acc.getFramebufferHeight(); acc.setFramebufferWidth(framebufferWidth); acc.setFramebufferHeight(framebufferHeight); + applyScaleFactor(); isBound = true; } public void unbind() { acc.setFramebufferWidth(gameWidth); acc.setFramebufferHeight(gameHeight); + applyScaleFactor(); isBound = false; } diff --git a/src/main/java/com/replaymod/render/mixin/MainWindowAccessor.java b/src/main/java/com/replaymod/render/mixin/MainWindowAccessor.java index c24af52b..6bfa8e67 100644 --- a/src/main/java/com/replaymod/render/mixin/MainWindowAccessor.java +++ b/src/main/java/com/replaymod/render/mixin/MainWindowAccessor.java @@ -15,4 +15,6 @@ public interface MainWindowAccessor { int getFramebufferHeight(); @Accessor void setFramebufferHeight(int value); + @Invoker + void invokeOnFramebufferSizeChanged(long window, int width, int height); }