From 855286011b07a7d2fb6956d936abf38317003591 Mon Sep 17 00:00:00 2001 From: dima_dencep Date: Mon, 29 Apr 2024 01:58:40 +0700 Subject: [PATCH] Port some patches --- .../mixin/MixinRenderBuffers.java | 1 - .../pixelmon/mixin/MixinNormalizedFace.java | 23 ++++ .../OculusPixelmonCompatMixinPlugin.java | 46 ++++++++ ...MixinChunkRenderDispatcherRebuildTask.java | 33 ++++++ .../iris/mixin/MixinItemBlockRenderTypes.java | 13 ++- .../iris/mixin/MixinMinecraft_Images.java | 35 ------ .../iris/mixin/MixinMinecraft_Keybinds.java | 32 ------ .../iris/mixin/MixinParticleEngine.java | 6 +- .../iris/mixin/MixinShaderInstance.java | 101 ++++++++++++++++++ .../iris/mixin/OculusMixinPlugin.java | 2 +- .../MixinMinecraft_NoAuthInDev.java | 33 ------ .../MixinProfileKeyPairManager.java | 8 -- .../MixinSharedConstants_LazyDfu.java | 9 -- .../MixinHumanoidArmorLayer.java | 4 +- .../mixin/fantastic/MixinParticleEngine.java | 4 +- .../MixinPreventRebuildNearInShadowPass.java | 2 +- .../mixin/vertices/MixinBufferBuilder.java | 4 +- .../pipeline/transform/TransformPatcher.java | 68 ++++++------ .../materialmap/BlockMaterialMapping.java | 20 ++-- .../materialmap/WorldRenderingSettings.java | 8 +- .../iris/shadows/ShadowRenderer.java | 1 - .../texture/pbr/loader/AtlasPBRLoader.java | 8 +- .../vertices/IrisExtendedBufferBuilder.java | 2 +- .../mixins.oculus.compat.pixelmon.json | 13 +++ src/main/resources/mixins.oculus.json | 6 +- .../SodiumBufferBuilderPolygonView.java | 2 +- .../mixin/IrisSodiumCompatMixinPlugin.java | 2 +- .../block_id/MixinChunkRenderRebuildTask.java | 4 +- .../mixin/clouds/MixinCloudRenderer.java | 15 ++- .../MixinChunkBuilderMeshingTask.java | 43 ++++++++ .../shadow_map/MixinRenderSectionManager.java | 4 +- .../shadow_map/MixinSodiumWorldRenderer.java | 8 +- .../MixinRegionChunkRenderer.java | 40 +++---- .../MixinSodiumBufferBuilder.java | 2 +- .../MixinVertexFormatDescriptionImpl.java | 2 +- .../mixins.oculus.compat.sodium.json | 1 + 36 files changed, 383 insertions(+), 222 deletions(-) create mode 100644 src/main/java/net/irisshaders/iris/compat/pixelmon/mixin/MixinNormalizedFace.java create mode 100644 src/main/java/net/irisshaders/iris/compat/pixelmon/mixin/OculusPixelmonCompatMixinPlugin.java create mode 100644 src/main/java/net/irisshaders/iris/mixin/MixinChunkRenderDispatcherRebuildTask.java delete mode 100644 src/main/java/net/irisshaders/iris/mixin/MixinMinecraft_Images.java delete mode 100644 src/main/java/net/irisshaders/iris/mixin/MixinMinecraft_Keybinds.java create mode 100644 src/main/java/net/irisshaders/iris/mixin/MixinShaderInstance.java delete mode 100644 src/main/java/net/irisshaders/iris/mixin/devenvironment/MixinMinecraft_NoAuthInDev.java delete mode 100644 src/main/java/net/irisshaders/iris/mixin/devenvironment/MixinProfileKeyPairManager.java delete mode 100644 src/main/java/net/irisshaders/iris/mixin/devenvironment/MixinSharedConstants_LazyDfu.java create mode 100644 src/main/resources/mixins.oculus.compat.pixelmon.json create mode 100644 src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/shader_overrides/MixinChunkBuilderMeshingTask.java diff --git a/src/main/java/net/irisshaders/batchedentityrendering/mixin/MixinRenderBuffers.java b/src/main/java/net/irisshaders/batchedentityrendering/mixin/MixinRenderBuffers.java index fab81ac42b..729ee0a230 100644 --- a/src/main/java/net/irisshaders/batchedentityrendering/mixin/MixinRenderBuffers.java +++ b/src/main/java/net/irisshaders/batchedentityrendering/mixin/MixinRenderBuffers.java @@ -1,6 +1,5 @@ package net.irisshaders.batchedentityrendering.mixin; -import com.mojang.blaze3d.vertex.BufferBuilder; import net.irisshaders.batchedentityrendering.impl.DrawCallTrackingRenderBuffers; import net.irisshaders.batchedentityrendering.impl.FullyBufferedMultiBufferSource; import net.irisshaders.batchedentityrendering.impl.MemoryTrackingBuffer; diff --git a/src/main/java/net/irisshaders/iris/compat/pixelmon/mixin/MixinNormalizedFace.java b/src/main/java/net/irisshaders/iris/compat/pixelmon/mixin/MixinNormalizedFace.java new file mode 100644 index 0000000000..dcec8eac8d --- /dev/null +++ b/src/main/java/net/irisshaders/iris/compat/pixelmon/mixin/MixinNormalizedFace.java @@ -0,0 +1,23 @@ +package net.irisshaders.iris.compat.pixelmon.mixin; + +import com.mojang.blaze3d.vertex.BufferBuilder; +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.Coerce; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Pseudo +@Mixin(targets = {"com/pixelmonmod/pixelmon/client/models/smd/NormalizedFace"}) +public class MixinNormalizedFace { + /** + * @author embeddedt (original idea by NanoLive) + * @reason Pixelmon manipulates the buffer of a {@link BufferBuilder} directly which causes problems. + * We bypass that code path. + */ + @Redirect(method = "addFaceForRender", at = @At(value = "FIELD", opcode = Opcodes.GETFIELD, target = "Lcom/pixelmonmod/pixelmon/client/models/smd/DeformVertex;id2:I")) + public int hideBufferBuilderId(@Coerce Object instance) { + return -1; // prevent using "optimized" code path + } +} diff --git a/src/main/java/net/irisshaders/iris/compat/pixelmon/mixin/OculusPixelmonCompatMixinPlugin.java b/src/main/java/net/irisshaders/iris/compat/pixelmon/mixin/OculusPixelmonCompatMixinPlugin.java new file mode 100644 index 0000000000..b7372458b8 --- /dev/null +++ b/src/main/java/net/irisshaders/iris/compat/pixelmon/mixin/OculusPixelmonCompatMixinPlugin.java @@ -0,0 +1,46 @@ +package net.irisshaders.iris.compat.pixelmon.mixin; + +import net.minecraftforge.fml.loading.FMLLoader; +import org.objectweb.asm.tree.ClassNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import java.util.List; +import java.util.Set; + +public class OculusPixelmonCompatMixinPlugin implements IMixinConfigPlugin { + @Override + public void onLoad(String mixinPackage) { + + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + return FMLLoader.getLoadingModList().getModFileById("pixelmon") != null; + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) { + + } + + @Override + public List getMixins() { + return null; + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } +} diff --git a/src/main/java/net/irisshaders/iris/mixin/MixinChunkRenderDispatcherRebuildTask.java b/src/main/java/net/irisshaders/iris/mixin/MixinChunkRenderDispatcherRebuildTask.java new file mode 100644 index 0000000000..8c590e25b9 --- /dev/null +++ b/src/main/java/net/irisshaders/iris/mixin/MixinChunkRenderDispatcherRebuildTask.java @@ -0,0 +1,33 @@ +package net.irisshaders.iris.mixin; + +import net.irisshaders.iris.shaderpack.materialmap.WorldRenderingSettings; +import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.core.Holder; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.client.ChunkRenderTypeSet; +import net.minecraftforge.client.model.data.ModelData; +import net.minecraftforge.registries.ForgeRegistries; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import java.util.Map; + +@Mixin(ChunkRenderDispatcher.RenderChunk.RebuildTask.class) +public class MixinChunkRenderDispatcherRebuildTask { + @Redirect(method = "compile", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/resources/model/BakedModel;getRenderTypes(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/util/RandomSource;Lnet/minecraftforge/client/model/data/ModelData;)Lnet/minecraftforge/client/ChunkRenderTypeSet;")) + private ChunkRenderTypeSet oculus$overrideRenderTypes(BakedModel instance, BlockState blockState, RandomSource randomSource, ModelData modelData) { + Map, ChunkRenderTypeSet> idMap = WorldRenderingSettings.INSTANCE.getBlockTypeIds(); + if (idMap != null) { + ChunkRenderTypeSet type = idMap.get(ForgeRegistries.BLOCKS.getDelegateOrThrow(blockState.getBlock())); + if (type != null) { + return type; + } + } + + return instance.getRenderTypes(blockState, randomSource, modelData); + } +} diff --git a/src/main/java/net/irisshaders/iris/mixin/MixinItemBlockRenderTypes.java b/src/main/java/net/irisshaders/iris/mixin/MixinItemBlockRenderTypes.java index 1ec44f6673..1b048f3132 100644 --- a/src/main/java/net/irisshaders/iris/mixin/MixinItemBlockRenderTypes.java +++ b/src/main/java/net/irisshaders/iris/mixin/MixinItemBlockRenderTypes.java @@ -3,8 +3,11 @@ import net.irisshaders.iris.shaderpack.materialmap.WorldRenderingSettings; import net.minecraft.client.renderer.ItemBlockRenderTypes; import net.minecraft.client.renderer.RenderType; +import net.minecraft.core.Holder; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.client.ChunkRenderTypeSet; +import net.minecraftforge.registries.ForgeRegistries; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -14,14 +17,14 @@ @Mixin(ItemBlockRenderTypes.class) public class MixinItemBlockRenderTypes { - @Inject(method = "getChunkRenderType", at = @At("HEAD"), cancellable = true) - private static void iris$setCustomRenderType(BlockState arg, CallbackInfoReturnable cir) { - Map idMap = WorldRenderingSettings.INSTANCE.getBlockTypeIds(); + @Inject(method = "getRenderLayers", at = @At("HEAD"), cancellable = true, remap = false) + private static void iris$setCustomRenderType(BlockState arg, CallbackInfoReturnable cir) { + Map, ChunkRenderTypeSet> idMap = WorldRenderingSettings.INSTANCE.getBlockTypeIds(); if (idMap != null) { - RenderType type = idMap.get(arg.getBlock()); + ChunkRenderTypeSet type = idMap.get(ForgeRegistries.BLOCKS.getDelegateOrThrow(arg.getBlock())); if (type != null) { cir.setReturnValue(type); } } } -} \ No newline at end of file +} diff --git a/src/main/java/net/irisshaders/iris/mixin/MixinMinecraft_Images.java b/src/main/java/net/irisshaders/iris/mixin/MixinMinecraft_Images.java deleted file mode 100644 index b8df962999..0000000000 --- a/src/main/java/net/irisshaders/iris/mixin/MixinMinecraft_Images.java +++ /dev/null @@ -1,35 +0,0 @@ -package net.irisshaders.iris.mixin; - -import net.fabricmc.loader.api.FabricLoader; -import net.irisshaders.iris.Iris; -import net.irisshaders.iris.shaderpack.texture.CustomTextureData; -import net.irisshaders.iris.shaderpack.texture.TextureFilteringData; -import net.irisshaders.iris.targets.backed.NativeImageBackedCustomTexture; -import net.minecraft.client.Minecraft; -import net.minecraft.client.main.GameConfig; -import net.minecraft.resources.ResourceLocation; -import org.apache.commons.io.IOUtils; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.io.IOException; - -/** - * This Mixin is responsible for registering the "widgets" texture used in Iris' GUI's. - * Normally Fabric API would do this automatically, but we don't use it here, so it must be done manually. - */ -@Mixin(Minecraft.class) -public class MixinMinecraft_Images { - @Inject(method = "", at = @At("TAIL")) - private void iris$setupImages(GameConfig arg, CallbackInfo ci) { - if (!FabricLoader.getInstance().isModLoaded("fabric-resource-loader-v0")) { - try { - Minecraft.getInstance().getTextureManager().register(new ResourceLocation("iris", "textures/gui/widgets.png"), new NativeImageBackedCustomTexture(new CustomTextureData.PngData(new TextureFilteringData(false, false), IOUtils.toByteArray(Iris.class.getResourceAsStream("/assets/iris/textures/gui/widgets.png"))))); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - } -} diff --git a/src/main/java/net/irisshaders/iris/mixin/MixinMinecraft_Keybinds.java b/src/main/java/net/irisshaders/iris/mixin/MixinMinecraft_Keybinds.java deleted file mode 100644 index a9df998ca1..0000000000 --- a/src/main/java/net/irisshaders/iris/mixin/MixinMinecraft_Keybinds.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.irisshaders.iris.mixin; - -import net.irisshaders.iris.Iris; -import net.minecraft.client.Minecraft; -import net.minecraft.util.profiling.ProfilerFiller; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -/** - * Small hook giving Iris a chance to check for keyboard input for its keybindings. - * - *

This is equivalent to the END_CLIENT_TICK event in Fabric API, but since it's a super simple mixin and we - * only need this event (out of the many events provided by Fabric API) I've just implemented it myself. This - * alone shaves over 60kB off the released JAR size.

- */ -@Mixin(Minecraft.class) -public class MixinMinecraft_Keybinds { - @Shadow - private ProfilerFiller profiler; - - @Inject(method = "tick()V", at = @At("RETURN")) - private void iris$onTick(CallbackInfo ci) { - this.profiler.push("iris_keybinds"); - - Iris.handleKeybinds((Minecraft) (Object) this); - - this.profiler.pop(); - } -} diff --git a/src/main/java/net/irisshaders/iris/mixin/MixinParticleEngine.java b/src/main/java/net/irisshaders/iris/mixin/MixinParticleEngine.java index d1d5a4ac12..be7a863b2f 100644 --- a/src/main/java/net/irisshaders/iris/mixin/MixinParticleEngine.java +++ b/src/main/java/net/irisshaders/iris/mixin/MixinParticleEngine.java @@ -19,18 +19,18 @@ @Mixin(value = ParticleEngine.class, remap = false) public class MixinParticleEngine { private static final String RENDER = - "Lnet/minecraft/client/particle/ParticleEngine;render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;F)V"; + "Lnet/minecraft/client/particle/ParticleEngine;render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;FLnet/minecraft/client/renderer/culling/Frustum;)V"; @Inject(method = RENDER, at = @At("HEAD")) private void iris$beginDrawingParticles(PoseStack poseStack, MultiBufferSource.BufferSource bufferSource, - LightTexture lightTexture, Camera camera, float f, + LightTexture lightTexture, Camera camera, float f, Frustum frustum, CallbackInfo ci) { Iris.getPipelineManager().getPipeline().ifPresent(pipeline -> pipeline.setPhase(WorldRenderingPhase.PARTICLES)); } @Inject(method = RENDER, at = @At("RETURN")) private void iris$finishDrawingParticles(PoseStack poseStack, MultiBufferSource.BufferSource bufferSource, - LightTexture lightTexture, Camera camera, float f, + LightTexture lightTexture, Camera camera, float f, Frustum frustum, CallbackInfo ci) { Iris.getPipelineManager().getPipeline().ifPresent(pipeline -> pipeline.setPhase(WorldRenderingPhase.NONE)); } diff --git a/src/main/java/net/irisshaders/iris/mixin/MixinShaderInstance.java b/src/main/java/net/irisshaders/iris/mixin/MixinShaderInstance.java new file mode 100644 index 0000000000..78d58f3ef7 --- /dev/null +++ b/src/main/java/net/irisshaders/iris/mixin/MixinShaderInstance.java @@ -0,0 +1,101 @@ +package net.irisshaders.iris.mixin; + +import com.google.common.collect.ImmutableSet; +import com.google.gson.JsonObject; +import com.mojang.blaze3d.shaders.Uniform; +import com.mojang.blaze3d.vertex.VertexFormat; +import net.irisshaders.iris.Iris; +import net.irisshaders.iris.gl.IrisRenderSystem; +import net.irisshaders.iris.gl.blending.DepthColorStorage; +import net.irisshaders.iris.pipeline.ShaderRenderingPipeline; +import net.irisshaders.iris.pipeline.WorldRenderingPipeline; +import net.irisshaders.iris.pipeline.programs.ExtendedShader; +import net.irisshaders.iris.pipeline.programs.FallbackShader; +import net.irisshaders.iris.pipeline.programs.ShaderInstanceInterface; +import net.minecraft.client.renderer.ShaderInstance; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.resources.ResourceProvider; +import net.minecraft.util.GsonHelper; +import org.lwjgl.opengl.ARBTextureSwizzle; +import org.lwjgl.opengl.GL20C; +import org.lwjgl.opengl.GL30C; +import net.minecraft.util.GsonHelper; +import org.slf4j.Logger; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +import java.io.Reader; +import java.util.Objects; + +@Mixin(ShaderInstance.class) +public abstract class MixinShaderInstance implements ShaderInstanceInterface { + @Unique + private static final ImmutableSet ATTRIBUTE_LIST = ImmutableSet.of("Position", "Color", "Normal", "UV0", "UV1", "UV2"); + + private static boolean shouldOverrideShaders() { + WorldRenderingPipeline pipeline = Iris.getPipelineManager().getPipelineNullable(); + + if (pipeline instanceof ShaderRenderingPipeline) { + return ((ShaderRenderingPipeline) pipeline).shouldOverrideShaders(); + } else { + return false; + } + } + + @Shadow + public abstract int getId(); + + @Redirect(method = "updateLocations", + at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V", remap = false)) + private void iris$redirectLogSpam(Logger logger, String message, Object arg1, Object arg2) { + if (((Object) this) instanceof ExtendedShader || ((Object) this) instanceof FallbackShader) { + return; + } + + logger.warn(message, arg1, arg2); + } + + @Redirect(method = "(Lnet/minecraft/server/packs/resources/ResourceProvider;Lnet/minecraft/resources/ResourceLocation;Lcom/mojang/blaze3d/vertex/VertexFormat;)V", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/shaders/Uniform;glBindAttribLocation(IILjava/lang/CharSequence;)V")) + public void iris$redirectBindAttributeLocation(int i, int j, CharSequence charSequence) { + if (((Object) this) instanceof ExtendedShader && ATTRIBUTE_LIST.contains(charSequence)) { + Uniform.glBindAttribLocation(i, j, "iris_" + charSequence); + } else { + Uniform.glBindAttribLocation(i, j, charSequence); + } + } + + @Inject(method = "apply", at = @At("TAIL")) + private void iris$lockDepthColorState(CallbackInfo ci) { + if (((Object) this) instanceof ExtendedShader || ((Object) this) instanceof FallbackShader || !shouldOverrideShaders()) { + return; + } + + DepthColorStorage.disableDepthColor(); + } + + @Inject(method = "clear", at = @At("HEAD")) + private void iris$unlockDepthColorState(CallbackInfo ci) { + if (((Object) this) instanceof ExtendedShader || ((Object) this) instanceof FallbackShader || !shouldOverrideShaders()) { + return; + } + + DepthColorStorage.unlockDepthColor(); + } + + @Redirect(method = "(Lnet/minecraft/server/packs/resources/ResourceProvider;Lnet/minecraft/resources/ResourceLocation;Lcom/mojang/blaze3d/vertex/VertexFormat;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/GsonHelper;parse(Ljava/io/Reader;)Lcom/google/gson/JsonObject;")) + public JsonObject iris$setupGeometryShader(Reader reader, ResourceProvider resourceProvider, ResourceLocation name, VertexFormat vertexFormat) { + this.iris$createExtraShaders(resourceProvider, name); + return GsonHelper.parse(reader); + } + + @Override + public void iris$createExtraShaders(ResourceProvider provider, ResourceLocation name) { + //no-op, used for ExtendedShader to call before the super constructor + } +} diff --git a/src/main/java/net/irisshaders/iris/mixin/OculusMixinPlugin.java b/src/main/java/net/irisshaders/iris/mixin/OculusMixinPlugin.java index 281d0f7aed..c7c9529b52 100644 --- a/src/main/java/net/irisshaders/iris/mixin/OculusMixinPlugin.java +++ b/src/main/java/net/irisshaders/iris/mixin/OculusMixinPlugin.java @@ -1,4 +1,4 @@ -package net.coderbot.iris.mixin; +package net.irisshaders.iris.mixin; import net.minecraftforge.fml.loading.LoadingModList; import org.objectweb.asm.tree.ClassNode; diff --git a/src/main/java/net/irisshaders/iris/mixin/devenvironment/MixinMinecraft_NoAuthInDev.java b/src/main/java/net/irisshaders/iris/mixin/devenvironment/MixinMinecraft_NoAuthInDev.java deleted file mode 100644 index 8aea63c54c..0000000000 --- a/src/main/java/net/irisshaders/iris/mixin/devenvironment/MixinMinecraft_NoAuthInDev.java +++ /dev/null @@ -1,33 +0,0 @@ -package net.irisshaders.iris.mixin.devenvironment; - -import com.mojang.authlib.minecraft.UserApiService; -import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; -import net.minecraft.client.Minecraft; -import net.minecraft.client.main.GameConfig; -import org.slf4j.Logger; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -/** - * Suppresses Minecraft's authentication check in development environments. It's unnecessary log spam, and there's no - * need to send off a network request to Microsoft telling them that we're using Fabric/Quilt every time we launch the - * game in the development environment. - * - *

This also disables telemetry as a side-effect.

- */ -@Mixin(Minecraft.class) -public class MixinMinecraft_NoAuthInDev { - @Shadow - @Final - private static Logger LOGGER; - - @Inject(method = "createUserApiService", at = @At("HEAD"), cancellable = true) - private void iris$noSocialInteractionsInDevelopment(YggdrasilAuthenticationService yggdrasilAuthenticationService, GameConfig arg, CallbackInfoReturnable cir) { - LOGGER.info("[Iris] Suppressing Yggdrasil authentication check because this is a development environment"); - cir.setReturnValue(UserApiService.OFFLINE); - } -} diff --git a/src/main/java/net/irisshaders/iris/mixin/devenvironment/MixinProfileKeyPairManager.java b/src/main/java/net/irisshaders/iris/mixin/devenvironment/MixinProfileKeyPairManager.java deleted file mode 100644 index c6d6b3a676..0000000000 --- a/src/main/java/net/irisshaders/iris/mixin/devenvironment/MixinProfileKeyPairManager.java +++ /dev/null @@ -1,8 +0,0 @@ -package net.irisshaders.iris.mixin.devenvironment; - -import net.minecraft.client.multiplayer.ProfileKeyPairManager; -import org.spongepowered.asm.mixin.Mixin; - -@Mixin(ProfileKeyPairManager.class) -public interface MixinProfileKeyPairManager { -} diff --git a/src/main/java/net/irisshaders/iris/mixin/devenvironment/MixinSharedConstants_LazyDfu.java b/src/main/java/net/irisshaders/iris/mixin/devenvironment/MixinSharedConstants_LazyDfu.java deleted file mode 100644 index 8cc4da9a91..0000000000 --- a/src/main/java/net/irisshaders/iris/mixin/devenvironment/MixinSharedConstants_LazyDfu.java +++ /dev/null @@ -1,9 +0,0 @@ -package net.irisshaders.iris.mixin.devenvironment; - -import net.minecraft.SharedConstants; -import org.spongepowered.asm.mixin.Mixin; - -// use a higher priority to apply after LazyDFU, to avoid a conflict. -@Mixin(value = SharedConstants.class, priority = 1010) -public class MixinSharedConstants_LazyDfu { -} diff --git a/src/main/java/net/irisshaders/iris/mixin/entity_render_context/MixinHumanoidArmorLayer.java b/src/main/java/net/irisshaders/iris/mixin/entity_render_context/MixinHumanoidArmorLayer.java index 33319fc4f4..03ffc2be12 100644 --- a/src/main/java/net/irisshaders/iris/mixin/entity_render_context/MixinHumanoidArmorLayer.java +++ b/src/main/java/net/irisshaders/iris/mixin/entity_render_context/MixinHumanoidArmorLayer.java @@ -27,7 +27,7 @@ @Mixin(HumanoidArmorLayer.class) public abstract class MixinHumanoidArmorLayer, A extends HumanoidModel> - extends RenderLayer { + extends RenderLayer { private int backupValue = 0; public MixinHumanoidArmorLayer(RenderLayerParent pRenderLayer0) { @@ -62,4 +62,4 @@ private void changeTrimTemp2(ArmorMaterial pHumanoidArmorLayer0, PoseStack pPose private void changeId2(CallbackInfo ci) { CapturedRenderingState.INSTANCE.setCurrentRenderedItem(0); } -} \ No newline at end of file +} diff --git a/src/main/java/net/irisshaders/iris/mixin/fantastic/MixinParticleEngine.java b/src/main/java/net/irisshaders/iris/mixin/fantastic/MixinParticleEngine.java index 5881b2888b..278e4f0e32 100644 --- a/src/main/java/net/irisshaders/iris/mixin/fantastic/MixinParticleEngine.java +++ b/src/main/java/net/irisshaders/iris/mixin/fantastic/MixinParticleEngine.java @@ -71,7 +71,7 @@ public class MixinParticleEngine implements PhasedParticleEngine { @Unique private ParticleRenderingPhase phase = ParticleRenderingPhase.EVERYTHING; - @Redirect(remap = false, method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;FLnet/minecraft/client/renderer/culling/Frustum;)V", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;setShader(Ljava/util/function/Supplier;)V")) + @Redirect(method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/renderer/LightTexture;Lnet/minecraft/client/Camera;FLnet/minecraft/client/renderer/culling/Frustum;)V", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;setShader(Ljava/util/function/Supplier;)V"), remap = false) private void iris$changeParticleShader(Supplier pSupplier0) { RenderSystem.setShader(phase == ParticleRenderingPhase.TRANSLUCENT ? ShaderAccess::getParticleTranslucentShader : pSupplier0); } @@ -96,4 +96,4 @@ public class MixinParticleEngine implements PhasedParticleEngine { public void setParticleRenderingPhase(ParticleRenderingPhase phase) { this.phase = phase; } -} \ No newline at end of file +} diff --git a/src/main/java/net/irisshaders/iris/mixin/shadows/MixinPreventRebuildNearInShadowPass.java b/src/main/java/net/irisshaders/iris/mixin/shadows/MixinPreventRebuildNearInShadowPass.java index 98bb75df9b..86cc651ae0 100644 --- a/src/main/java/net/irisshaders/iris/mixin/shadows/MixinPreventRebuildNearInShadowPass.java +++ b/src/main/java/net/irisshaders/iris/mixin/shadows/MixinPreventRebuildNearInShadowPass.java @@ -26,4 +26,4 @@ @Mixin(value = LevelRenderer.class, priority = 1010) public abstract class MixinPreventRebuildNearInShadowPass { -} \ No newline at end of file +} diff --git a/src/main/java/net/irisshaders/iris/mixin/vertices/MixinBufferBuilder.java b/src/main/java/net/irisshaders/iris/mixin/vertices/MixinBufferBuilder.java index eb6606f5a9..a90c47e226 100644 --- a/src/main/java/net/irisshaders/iris/mixin/vertices/MixinBufferBuilder.java +++ b/src/main/java/net/irisshaders/iris/mixin/vertices/MixinBufferBuilder.java @@ -33,7 +33,7 @@ /** * Dynamically and transparently extends the vanilla vertex formats with additional data */ -@Mixin(BufferBuilder.class) +@Mixin(BufferBuilder.class) // TODO OCULUS: ??? public abstract class MixinBufferBuilder extends DefaultedVertexConsumer implements BufferVertexConsumer, BlockSensitiveBufferBuilder, ExtendingBufferBuilder, IrisExtendedBufferBuilder { @Unique private final BufferBuilderPolygonView polygon = new BufferBuilderPolygonView(); @@ -326,4 +326,4 @@ public void endBlock() { public int iris$currentLocalPosZ() { return currentLocalPosZ; } -} \ No newline at end of file +} diff --git a/src/main/java/net/irisshaders/iris/pipeline/transform/TransformPatcher.java b/src/main/java/net/irisshaders/iris/pipeline/transform/TransformPatcher.java index d86f34e25a..158c8e9529 100644 --- a/src/main/java/net/irisshaders/iris/pipeline/transform/TransformPatcher.java +++ b/src/main/java/net/irisshaders/iris/pipeline/transform/TransformPatcher.java @@ -78,7 +78,7 @@ public class TransformPatcher { public boolean isTokenAllowed(Token token) { if (!super.isTokenAllowed(token)) { throw new IllegalArgumentException("Unparsed preprocessor directives such as '" + token.getText() - + "' may not be present at this stage of shader processing!"); + + "' may not be present at this stage of shader processing!"); } return true; } @@ -117,13 +117,13 @@ public TranslationUnit parseTranslationUnit(Root rootInstance, String input) { // check for illegal references to internal Iris shader interfaces internalPrefixes.stream() - .flatMap(root.getPrefixIdentifierIndex()::prefixQueryFlat) - .findAny() - .ifPresent(id -> { - throw new IllegalArgumentException( - "Detected a potential reference to unstable and internal Iris shader interfaces (iris_, irisMain and moj_import). This isn't currently supported. Violation: " - + id.getName() + ". See debugging.md for more information."); - }); + .flatMap(root.getPrefixIdentifierIndex()::prefixQueryFlat) + .findAny() + .ifPresent(id -> { + throw new IllegalArgumentException( + "Detected a potential reference to unstable and internal Iris shader interfaces (iris_, irisMain and moj_import). This isn't currently supported. Violation: " + + id.getName() + ". See debugging.md for more information."); + }); root.indexBuildSession(() -> { VersionStatement versionStatement = tree.getVersionStatement(); @@ -189,7 +189,7 @@ public TranslationUnit parseTranslationUnit(Root rootInstance, String input) { } } TextureTransformer.transform(transformer, tree, root, - parameters.getTextureStage(), parameters.getTextureMap()); + parameters.getTextureStage(), parameters.getTextureMap()); CompatibilityTransformer.transformEach(transformer, tree, root, parameters); }); } @@ -201,9 +201,9 @@ public TranslationUnit parseTranslationUnit(Root rootInstance, String input) { } private static Map transformInternal( - String name, - Map inputs, - Parameters parameters) { + String name, + Map inputs, + Parameters parameters) { try { return transformer.transform(inputs, parameters); } catch (TransformationException | ParsingException | IllegalStateException | IllegalArgumentException e) { @@ -279,48 +279,48 @@ private static Map transformCompute(String name, String } public static Map patchVanilla( - String name, String vertex, String geometry, String tessControl, String tessEval, String fragment, - AlphaTest alpha, boolean isLines, - boolean hasChunkOffset, - ShaderAttributeInputs inputs, - Object2ObjectMap, String> textureMap) { + String name, String vertex, String geometry, String tessControl, String tessEval, String fragment, + AlphaTest alpha, boolean isLines, + boolean hasChunkOffset, + ShaderAttributeInputs inputs, + Object2ObjectMap, String> textureMap) { return transform(name, vertex, geometry, tessControl, tessEval, fragment, - new VanillaParameters(Patch.VANILLA, textureMap, alpha, isLines, hasChunkOffset, inputs, geometry != null, tessControl != null || tessEval != null)); + new VanillaParameters(Patch.VANILLA, textureMap, alpha, isLines, hasChunkOffset, inputs, geometry != null, tessControl != null || tessEval != null)); } public static Map patchDH( - String name, String vertex, String tessControl, String tessEval, String geometry, String fragment, - Object2ObjectMap, String> textureMap) { + String name, String vertex, String tessControl, String tessEval, String geometry, String fragment, + Object2ObjectMap, String> textureMap) { return transform(name, vertex, geometry, tessControl, tessEval, fragment, - new Parameters(Patch.DH, textureMap) { - @Override - public TextureStage getTextureStage() { - return TextureStage.GBUFFERS_AND_SHADOW; - } - }); + new Parameters(Patch.DH, textureMap) { + @Override + public TextureStage getTextureStage() { + return TextureStage.GBUFFERS_AND_SHADOW; + } + }); } public static Map patchSodium(String name, String vertex, String geometry, String tessControl, String tessEval, String fragment, AlphaTest alpha, ShaderAttributeInputs inputs, Object2ObjectMap, String> textureMap) { return transform(name, vertex, geometry, tessControl, tessEval, fragment, - new SodiumParameters(Patch.SODIUM, textureMap, alpha, inputs)); + new SodiumParameters(Patch.SODIUM, textureMap, alpha, inputs)); } public static Map patchComposite( - String name, String vertex, String geometry, String fragment, - TextureStage stage, - Object2ObjectMap, String> textureMap) { + String name, String vertex, String geometry, String fragment, + TextureStage stage, + Object2ObjectMap, String> textureMap) { return transform(name, vertex, geometry, null, null, fragment, new TextureStageParameters(Patch.COMPOSITE, stage, textureMap)); } public static String patchCompute( - String name, String compute, - TextureStage stage, - Object2ObjectMap, String> textureMap) { + String name, String compute, + TextureStage stage, + Object2ObjectMap, String> textureMap) { return transformCompute(name, compute, new ComputeParameters(Patch.COMPUTE, stage, textureMap)) - .getOrDefault(PatchShaderType.COMPUTE, null); + .getOrDefault(PatchShaderType.COMPUTE, null); } private static class CacheKey { diff --git a/src/main/java/net/irisshaders/iris/shaderpack/materialmap/BlockMaterialMapping.java b/src/main/java/net/irisshaders/iris/shaderpack/materialmap/BlockMaterialMapping.java index 47b8b6c802..c80d8f3cc4 100644 --- a/src/main/java/net/irisshaders/iris/shaderpack/materialmap/BlockMaterialMapping.java +++ b/src/main/java/net/irisshaders/iris/shaderpack/materialmap/BlockMaterialMapping.java @@ -3,9 +3,11 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap; import net.irisshaders.iris.Iris; import net.minecraft.client.renderer.RenderType; +import net.minecraft.core.Holder; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; @@ -13,10 +15,13 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.Property; +import net.minecraftforge.client.ChunkRenderTypeSet; +import net.minecraftforge.registries.ForgeRegistries; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; public class BlockMaterialMapping { public static Object2IntMap createBlockStateIdMap(Int2ObjectMap> blockPropertiesMap) { @@ -31,15 +36,15 @@ public static Object2IntMap createBlockStateIdMap(Int2ObjectMap createBlockTypeMap(Map blockPropertiesMap) { - Map blockTypeIds = new Reference2ReferenceOpenHashMap<>(); + public static Map, ChunkRenderTypeSet> createBlockTypeMap(Map blockPropertiesMap) { + Map, ChunkRenderTypeSet> blockTypeIds = new Object2ObjectOpenHashMap<>(); blockPropertiesMap.forEach((id, blockType) -> { ResourceLocation resourceLocation = new ResourceLocation(id.getNamespace(), id.getName()); - Block block = BuiltInRegistries.BLOCK.get(resourceLocation); + Holder.Reference block = ForgeRegistries.BLOCKS.getDelegateOrThrow(resourceLocation); - blockTypeIds.put(block, convertBlockToRenderType(blockType)); + blockTypeIds.put(block, ChunkRenderTypeSet.of(convertBlockToRenderType(blockType))); }); return blockTypeIds; @@ -67,14 +72,15 @@ private static void addBlockStates(BlockEntry entry, Object2IntMap i throw new IllegalStateException("Failed to get entry for " + intId, exception); } - Block block = BuiltInRegistries.BLOCK.get(resourceLocation); + Optional> delegateOpt = ForgeRegistries.BLOCKS.getDelegate(resourceLocation); // If the block doesn't exist, by default the registry will return AIR. That probably isn't what we want. - // TODO: Assuming that Registry.BLOCK.getDefaultId() == "minecraft:air" here - if (block == Blocks.AIR) { + if (delegateOpt.isEmpty() || !delegateOpt.get().isBound()) { return; } + Block block = delegateOpt.get().get(); + Map propertyPredicates = entry.propertyPredicates(); if (propertyPredicates.isEmpty()) { diff --git a/src/main/java/net/irisshaders/iris/shaderpack/materialmap/WorldRenderingSettings.java b/src/main/java/net/irisshaders/iris/shaderpack/materialmap/WorldRenderingSettings.java index 351858f0b7..e1e55bd3e2 100644 --- a/src/main/java/net/irisshaders/iris/shaderpack/materialmap/WorldRenderingSettings.java +++ b/src/main/java/net/irisshaders/iris/shaderpack/materialmap/WorldRenderingSettings.java @@ -3,8 +3,10 @@ import it.unimi.dsi.fastutil.objects.Object2IntFunction; import it.unimi.dsi.fastutil.objects.Object2IntMap; import net.minecraft.client.renderer.RenderType; +import net.minecraft.core.Holder; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.client.ChunkRenderTypeSet; import org.jetbrains.annotations.Nullable; import java.util.Map; @@ -14,7 +16,7 @@ public class WorldRenderingSettings { private boolean reloadRequired; private Object2IntMap blockStateIds; - private Map blockTypeIds; + private Map, ChunkRenderTypeSet> blockTypeIds; private Object2IntFunction entityIds; private Object2IntFunction itemIds; private float ambientOcclusionLevel; @@ -61,11 +63,11 @@ public void setBlockStateIds(Object2IntMap blockStateIds) { } @Nullable - public Map getBlockTypeIds() { + public Map, ChunkRenderTypeSet> getBlockTypeIds() { return blockTypeIds; } - public void setBlockTypeIds(Map blockTypeIds) { + public void setBlockTypeIds(Map, ChunkRenderTypeSet> blockTypeIds) { if (this.blockTypeIds != null && this.blockTypeIds.equals(blockTypeIds)) { return; } diff --git a/src/main/java/net/irisshaders/iris/shadows/ShadowRenderer.java b/src/main/java/net/irisshaders/iris/shadows/ShadowRenderer.java index 0a6772ca6d..bc759726c8 100644 --- a/src/main/java/net/irisshaders/iris/shadows/ShadowRenderer.java +++ b/src/main/java/net/irisshaders/iris/shadows/ShadowRenderer.java @@ -48,7 +48,6 @@ import org.lwjgl.opengl.ARBTextureSwizzle; import org.lwjgl.opengl.GL20C; import org.lwjgl.opengl.GL30C; -import org.lwjgl.opengl.GL43C; import java.util.ArrayList; import java.util.Comparator; diff --git a/src/main/java/net/irisshaders/iris/texture/pbr/loader/AtlasPBRLoader.java b/src/main/java/net/irisshaders/iris/texture/pbr/loader/AtlasPBRLoader.java index d450bdbe2e..9c894f6522 100644 --- a/src/main/java/net/irisshaders/iris/texture/pbr/loader/AtlasPBRLoader.java +++ b/src/main/java/net/irisshaders/iris/texture/pbr/loader/AtlasPBRLoader.java @@ -32,10 +32,10 @@ public class AtlasPBRLoader implements PBRTextureLoader { public static final ChannelMipmapGenerator LINEAR_MIPMAP_GENERATOR = new ChannelMipmapGenerator( - LinearBlendFunction.INSTANCE, - LinearBlendFunction.INSTANCE, - LinearBlendFunction.INSTANCE, - LinearBlendFunction.INSTANCE + LinearBlendFunction.INSTANCE, + LinearBlendFunction.INSTANCE, + LinearBlendFunction.INSTANCE, + LinearBlendFunction.INSTANCE ); @Override diff --git a/src/main/java/net/irisshaders/iris/vertices/IrisExtendedBufferBuilder.java b/src/main/java/net/irisshaders/iris/vertices/IrisExtendedBufferBuilder.java index 04db9e9e05..5d15b23770 100644 --- a/src/main/java/net/irisshaders/iris/vertices/IrisExtendedBufferBuilder.java +++ b/src/main/java/net/irisshaders/iris/vertices/IrisExtendedBufferBuilder.java @@ -2,7 +2,7 @@ import com.mojang.blaze3d.vertex.VertexFormat; -public interface IrisExtendedBufferBuilder { +public interface IrisExtendedBufferBuilder { // TODO OCULUS: Deleted? VertexFormat iris$format(); VertexFormat.Mode iris$mode(); diff --git a/src/main/resources/mixins.oculus.compat.pixelmon.json b/src/main/resources/mixins.oculus.compat.pixelmon.json new file mode 100644 index 0000000000..d762ceb5f1 --- /dev/null +++ b/src/main/resources/mixins.oculus.compat.pixelmon.json @@ -0,0 +1,13 @@ +{ + "required": true, + "minVersion": "0.8", + "plugin": "net.irisshaders.iris.compat.pixelmon.mixin.OculusPixelmonCompatMixinPlugin", + "package": "net.irisshaders.iris.compat.pixelmon.mixin", + "compatibilityLevel": "JAVA_8", + "client": [ + "MixinNormalizedFace" + ], + "injectors": { + "defaultRequire": 1 + } +} \ No newline at end of file diff --git a/src/main/resources/mixins.oculus.json b/src/main/resources/mixins.oculus.json index 1533dceae1..40192bea4c 100644 --- a/src/main/resources/mixins.oculus.json +++ b/src/main/resources/mixins.oculus.json @@ -2,6 +2,7 @@ "required": true, "minVersion": "0.8", "package": "net.irisshaders.iris.mixin", + "plugin": "net.irisshaders.iris.mixin.OculusMixinPlugin", "compatibilityLevel": "JAVA_8", "client": [ "DimensionTypeAccessor", @@ -13,7 +14,7 @@ "MixinBiomes", "MixinBlockStateBehavior", "MixinBooleanState", - "MixinBiomes", + "MixinChunkRenderDispatcherRebuildTask", "MixinChainedJsonException", "MixinClientLanguage", "MixinClientPacketListener", @@ -32,8 +33,6 @@ "MixinLevelRenderer", "MixinLightningBoltRenderer", "MixinLightTexture", - "MixinMinecraft_Images", - "MixinMinecraft_Keybinds", "MixinMinecraft_PipelineManagement", "MixinModelViewBobbing", "MixinOptions_Entrypoint", @@ -44,6 +43,7 @@ "MixinRenderSystem", "MixinRenderTarget", "MixinScreenEffectRenderer", + "MixinShaderInstance", "MixinSystemReport", "MixinTheEndPortalRenderer", "MixinTitleScreen", diff --git a/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/impl/vertex_format/SodiumBufferBuilderPolygonView.java b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/impl/vertex_format/SodiumBufferBuilderPolygonView.java index babade60c7..7d76ba9dba 100644 --- a/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/impl/vertex_format/SodiumBufferBuilderPolygonView.java +++ b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/impl/vertex_format/SodiumBufferBuilderPolygonView.java @@ -4,7 +4,7 @@ import net.caffeinemc.mods.sodium.api.vertex.attributes.common.TextureAttribute; import net.irisshaders.iris.vertices.views.QuadView; -public class SodiumBufferBuilderPolygonView implements QuadView { +public class SodiumBufferBuilderPolygonView implements QuadView { // TODO OCULUS: Deleted? private long ptr; private int attributeOffsetPosition; private int attributeOffsetTexture; diff --git a/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/IrisSodiumCompatMixinPlugin.java b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/IrisSodiumCompatMixinPlugin.java index 16ecb7bdef..5bfbe6c96d 100644 --- a/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/IrisSodiumCompatMixinPlugin.java +++ b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/IrisSodiumCompatMixinPlugin.java @@ -51,4 +51,4 @@ public void preApply(String targetClassName, ClassNode targetClass, String mixin public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { } -} \ No newline at end of file +} diff --git a/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/block_id/MixinChunkRenderRebuildTask.java b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/block_id/MixinChunkRenderRebuildTask.java index e34bb66277..5cbadde5d6 100644 --- a/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/block_id/MixinChunkRenderRebuildTask.java +++ b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/block_id/MixinChunkRenderRebuildTask.java @@ -83,8 +83,8 @@ public class MixinChunkRenderRebuildTask { } } - @Inject(method = "execute(Lme/jellysquid/mods/sodium/client/render/chunk/compile/ChunkBuildContext;Lme/jellysquid/mods/sodium/client/util/task/CancellationToken;)Lme/jellysquid/mods/sodium/client/render/chunk/compile/ChunkBuildOutput;", remap = false, at = @At(value = "INVOKE", - target = "Lme/jellysquid/mods/sodium/client/render/chunk/compile/pipeline/FluidRenderer;render(Lme/jellysquid/mods/sodium/client/world/WorldSlice;Lnet/minecraft/world/level/material/FluidState;Lnet/minecraft/core/BlockPos;Lnet/minecraft/core/BlockPos;Lme/jellysquid/mods/sodium/client/render/chunk/compile/ChunkBuildBuffers;)V"), locals = LocalCapture.CAPTURE_FAILHARD) + @Inject(method = "execute(Lme/jellysquid/mods/sodium/client/render/chunk/compile/ChunkBuildContext;Lme/jellysquid/mods/sodium/client/util/task/CancellationToken;)Lme/jellysquid/mods/sodium/client/render/chunk/compile/ChunkBuildOutput;", at = @At(value = "INVOKE", + target = "Lme/jellysquid/mods/sodium/client/render/chunk/compile/pipeline/FluidRenderer;render(Lme/jellysquid/mods/sodium/client/world/WorldSlice;Lnet/minecraft/world/level/material/FluidState;Lnet/minecraft/core/BlockPos;Lnet/minecraft/core/BlockPos;Lme/jellysquid/mods/sodium/client/render/chunk/compile/ChunkBuildBuffers;)V"), locals = LocalCapture.CAPTURE_FAILHARD, remap = false) private void iris$wrapGetFluidLayer(ChunkBuildContext context, CancellationToken cancellationSource, CallbackInfoReturnable cir, BuiltSectionInfo.Builder renderData, VisGraph occluder, ChunkBuildBuffers buffers, diff --git a/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/clouds/MixinCloudRenderer.java b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/clouds/MixinCloudRenderer.java index ecd372b7f1..6b712e9322 100644 --- a/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/clouds/MixinCloudRenderer.java +++ b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/clouds/MixinCloudRenderer.java @@ -62,7 +62,7 @@ private static void writeIrisVertex(long buffer, float x, float y, float z, int @Shadow protected abstract void applyFogModifiers(ClientLevel world, FogRenderer.FogData fogData, LocalPlayer player, int cloudDistance, float tickDelta); - @Inject(method = "render", remap = false, at = @At(value = "HEAD"), cancellable = true) + @Inject(method = "render", at = @At(value = "HEAD"), cancellable = true, remap = false) private void buildIrisVertexBuffer(ClientLevel world, LocalPlayer player, PoseStack matrices, Matrix4f projectionMatrix, float ticks, float tickDelta, double cameraX, double cameraY, double cameraZ, CallbackInfo ci) { if (IrisApi.getInstance().isShaderPackInUse()) { ci.cancel(); @@ -75,10 +75,15 @@ public void renderIris(@Nullable ClientLevel world, LocalPlayer player, PoseStac return; } - Vec3 color = world.getCloudColor(tickDelta); - float cloudHeight = world.effects().getCloudHeight(); + // Vanilla uses NaN height as a way to disable cloud rendering + if (Float.isNaN(cloudHeight)) { + return; + } + + Vec3 color = world.getCloudColor(tickDelta); + double cloudTime = (ticks + tickDelta) * 0.03F; double cloudCenterX = (cameraX + cloudTime); double cloudCenterZ = (cameraZ) + 0.33D; @@ -175,12 +180,12 @@ public void renderIris(@Nullable ClientLevel world, LocalPlayer player, PoseStac RenderSystem.setShaderFogStart(previousStart); } - @ModifyArg(method = "rebuildGeometry", remap = false, at = @At(value = "INVOKE", target = "Lorg/lwjgl/system/MemoryStack;nmalloc(I)J")) + @ModifyArg(method = "rebuildGeometry", at = @At(value = "INVOKE", target = "Lorg/lwjgl/system/MemoryStack;nmalloc(I)J"), remap = false) private int allocateNewSize(int size) { return IrisApi.getInstance().isShaderPackInUse() ? 480 : size; } - @ModifyArg(method = "rebuildGeometry", remap = false, at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/api/vertex/buffer/VertexBufferWriter;push(Lorg/lwjgl/system/MemoryStack;JILnet/caffeinemc/mods/sodium/api/vertex/format/VertexFormatDescription;)V"), index = 3) + @ModifyArg(method = "rebuildGeometry", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/api/vertex/buffer/VertexBufferWriter;push(Lorg/lwjgl/system/MemoryStack;JILnet/caffeinemc/mods/sodium/api/vertex/format/VertexFormatDescription;)V"), index = 3, remap = false) private VertexFormatDescription modifyArgIris(VertexFormatDescription vertexFormatDescription) { if (IrisApi.getInstance().isShaderPackInUse()) { return CloudVertex.FORMAT; diff --git a/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/shader_overrides/MixinChunkBuilderMeshingTask.java b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/shader_overrides/MixinChunkBuilderMeshingTask.java new file mode 100644 index 0000000000..5d3f11cb18 --- /dev/null +++ b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/shader_overrides/MixinChunkBuilderMeshingTask.java @@ -0,0 +1,43 @@ +package net.irisshaders.iris.compat.sodium.mixin.shader_overrides; + +import me.jellysquid.mods.sodium.client.render.chunk.compile.tasks.ChunkBuilderMeshingTask; +import net.irisshaders.iris.shaderpack.materialmap.WorldRenderingSettings; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.core.Holder; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.client.ChunkRenderTypeSet; +import net.minecraftforge.client.model.data.ModelData; +import net.minecraftforge.registries.ForgeRegistries; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import java.util.Map; + +@Mixin(ChunkBuilderMeshingTask.class) +public class MixinChunkBuilderMeshingTask { + /** + * @author embeddedt + * @reason On Forge, render types are not intended to be driven by a central registry like in vanilla; instead, they + * get queried from the block model during meshing. Only the default baked models defer to the vanilla registry; + * specifying a render type in the model JSON or using a custom model will return its own value. Thus, we need + * to redirect the access at a higher level. + */ + @Redirect(method = "execute(Lme/jellysquid/mods/sodium/client/render/chunk/compile/ChunkBuildContext;Lme/jellysquid/mods/sodium/client/util/task/CancellationToken;)Lme/jellysquid/mods/sodium/client/render/chunk/compile/ChunkBuildOutput;", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/resources/model/BakedModel;getRenderTypes(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/util/RandomSource;Lnet/minecraftforge/client/model/data/ModelData;)Lnet/minecraftforge/client/ChunkRenderTypeSet;"), + remap = false) + private ChunkRenderTypeSet oculus$overrideRenderTypes(BakedModel instance, BlockState blockState, RandomSource randomSource, ModelData modelData) { + Map, ChunkRenderTypeSet> idMap = WorldRenderingSettings.INSTANCE.getBlockTypeIds(); + if (idMap != null) { + ChunkRenderTypeSet type = idMap.get(ForgeRegistries.BLOCKS.getDelegateOrThrow(blockState.getBlock())); + if (type != null) { + return type; + } + } + + return instance.getRenderTypes(blockState, randomSource, modelData); + } +} + diff --git a/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/shadow_map/MixinRenderSectionManager.java b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/shadow_map/MixinRenderSectionManager.java index 983fa1dd8f..eedfa2ce82 100644 --- a/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/shadow_map/MixinRenderSectionManager.java +++ b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/shadow_map/MixinRenderSectionManager.java @@ -21,7 +21,7 @@ public class MixinRenderSectionManager { @Unique private @NotNull SortedRenderLists shadowRenderLists = SortedRenderLists.empty(); - @Redirect(method = "createTerrainRenderList", remap = false, at = @At(value = "FIELD", target = "Lme/jellysquid/mods/sodium/client/render/chunk/RenderSectionManager;renderLists:Lme/jellysquid/mods/sodium/client/render/chunk/lists/SortedRenderLists;")) + @Redirect(method = "createTerrainRenderList", at = @At(value = "FIELD", target = "Lme/jellysquid/mods/sodium/client/render/chunk/RenderSectionManager;renderLists:Lme/jellysquid/mods/sodium/client/render/chunk/lists/SortedRenderLists;"), remap = false) private void useShadowRenderList(RenderSectionManager instance, SortedRenderLists value) { if (ShadowRenderingState.areShadowsCurrentlyBeingRendered()) { shadowRenderLists = value; @@ -30,7 +30,7 @@ private void useShadowRenderList(RenderSectionManager instance, SortedRenderList } } - @Inject(method = "update", remap = false, at = @At(value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/render/chunk/RenderSectionManager;createTerrainRenderList(Lnet/minecraft/client/Camera;Lme/jellysquid/mods/sodium/client/render/viewport/Viewport;IZ)V", shift = At.Shift.AFTER), cancellable = true) + @Inject(method = "update", at = @At(value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/render/chunk/RenderSectionManager;createTerrainRenderList(Lnet/minecraft/client/Camera;Lme/jellysquid/mods/sodium/client/render/viewport/Viewport;IZ)V", shift = At.Shift.AFTER), cancellable = true, remap = false) private void cancelIfShadow(Camera camera, Viewport viewport, int frame, boolean spectator, CallbackInfo ci) { if (ShadowRenderingState.areShadowsCurrentlyBeingRendered()) ci.cancel(); } diff --git a/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/shadow_map/MixinSodiumWorldRenderer.java b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/shadow_map/MixinSodiumWorldRenderer.java index 539c6986ef..f00ed743a5 100644 --- a/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/shadow_map/MixinSodiumWorldRenderer.java +++ b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/shadow_map/MixinSodiumWorldRenderer.java @@ -55,12 +55,12 @@ private static void renderBlockEntity(PoseStack matrices, RenderBuffers bufferBu throw new IllegalStateException("maybe get Mixin?"); } - @Inject(remap = false, method = "renderBlockEntities(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/RenderBuffers;Lit/unimi/dsi/fastutil/longs/Long2ObjectMap;FLnet/minecraft/client/renderer/MultiBufferSource$BufferSource;DDDLnet/minecraft/client/renderer/blockentity/BlockEntityRenderDispatcher;)V", at = @At("HEAD")) + @Inject(method = "renderBlockEntities(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/RenderBuffers;Lit/unimi/dsi/fastutil/longs/Long2ObjectMap;FLnet/minecraft/client/renderer/MultiBufferSource$BufferSource;DDDLnet/minecraft/client/renderer/blockentity/BlockEntityRenderDispatcher;)V", at = @At("HEAD"), remap = false) private void resetEntityList(PoseStack matrices, RenderBuffers bufferBuilders, Long2ObjectMap> blockBreakingProgressions, float tickDelta, MultiBufferSource.BufferSource immediate, double x, double y, double z, BlockEntityRenderDispatcher blockEntityRenderer, CallbackInfo ci) { beList = 0; } - @Redirect(remap = false, method = "renderBlockEntities(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/RenderBuffers;Lit/unimi/dsi/fastutil/longs/Long2ObjectMap;FLnet/minecraft/client/renderer/MultiBufferSource$BufferSource;DDDLnet/minecraft/client/renderer/blockentity/BlockEntityRenderDispatcher;)V", at = @At(value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/render/SodiumWorldRenderer;renderBlockEntity(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/RenderBuffers;Lit/unimi/dsi/fastutil/longs/Long2ObjectMap;FLnet/minecraft/client/renderer/MultiBufferSource$BufferSource;DDDLnet/minecraft/client/renderer/blockentity/BlockEntityRenderDispatcher;Lnet/minecraft/world/level/block/entity/BlockEntity;)V")) + @Redirect(method = "renderBlockEntities(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/RenderBuffers;Lit/unimi/dsi/fastutil/longs/Long2ObjectMap;FLnet/minecraft/client/renderer/MultiBufferSource$BufferSource;DDDLnet/minecraft/client/renderer/blockentity/BlockEntityRenderDispatcher;)V", at = @At(value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/render/SodiumWorldRenderer;renderBlockEntity(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/RenderBuffers;Lit/unimi/dsi/fastutil/longs/Long2ObjectMap;FLnet/minecraft/client/renderer/MultiBufferSource$BufferSource;DDDLnet/minecraft/client/renderer/blockentity/BlockEntityRenderDispatcher;Lnet/minecraft/world/level/block/entity/BlockEntity;)V"), remap = false) private void addToList(PoseStack bufferBuilder, RenderBuffers entry, Long2ObjectMap> transformer, float stage, MultiBufferSource.BufferSource matrices, double bufferBuilders, double blockBreakingProgressions, double tickDelta, BlockEntityRenderDispatcher immediate, BlockEntity x) { if (!renderLightsOnly || x.getBlockState().getLightEmission() > 0) { renderBlockEntity(bufferBuilder, entry, transformer, stage, matrices, bufferBuilders, blockBreakingProgressions, tickDelta, immediate, x); @@ -68,7 +68,7 @@ private void addToList(PoseStack bufferBuilder, RenderBuffers entry, Long2Object } } - @Redirect(remap = false, method = "renderGlobalBlockEntities", at = @At(value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/render/SodiumWorldRenderer;renderBlockEntity(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/RenderBuffers;Lit/unimi/dsi/fastutil/longs/Long2ObjectMap;FLnet/minecraft/client/renderer/MultiBufferSource$BufferSource;DDDLnet/minecraft/client/renderer/blockentity/BlockEntityRenderDispatcher;Lnet/minecraft/world/level/block/entity/BlockEntity;)V")) + @Redirect(method = "renderGlobalBlockEntities", at = @At(value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/render/SodiumWorldRenderer;renderBlockEntity(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/RenderBuffers;Lit/unimi/dsi/fastutil/longs/Long2ObjectMap;FLnet/minecraft/client/renderer/MultiBufferSource$BufferSource;DDDLnet/minecraft/client/renderer/blockentity/BlockEntityRenderDispatcher;Lnet/minecraft/world/level/block/entity/BlockEntity;)V"), remap = false) private void addToList2(PoseStack bufferBuilder, RenderBuffers entry, Long2ObjectMap> transformer, float stage, MultiBufferSource.BufferSource matrices, double bufferBuilders, double blockBreakingProgressions, double tickDelta, BlockEntityRenderDispatcher immediate, BlockEntity x) { if (!renderLightsOnly || x.getBlockState().getLightEmission() > 0) { renderBlockEntity(bufferBuilder, entry, transformer, stage, matrices, bufferBuilders, blockBreakingProgressions, tickDelta, immediate, x); @@ -76,7 +76,7 @@ private void addToList2(PoseStack bufferBuilder, RenderBuffers entry, Long2Objec } } - @Inject(remap = false, method = "isEntityVisible", at = @At("HEAD"), cancellable = true) + @Inject(method = "isEntityVisible", at = @At("HEAD"), cancellable = true, remap = false) private void iris$overrideEntityCulling(Entity entity, CallbackInfoReturnable cir) { if (ShadowRenderingState.areShadowsCurrentlyBeingRendered()) cir.setReturnValue(true); } diff --git a/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/vertex_format/MixinRegionChunkRenderer.java b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/vertex_format/MixinRegionChunkRenderer.java index 648d2c6970..055a242aae 100644 --- a/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/vertex_format/MixinRegionChunkRenderer.java +++ b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/vertex_format/MixinRegionChunkRenderer.java @@ -1,6 +1,7 @@ package net.irisshaders.iris.compat.sodium.mixin.vertex_format; import me.jellysquid.mods.sodium.client.gl.attribute.GlVertexAttributeBinding; +import me.jellysquid.mods.sodium.client.gl.attribute.GlVertexFormat; import me.jellysquid.mods.sodium.client.gl.buffer.GlBuffer; import me.jellysquid.mods.sodium.client.gl.device.RenderDevice; import me.jellysquid.mods.sodium.client.gl.tessellation.TessellationBinding; @@ -22,30 +23,33 @@ public MixinRegionChunkRenderer(RenderDevice device, ChunkVertexType vertexType) } @Redirect(remap = false, method = "createRegionTessellation", at = @At(value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/gl/tessellation/TessellationBinding;forVertexBuffer(Lme/jellysquid/mods/sodium/client/gl/buffer/GlBuffer;[Lme/jellysquid/mods/sodium/client/gl/attribute/GlVertexAttributeBinding;)Lme/jellysquid/mods/sodium/client/gl/tessellation/TessellationBinding;")) + @SuppressWarnings({"rawtypes", "unchecked"}) private TessellationBinding iris$onInit(GlBuffer buffer, GlVertexAttributeBinding[] attributes) { if (!WorldRenderingSettings.INSTANCE.shouldUseExtendedVertexFormat()) { return TessellationBinding.forVertexBuffer(buffer, attributes); } + GlVertexFormat vertexFormat = this.vertexFormat; + attributes = new GlVertexAttributeBinding[]{ - new GlVertexAttributeBinding(IrisChunkShaderBindingPoints.ATTRIBUTE_POSITION_ID, - vertexFormat.getAttribute(ChunkMeshAttribute.POSITION_MATERIAL_MESH)), - new GlVertexAttributeBinding(IrisChunkShaderBindingPoints.ATTRIBUTE_COLOR, - vertexFormat.getAttribute(ChunkMeshAttribute.COLOR_SHADE)), - new GlVertexAttributeBinding(IrisChunkShaderBindingPoints.ATTRIBUTE_BLOCK_TEXTURE, - vertexFormat.getAttribute(ChunkMeshAttribute.BLOCK_TEXTURE)), - new GlVertexAttributeBinding(IrisChunkShaderBindingPoints.ATTRIBUTE_LIGHT_TEXTURE, - vertexFormat.getAttribute(ChunkMeshAttribute.LIGHT_TEXTURE)), - new GlVertexAttributeBinding(IrisChunkShaderBindingPoints.MID_BLOCK, - vertexFormat.getAttribute(IrisChunkMeshAttributes.MID_BLOCK)), - new GlVertexAttributeBinding(IrisChunkShaderBindingPoints.BLOCK_ID, - vertexFormat.getAttribute(IrisChunkMeshAttributes.BLOCK_ID)), - new GlVertexAttributeBinding(IrisChunkShaderBindingPoints.MID_TEX_COORD, - vertexFormat.getAttribute(IrisChunkMeshAttributes.MID_TEX_COORD)), - new GlVertexAttributeBinding(IrisChunkShaderBindingPoints.TANGENT, - vertexFormat.getAttribute(IrisChunkMeshAttributes.TANGENT)), - new GlVertexAttributeBinding(IrisChunkShaderBindingPoints.NORMAL, - vertexFormat.getAttribute(IrisChunkMeshAttributes.NORMAL)) + new GlVertexAttributeBinding(IrisChunkShaderBindingPoints.ATTRIBUTE_POSITION_ID, + vertexFormat.getAttribute(ChunkMeshAttribute.POSITION_MATERIAL_MESH)), + new GlVertexAttributeBinding(IrisChunkShaderBindingPoints.ATTRIBUTE_COLOR, + vertexFormat.getAttribute(ChunkMeshAttribute.COLOR_SHADE)), + new GlVertexAttributeBinding(IrisChunkShaderBindingPoints.ATTRIBUTE_BLOCK_TEXTURE, + vertexFormat.getAttribute(ChunkMeshAttribute.BLOCK_TEXTURE)), + new GlVertexAttributeBinding(IrisChunkShaderBindingPoints.ATTRIBUTE_LIGHT_TEXTURE, + vertexFormat.getAttribute(ChunkMeshAttribute.LIGHT_TEXTURE)), + new GlVertexAttributeBinding(IrisChunkShaderBindingPoints.MID_BLOCK, + vertexFormat.getAttribute(IrisChunkMeshAttributes.MID_BLOCK)), + new GlVertexAttributeBinding(IrisChunkShaderBindingPoints.BLOCK_ID, + vertexFormat.getAttribute(IrisChunkMeshAttributes.BLOCK_ID)), + new GlVertexAttributeBinding(IrisChunkShaderBindingPoints.MID_TEX_COORD, + vertexFormat.getAttribute(IrisChunkMeshAttributes.MID_TEX_COORD)), + new GlVertexAttributeBinding(IrisChunkShaderBindingPoints.TANGENT, + vertexFormat.getAttribute(IrisChunkMeshAttributes.TANGENT)), + new GlVertexAttributeBinding(IrisChunkShaderBindingPoints.NORMAL, + vertexFormat.getAttribute(IrisChunkMeshAttributes.NORMAL)) }; return TessellationBinding.forVertexBuffer(buffer, attributes); diff --git a/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/vertex_format/MixinSodiumBufferBuilder.java b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/vertex_format/MixinSodiumBufferBuilder.java index 99de6f3eec..2b10e15db5 100644 --- a/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/vertex_format/MixinSodiumBufferBuilder.java +++ b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/vertex_format/MixinSodiumBufferBuilder.java @@ -26,7 +26,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(SodiumBufferBuilder.class) -public abstract class MixinSodiumBufferBuilder implements BlockSensitiveBufferBuilder { +public abstract class MixinSodiumBufferBuilder implements BlockSensitiveBufferBuilder { // TODO OCULUS: Deleted? @Unique private static final int ATTRIBUTE_TANGENT_BIT = 1 << IrisCommonVertexAttributes.TANGENT.ordinal(), diff --git a/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/vertex_format/MixinVertexFormatDescriptionImpl.java b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/vertex_format/MixinVertexFormatDescriptionImpl.java index e8b8c20d77..fccd2ef38b 100644 --- a/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/vertex_format/MixinVertexFormatDescriptionImpl.java +++ b/src/sodiumCompatibility/java/net/irisshaders/iris/compat/sodium/mixin/vertex_format/MixinVertexFormatDescriptionImpl.java @@ -9,7 +9,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(VertexFormatDescriptionImpl.class) -public class MixinVertexFormatDescriptionImpl { +public class MixinVertexFormatDescriptionImpl { // TODO OCULUS: Deleted? // A better fix would be to treat IrisVertexFormats.PADDING_SHORT as padding, but this works too. @Inject(remap = false, method = "checkSimple", at = @At("HEAD"), cancellable = true) private static void iris$forceSimple(VertexFormat format, CallbackInfoReturnable cir) { diff --git a/src/sodiumCompatibility/resources/mixins.oculus.compat.sodium.json b/src/sodiumCompatibility/resources/mixins.oculus.compat.sodium.json index a6e9cd7f9a..73c0c7b12b 100644 --- a/src/sodiumCompatibility/resources/mixins.oculus.compat.sodium.json +++ b/src/sodiumCompatibility/resources/mixins.oculus.compat.sodium.json @@ -29,6 +29,7 @@ "options.MixinSodiumGameOptions", "options.MixinSodiumOptionsGUI", "pbr_animation.MixinSpriteContents", + "shader_overrides.MixinChunkBuilderMeshingTask", "shader_overrides.MixinGlProgram", "shader_overrides.MixinGlRenderDevice", "shader_overrides.MixinRegionChunkRenderer",