From 1efb17e144922338043d5eb752c8ac040acd4edb Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sat, 5 Mar 2022 13:25:31 +0100 Subject: [PATCH] Fix ODS rendering on Iris 1.1.3+ (fixes #693) --- build.gradle | 4 +++- .../render/capturer/IrisODSFrameCapturer.java | 12 ++++++++---- .../render/mixin/Mixin_LoadIrisOdsShaderPack.java | 5 ++--- src/main/resources/fabric.mod.json | 4 ++++ 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index b486fbaf..18be4489 100644 --- a/build.gradle +++ b/build.gradle @@ -362,7 +362,9 @@ dependencies { } if (mcVersion >= 11600) { - modCompileOnly 'com.github.IrisShaders:Iris:1.0.0' + modCompileOnly("com.github.IrisShaders:Iris:1.18.x~v1.2.0") { + transitive = false // we do not want to upgrade our libs, we only need this to compile our mixins + } } testImplementation 'junit:junit:4.11' diff --git a/src/main/java/com/replaymod/render/capturer/IrisODSFrameCapturer.java b/src/main/java/com/replaymod/render/capturer/IrisODSFrameCapturer.java index a1d31055..2dd2d269 100644 --- a/src/main/java/com/replaymod/render/capturer/IrisODSFrameCapturer.java +++ b/src/main/java/com/replaymod/render/capturer/IrisODSFrameCapturer.java @@ -28,6 +28,7 @@ public class IrisODSFrameCapturer implements FrameCapturer { public static IrisODSFrameCapturer INSTANCE; private final CubicPboOpenGlFrameCapturer left, right; private final String prevShaderPack; + private final boolean prevShadersEnabled; private int direction; private boolean isLeftEye; @@ -67,13 +68,16 @@ public class IrisODSFrameCapturer implements FrameCapturer { right = new CubicStereoFrameCapturer(worldRenderer, fakeInfo, frameSize); INSTANCE = this; - prevShaderPack = Iris.getIrisConfig().getShaderPackName().orElse(null); - setShaderPack(SHADER_PACK_NAME); + IrisConfig irisConfig = Iris.getIrisConfig(); + prevShaderPack = irisConfig.getShaderPackName().orElse(null); + prevShadersEnabled = irisConfig.areShadersEnabled(); + setShaderPack(SHADER_PACK_NAME, true); } - private static void setShaderPack(String name) { + private static void setShaderPack(String name, boolean enabled) { IrisConfig irisConfig = Iris.getIrisConfig(); irisConfig.setShaderPackName(name); + irisConfig.setShadersEnabled(enabled); try { irisConfig.save(); Iris.reload(); @@ -121,7 +125,7 @@ public class IrisODSFrameCapturer implements FrameCapturer { left.close(); right.close(); INSTANCE = null; - setShaderPack(prevShaderPack); + setShaderPack(prevShaderPack, prevShadersEnabled); } private class CubicStereoFrameCapturer extends CubicPboOpenGlFrameCapturer { diff --git a/src/main/java/com/replaymod/render/mixin/Mixin_LoadIrisOdsShaderPack.java b/src/main/java/com/replaymod/render/mixin/Mixin_LoadIrisOdsShaderPack.java index d8756e7b..56d4564b 100644 --- a/src/main/java/com/replaymod/render/mixin/Mixin_LoadIrisOdsShaderPack.java +++ b/src/main/java/com/replaymod/render/mixin/Mixin_LoadIrisOdsShaderPack.java @@ -4,7 +4,6 @@ package com.replaymod.render.mixin; import com.replaymod.render.capturer.IrisODSFrameCapturer; import net.coderbot.iris.Iris; import net.fabricmc.loader.api.FabricLoader; -import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.injection.At; @@ -15,14 +14,14 @@ import java.nio.file.Path; @Pseudo @Mixin(value = Iris.class, remap = false) public class Mixin_LoadIrisOdsShaderPack { - @Redirect(method = "loadExternalShaderpack", at = @At(value = "FIELD", opcode = Opcodes.GETSTATIC, target = "Lnet/coderbot/iris/Iris;SHADERPACKS_DIRECTORY:Ljava/nio/file/Path;")) + @Redirect(method = "loadExternalShaderpack", at = @At(value = "INVOKE", target = "Lnet/coderbot/iris/Iris;getShaderpacksDirectory()Ljava/nio/file/Path;")) private static Path loadReplayModOdsPack(String name) { if (IrisODSFrameCapturer.INSTANCE != null && IrisODSFrameCapturer.SHADER_PACK_NAME.equals(name)) { return FabricLoader.getInstance().getModContainer("replaymod") .orElseThrow(() -> new RuntimeException("Failed to get mod container for ReplayMod")) .getRootPath(); } else { - return Iris.SHADERPACKS_DIRECTORY; + return Iris.getShaderpacksDirectory(); } } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 6eb336ce..73fe9d6e 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -47,6 +47,10 @@ "fabric-resource-loader-v0": "*" }, + "conflicts": { + "iris": "<1.1.3" + }, + "custom": { "mm:early_risers": [ "com.replaymod.core.ReplayModMMLauncher"