diff --git a/common/src/main/java/net/irisshaders/iris/gl/blending/AlphaTest.java b/common/src/main/java/net/irisshaders/iris/gl/blending/AlphaTest.java index 0006b4a288..8b6e220c20 100644 --- a/common/src/main/java/net/irisshaders/iris/gl/blending/AlphaTest.java +++ b/common/src/main/java/net/irisshaders/iris/gl/blending/AlphaTest.java @@ -14,7 +14,7 @@ public String toExpression(String alphaAccessor, String alphaThreshold, String i if (function == AlphaTestFunction.ALWAYS) { return "// alpha test disabled\n"; - } else if (this == AlphaTests.VERTEX_ALPHA) { + } else if (this.reference == Float.MAX_VALUE) { return indentation + "if (!(" + alphaAccessor + " > iris_vertexColorAlpha)) {\n" + indentation + " discard;\n" + indentation + "}\n"; diff --git a/common/src/main/java/net/irisshaders/iris/gl/blending/AlphaTests.java b/common/src/main/java/net/irisshaders/iris/gl/blending/AlphaTests.java index 811617505f..fdce636197 100644 --- a/common/src/main/java/net/irisshaders/iris/gl/blending/AlphaTests.java +++ b/common/src/main/java/net/irisshaders/iris/gl/blending/AlphaTests.java @@ -5,5 +5,5 @@ public class AlphaTests { public static final AlphaTest NON_ZERO_ALPHA = new AlphaTest(AlphaTestFunction.GREATER, 0.0001F); public static final AlphaTest ONE_TENTH_ALPHA = new AlphaTest(AlphaTestFunction.GREATER, 0.1F); - public static final AlphaTest VERTEX_ALPHA = new AlphaTest(AlphaTestFunction.NEVER, 0); + public static final AlphaTest VERTEX_ALPHA = new AlphaTest(AlphaTestFunction.NEVER, Float.MAX_VALUE); } diff --git a/common/src/main/java/net/irisshaders/iris/gl/shader/StandardMacros.java b/common/src/main/java/net/irisshaders/iris/gl/shader/StandardMacros.java index a9bc6e9e52..834ee879a3 100644 --- a/common/src/main/java/net/irisshaders/iris/gl/shader/StandardMacros.java +++ b/common/src/main/java/net/irisshaders/iris/gl/shader/StandardMacros.java @@ -65,6 +65,10 @@ public static ImmutableList createStandardEnvironmentDefines() { define(standardDefines, "IRIS_HAS_CONNECTED_TEXTURES"); } + if (IrisPlatformHelpers.getInstance().isModLoaded("monocle")) { + define(standardDefines, "IS_MONOCLE"); + } + define(standardDefines, "DH_BLOCK_UNKNOWN", String.valueOf(0)); define(standardDefines, "DH_BLOCK_LEAVES", String.valueOf(1)); define(standardDefines, "DH_BLOCK_STONE", String.valueOf(2)); diff --git a/common/src/main/java/net/irisshaders/iris/layer/BufferSourceWrapper.java b/common/src/main/java/net/irisshaders/iris/layer/BufferSourceWrapper.java index 9b654faf37..369610bdcb 100644 --- a/common/src/main/java/net/irisshaders/iris/layer/BufferSourceWrapper.java +++ b/common/src/main/java/net/irisshaders/iris/layer/BufferSourceWrapper.java @@ -16,6 +16,10 @@ public BufferSourceWrapper(MultiBufferSource bufferSource, Function cir) { WorldRenderingPipeline pipeline = Iris.getPipelineManager().getPipelineNullable(); - if (pipeline instanceof ShaderRenderingPipeline) { + if (pipeline instanceof ShaderRenderingPipeline && !ImmediateState.bypass) { ShaderInstance override = ((ShaderRenderingPipeline) pipeline).getShaderMap().getShader(key); if (override != null) { diff --git a/common/src/main/java/net/irisshaders/iris/pipeline/IrisRenderingPipeline.java b/common/src/main/java/net/irisshaders/iris/pipeline/IrisRenderingPipeline.java index 86b0fe56d0..7a577de2f0 100644 --- a/common/src/main/java/net/irisshaders/iris/pipeline/IrisRenderingPipeline.java +++ b/common/src/main/java/net/irisshaders/iris/pipeline/IrisRenderingPipeline.java @@ -100,6 +100,7 @@ import org.joml.Vector3d; import org.joml.Vector4f; import org.lwjgl.opengl.ARBClearTexture; +import org.lwjgl.opengl.GL; import org.lwjgl.opengl.GL15C; import org.lwjgl.opengl.GL20C; import org.lwjgl.opengl.GL21C; diff --git a/common/src/main/java/net/irisshaders/iris/pipeline/transform/transformer/VanillaTransformer.java b/common/src/main/java/net/irisshaders/iris/pipeline/transform/transformer/VanillaTransformer.java index 03ef8a23a9..84053d766a 100644 --- a/common/src/main/java/net/irisshaders/iris/pipeline/transform/transformer/VanillaTransformer.java +++ b/common/src/main/java/net/irisshaders/iris/pipeline/transform/transformer/VanillaTransformer.java @@ -71,7 +71,7 @@ public static void transform( if (parameters.inputs.hasColor() && parameters.type == PatchShaderType.VERTEX) { // TODO: Handle the fragment / geometry shader here - if (parameters.alpha == AlphaTests.VERTEX_ALPHA) { + if (parameters.alpha.reference() == Float.MAX_VALUE) { root.replaceReferenceExpressions(t, "gl_Color", "vec4((iris_Color * iris_ColorModulator).rgb, iris_ColorModulator.a)"); } else { diff --git a/common/src/main/java/net/irisshaders/iris/shaderpack/materialmap/BlockMaterialMapping.java b/common/src/main/java/net/irisshaders/iris/shaderpack/materialmap/BlockMaterialMapping.java index 88f78d9074..23de8b4ef3 100644 --- a/common/src/main/java/net/irisshaders/iris/shaderpack/materialmap/BlockMaterialMapping.java +++ b/common/src/main/java/net/irisshaders/iris/shaderpack/materialmap/BlockMaterialMapping.java @@ -6,6 +6,7 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; import it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap; import net.irisshaders.iris.Iris; +import net.irisshaders.iris.platform.IrisPlatformHelpers; import net.minecraft.client.renderer.RenderType; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; @@ -43,7 +44,7 @@ private static void addTag(TagEntry tagEntry, Object2IntMap idMap, i List> compatibleTags = BuiltInRegistries.BLOCK.getTagNames().filter(t -> t.location().getNamespace().equalsIgnoreCase(tagEntry.id().getNamespace()) && t.location().getPath().equalsIgnoreCase(tagEntry.id().getName())).toList(); - if (compatibleTags.isEmpty()) { + if (compatibleTags.isEmpty() && IrisPlatformHelpers.getInstance().isDevelopmentEnvironment()) { Iris.logger.warn("Failed to find the tag " + tagEntry.id()); } else if (compatibleTags.size() > 1) { Iris.logger.fatal("You've broke the system; congrats. More than one tag matched " + tagEntry.id()); diff --git a/common/src/main/java/net/irisshaders/iris/vertices/ImmediateState.java b/common/src/main/java/net/irisshaders/iris/vertices/ImmediateState.java index f1e0b5fec9..28273bdfc0 100644 --- a/common/src/main/java/net/irisshaders/iris/vertices/ImmediateState.java +++ b/common/src/main/java/net/irisshaders/iris/vertices/ImmediateState.java @@ -8,4 +8,5 @@ public class ImmediateState { public static boolean isRenderingLevel = false; public static boolean usingTessellation = false; public static boolean renderWithExtendedVertexFormat = true; + public static boolean bypass; } diff --git a/neoforge/src/main/java/net/irisshaders/iris/mixin/forge/MixinGooBlock.java b/neoforge/src/main/java/net/irisshaders/iris/mixin/forge/MixinGooBlock.java new file mode 100644 index 0000000000..95c43a28e6 --- /dev/null +++ b/neoforge/src/main/java/net/irisshaders/iris/mixin/forge/MixinGooBlock.java @@ -0,0 +1,24 @@ +package net.irisshaders.iris.mixin.forge; + +import net.irisshaders.iris.pipeline.programs.ShaderAccess; +import net.irisshaders.iris.platform.Bypass; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.RenderStateShard; +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; + +@Pseudo +@Mixin(targets = "com/direwolf20/justdirethings/client/renderers/OurRenderTypes") +public class MixinGooBlock { + @Redirect(method = "", at = @At(value = "FIELD", target = "Lnet/minecraft/client/renderer/RenderStateShard;RENDERTYPE_TRANSLUCENT_SHADER:Lnet/minecraft/client/renderer/RenderStateShard$ShaderStateShard;")) + private static RenderStateShard.ShaderStateShard redirectAlpha() { + return new Bypass(GameRenderer::getRendertypeTranslucentShader); + } + + @Redirect(method = "", at = @At(value = "FIELD", target = "Lnet/minecraft/client/renderer/RenderStateShard;RENDERTYPE_ENTITY_ALPHA_SHADER:Lnet/minecraft/client/renderer/RenderStateShard$ShaderStateShard;")) + private static RenderStateShard.ShaderStateShard redirectAlpha2() { + return new Bypass(GameRenderer::getRendertypeEntityAlphaShader); + } +} diff --git a/neoforge/src/main/java/net/irisshaders/iris/platform/Bypass.java b/neoforge/src/main/java/net/irisshaders/iris/platform/Bypass.java new file mode 100644 index 0000000000..7420615883 --- /dev/null +++ b/neoforge/src/main/java/net/irisshaders/iris/platform/Bypass.java @@ -0,0 +1,18 @@ +package net.irisshaders.iris.platform; + +import net.irisshaders.iris.vertices.ImmediateState; +import net.minecraft.client.renderer.RenderStateShard; +import net.minecraft.client.renderer.ShaderInstance; + +import java.util.function.Supplier; + +public class Bypass extends RenderStateShard.ShaderStateShard { + public Bypass(Supplier original) { + super(() -> { + ImmediateState.bypass = true; + ShaderInstance i = original.get(); + ImmediateState.bypass = false; + return i; + }); + } +} diff --git a/neoforge/src/main/resources/mixins.iris.forge.json b/neoforge/src/main/resources/mixins.iris.forge.json index 8d9997e3d0..d0db0b223e 100644 --- a/neoforge/src/main/resources/mixins.iris.forge.json +++ b/neoforge/src/main/resources/mixins.iris.forge.json @@ -6,6 +6,7 @@ "client": [ "MixinHumanoidArmorLayer", "MixinGameClientEvents", + "MixinGooBlock", "MixinItemBlockRenderTypes", "MixinShaderInstance", "MixinRenderFlame",