Fix ODS rendering on Iris 1.1.3+ (fixes #693)

This commit is contained in:
Jonas Herzig
2022-03-05 13:25:31 +01:00
parent 8573a9b208
commit 1efb17e144
4 changed files with 17 additions and 8 deletions

View File

@@ -362,7 +362,9 @@ dependencies {
} }
if (mcVersion >= 11600) { 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' testImplementation 'junit:junit:4.11'

View File

@@ -28,6 +28,7 @@ public class IrisODSFrameCapturer implements FrameCapturer<ODSOpenGlFrame> {
public static IrisODSFrameCapturer INSTANCE; public static IrisODSFrameCapturer INSTANCE;
private final CubicPboOpenGlFrameCapturer left, right; private final CubicPboOpenGlFrameCapturer left, right;
private final String prevShaderPack; private final String prevShaderPack;
private final boolean prevShadersEnabled;
private int direction; private int direction;
private boolean isLeftEye; private boolean isLeftEye;
@@ -67,13 +68,16 @@ public class IrisODSFrameCapturer implements FrameCapturer<ODSOpenGlFrame> {
right = new CubicStereoFrameCapturer(worldRenderer, fakeInfo, frameSize); right = new CubicStereoFrameCapturer(worldRenderer, fakeInfo, frameSize);
INSTANCE = this; INSTANCE = this;
prevShaderPack = Iris.getIrisConfig().getShaderPackName().orElse(null); IrisConfig irisConfig = Iris.getIrisConfig();
setShaderPack(SHADER_PACK_NAME); 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 irisConfig = Iris.getIrisConfig();
irisConfig.setShaderPackName(name); irisConfig.setShaderPackName(name);
irisConfig.setShadersEnabled(enabled);
try { try {
irisConfig.save(); irisConfig.save();
Iris.reload(); Iris.reload();
@@ -121,7 +125,7 @@ public class IrisODSFrameCapturer implements FrameCapturer<ODSOpenGlFrame> {
left.close(); left.close();
right.close(); right.close();
INSTANCE = null; INSTANCE = null;
setShaderPack(prevShaderPack); setShaderPack(prevShaderPack, prevShadersEnabled);
} }
private class CubicStereoFrameCapturer extends CubicPboOpenGlFrameCapturer { private class CubicStereoFrameCapturer extends CubicPboOpenGlFrameCapturer {

View File

@@ -4,7 +4,6 @@ package com.replaymod.render.mixin;
import com.replaymod.render.capturer.IrisODSFrameCapturer; import com.replaymod.render.capturer.IrisODSFrameCapturer;
import net.coderbot.iris.Iris; import net.coderbot.iris.Iris;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
@@ -15,14 +14,14 @@ import java.nio.file.Path;
@Pseudo @Pseudo
@Mixin(value = Iris.class, remap = false) @Mixin(value = Iris.class, remap = false)
public class Mixin_LoadIrisOdsShaderPack { 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) { private static Path loadReplayModOdsPack(String name) {
if (IrisODSFrameCapturer.INSTANCE != null && IrisODSFrameCapturer.SHADER_PACK_NAME.equals(name)) { if (IrisODSFrameCapturer.INSTANCE != null && IrisODSFrameCapturer.SHADER_PACK_NAME.equals(name)) {
return FabricLoader.getInstance().getModContainer("replaymod") return FabricLoader.getInstance().getModContainer("replaymod")
.orElseThrow(() -> new RuntimeException("Failed to get mod container for ReplayMod")) .orElseThrow(() -> new RuntimeException("Failed to get mod container for ReplayMod"))
.getRootPath(); .getRootPath();
} else { } else {
return Iris.SHADERPACKS_DIRECTORY; return Iris.getShaderpacksDirectory();
} }
} }
} }

View File

@@ -47,6 +47,10 @@
"fabric-resource-loader-v0": "*" "fabric-resource-loader-v0": "*"
}, },
"conflicts": {
"iris": "<1.1.3"
},
"custom": { "custom": {
"mm:early_risers": [ "mm:early_risers": [
"com.replaymod.core.ReplayModMMLauncher" "com.replaymod.core.ReplayModMMLauncher"