Fix ODS rendering on Iris 1.1.3+ (fixes #693)
This commit is contained in:
@@ -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'
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user