Implement ODS rendering via Iris Shader for MC 1.17
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
//#if MC>=11600
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import com.replaymod.render.capturer.IrisODSFrameCapturer;
|
||||
import net.coderbot.iris.gl.uniform.UniformHolder;
|
||||
import net.coderbot.iris.gl.uniform.UniformUpdateFrequency;
|
||||
import net.coderbot.iris.uniforms.CommonUniforms;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Pseudo;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.ModifyVariable;
|
||||
|
||||
@Pseudo
|
||||
@Mixin(value = CommonUniforms.class, remap = false)
|
||||
public class Mixin_AddIrisOdsShaderUniforms {
|
||||
// Using ModifyVariable, so we only depend on a single argument. Hoping that reduces the chance of breaking changes.
|
||||
@ModifyVariable(method = "generalCommonUniforms", at = @At("HEAD"), argsOnly = true)
|
||||
private static UniformHolder addReplayModOdsUniforms(UniformHolder uniforms) {
|
||||
IrisODSFrameCapturer ods = IrisODSFrameCapturer.INSTANCE;
|
||||
if (ods != null) {
|
||||
uniforms.uniform1b(UniformUpdateFrequency.PER_FRAME, "leftEye", ods::isLeftEye);
|
||||
uniforms.uniform1i(UniformUpdateFrequency.PER_FRAME, "direction", ods::getDirection);
|
||||
}
|
||||
return uniforms;
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
@@ -0,0 +1,29 @@
|
||||
//#if MC>=11600
|
||||
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;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
|
||||
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;"))
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
Reference in New Issue
Block a user