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) {
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'

View File

@@ -28,6 +28,7 @@ public class IrisODSFrameCapturer implements FrameCapturer<ODSOpenGlFrame> {
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<ODSOpenGlFrame> {
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<ODSOpenGlFrame> {
left.close();
right.close();
INSTANCE = null;
setShaderPack(prevShaderPack);
setShaderPack(prevShaderPack, prevShadersEnabled);
}
private class CubicStereoFrameCapturer extends CubicPboOpenGlFrameCapturer {

View File

@@ -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();
}
}
}

View File

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