Fix ODS rendering on Iris 1.1.3+ (fixes #693)
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,6 +47,10 @@
|
||||
"fabric-resource-loader-v0": "*"
|
||||
},
|
||||
|
||||
"conflicts": {
|
||||
"iris": "<1.1.3"
|
||||
},
|
||||
|
||||
"custom": {
|
||||
"mm:early_risers": [
|
||||
"com.replaymod.core.ReplayModMMLauncher"
|
||||
|
||||
Reference in New Issue
Block a user