diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java index 569d6c2c5..cec5718f9 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java @@ -96,10 +96,11 @@ public class MixinLevelRenderer private void renderChunkLayer(RenderType renderType, PoseStack modelViewMatrixStack, double cameraXBlockPos, double cameraYBlockPos, double cameraZBlockPos, Matrix4f projectionMatrix, CallbackInfo callback) #endif { - if (Config.Client.Advanced.Debugging.lodOnlyMode.get()) + // FIXME completely disables rendering when sodium is installed + if (Config.Client.Advanced.Debugging.lodOnlyMode.get()) { - callback.cancel(); - } + callback.cancel(); + } } @Redirect(method = diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/mods/sodium/MixinSodiumChunkRenderer.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/mods/sodium/MixinSodiumRenderer.java similarity index 52% rename from fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/mods/sodium/MixinSodiumChunkRenderer.java rename to fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/mods/sodium/MixinSodiumRenderer.java index de6272afe..0cc318056 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/mods/sodium/MixinSodiumChunkRenderer.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/mods/sodium/MixinSodiumRenderer.java @@ -1,10 +1,12 @@ package com.seibel.distanthorizons.fabric.mixins.mods.sodium; +#if POST_MC_1_17_1 import com.seibel.distanthorizons.core.api.internal.ClientApi; import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.ISodiumAccessor; import com.seibel.distanthorizons.fabric.wrappers.modAccessor.SodiumAccessor; import me.jellysquid.mods.sodium.client.gl.device.CommandList; +import me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer; import me.jellysquid.mods.sodium.client.render.chunk.ChunkCameraContext; import me.jellysquid.mods.sodium.client.render.chunk.ChunkRenderList; import me.jellysquid.mods.sodium.client.render.chunk.ChunkRenderMatrices; @@ -16,15 +18,21 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(RegionChunkRenderer.class) -public class MixinSodiumChunkRenderer { +@Mixin(SodiumWorldRenderer.class) +public class MixinSodiumRenderer +{ @Unique SodiumAccessor accessor = null; + @Inject(remap = false, method = "render", at = @At(value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/render/chunk/ShaderChunkRenderer;begin(Lme/jellysquid/mods/sodium/client/render/chunk/passes/BlockRenderPass;)V", shift = At.Shift.AFTER)) - private void injectDHLoDRendering(ChunkRenderMatrices matrices, CommandList commandList, ChunkRenderList list, BlockRenderPass pass, ChunkCameraContext camera, CallbackInfo ci) { - if (accessor == null) { + private void injectDHLoDRendering(ChunkRenderMatrices matrices, CommandList commandList, ChunkRenderList list, BlockRenderPass pass, ChunkCameraContext camera, CallbackInfo ci) + { + if (accessor == null) + { accessor = (SodiumAccessor)ModAccessorInjector.INSTANCE.get(ISodiumAccessor.class); } - if (pass.equals(BlockRenderPass.SOLID)) { + + if (pass.equals(BlockRenderPass.SOLID)) + { //TODO: use matrices.modelView() and matrices.projection() instead of // SodiumAccessor.mcModelViewMatrix, // SodiumAccessor.mcProjectionMatrix, @@ -34,4 +42,46 @@ public class MixinSodiumChunkRenderer { accessor.partialTicks); } } + + } +#else + +import com.mojang.blaze3d.vertex.PoseStack; +import com.seibel.distanthorizons.core.api.internal.ClientApi; +import com.seibel.distanthorizons.core.config.Config; +import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector; +import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.ISodiumAccessor; +import com.seibel.distanthorizons.fabric.wrappers.modAccessor.SodiumAccessor; +import me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer; +import net.minecraft.client.renderer.RenderType; +import org.spongepowered.asm.mixin.Mixin; +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.callback.CallbackInfo; + +@Mixin(SodiumWorldRenderer.class) +public class MixinSodiumRenderer +{ + @Unique SodiumAccessor accessor = null; + + @Inject(method="drawChunkLayer", remap = false, at = @At("HEAD")) + private void drawChunkLayer(RenderType renderLayer, PoseStack matrixStack, double x, double y, double z, CallbackInfo callback) + { + if (this.accessor == null) + { + this.accessor = (SodiumAccessor) ModAccessorInjector.INSTANCE.get(ISodiumAccessor.class); + } + + if (renderLayer == RenderType.solid()) + { + ClientApi.INSTANCE.renderLods(this.accessor.levelWrapper, + this.accessor.mcModelViewMatrix, + this.accessor.mcProjectionMatrix, + this.accessor.partialTicks); + } + } +} + +#endif diff --git a/fabric/src/main/resources/DistantHorizons.fabric.mixins.json b/fabric/src/main/resources/DistantHorizons.fabric.mixins.json index 6bc79df81..0c7244db8 100644 --- a/fabric/src/main/resources/DistantHorizons.fabric.mixins.json +++ b/fabric/src/main/resources/DistantHorizons.fabric.mixins.json @@ -20,7 +20,7 @@ "client.MixinMinecraft", "client.MixinTextureUtil", - "mods.sodium.MixinSodiumChunkRenderer" + "mods.sodium.MixinSodiumRenderer" ], "server": [], "injectors": {