From 8235a911ab60788d14c1237ed0ef478a3a919b9a Mon Sep 17 00:00:00 2001 From: coolGi Date: Sun, 6 Aug 2023 22:18:48 +0930 Subject: [PATCH 1/2] Fixed sodium not working on post 1.16 --- .../fabric/mixins/mods/sodium/MixinSodiumRenderer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/mods/sodium/MixinSodiumRenderer.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/mods/sodium/MixinSodiumRenderer.java index 0cc318056..9ec2b4669 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/mods/sodium/MixinSodiumRenderer.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/mods/sodium/MixinSodiumRenderer.java @@ -18,7 +18,7 @@ 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) +@Mixin(RegionChunkRenderer.class) public class MixinSodiumRenderer { @Unique SodiumAccessor accessor = null; From b2efeb77e1bc3ad0222f953e72a27ea8ad9335b6 Mon Sep 17 00:00:00 2001 From: coolGi Date: Sun, 6 Aug 2023 23:22:51 +0930 Subject: [PATCH 2/2] Started work on fix for sodium 0.5 for 1.20.x --- fabric/build.gradle | 10 ++-- .../mods/sodium/MixinSodiumRenderer.java | 53 ++++++++++++++++++- .../wrappers/modAccessor/SodiumAccessor.java | 10 +++- versionProperties/1.20.1.properties | 2 +- 4 files changed, 66 insertions(+), 9 deletions(-) diff --git a/fabric/build.gradle b/fabric/build.gradle index c3fc3acef..2e32d9759 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -75,11 +75,11 @@ dependencies { // Sodium addMod("maven.modrinth:sodium:${rootProject.sodium_version}", rootProject.enable_sodium) -// if (rootProject.enable_sodium != "0") { -// implementation "org.joml:joml:1.10.2" -// modImplementation(fabricApi.module("fabric-rendering-data-attachment-v1", rootProject.fabric_api_version)) -// modImplementation(fabricApi.module("fabric-rendering-fluids-v1", rootProject.fabric_api_version)) -// } + if (rootProject.enable_sodium == "2") { + implementation "org.joml:joml:1.10.2" + modImplementation(fabricApi.module("fabric-rendering-data-attachment-v1", rootProject.fabric_api_version)) + modImplementation(fabricApi.module("fabric-rendering-fluids-v1", rootProject.fabric_api_version)) + } // Lithium addMod("maven.modrinth:lithium:${rootProject.lithium_version}", rootProject.enable_lithium) diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/mods/sodium/MixinSodiumRenderer.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/mods/sodium/MixinSodiumRenderer.java index 9ec2b4669..0cc619a19 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/mods/sodium/MixinSodiumRenderer.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/mods/sodium/MixinSodiumRenderer.java @@ -1,6 +1,55 @@ package com.seibel.distanthorizons.fabric.mixins.mods.sodium; -#if POST_MC_1_17_1 +#if POST_MC_1_20_1 +// Sodium 0.5 +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.chunk.ChunkCameraContext; +import me.jellysquid.mods.sodium.client.render.chunk.ChunkRenderMatrices; +import me.jellysquid.mods.sodium.client.render.chunk.RegionChunkRenderer; +import me.jellysquid.mods.sodium.client.render.chunk.lists.SortedRenderLists; +import me.jellysquid.mods.sodium.client.render.chunk.region.RenderRegionManager; +import me.jellysquid.mods.sodium.client.render.chunk.terrain.DefaultTerrainRenderPasses; +import me.jellysquid.mods.sodium.client.render.chunk.terrain.TerrainRenderPass; +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(RegionChunkRenderer.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/terrain/TerrainRenderPass;)V", shift = At.Shift.AFTER)) + private void injectDHLoDRendering(ChunkRenderMatrices matrices, CommandList commandList, RenderRegionManager regions, SortedRenderLists renderLists, TerrainRenderPass renderPass, ChunkCameraContext camera, CallbackInfo ci) + { + if (accessor == null) + { + accessor = (SodiumAccessor)ModAccessorInjector.INSTANCE.get(ISodiumAccessor.class); + } + + if (renderPass.equals(DefaultTerrainRenderPasses.SOLID)) + { + //TODO: use matrices.modelView() and matrices.projection() instead of + // SodiumAccessor.mcModelViewMatrix, + // SodiumAccessor.mcProjectionMatrix, + ClientApi.INSTANCE.renderLods(accessor.levelWrapper, + accessor.mcModelViewMatrix, + accessor.mcProjectionMatrix, + accessor.partialTicks); + } + } + + +} + +#elif POST_MC_1_17_1 +// Sodium 0.3 to 0.4 import com.seibel.distanthorizons.core.api.internal.ClientApi; import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.ISodiumAccessor; @@ -46,7 +95,7 @@ public class MixinSodiumRenderer } #else - +// Sodium 0.2 and under import com.mojang.blaze3d.vertex.PoseStack; import com.seibel.distanthorizons.core.api.internal.ClientApi; import com.seibel.distanthorizons.core.config.Config; diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/SodiumAccessor.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/SodiumAccessor.java index 6726a69d9..f4a29823b 100644 --- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/SodiumAccessor.java +++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/wrappers/modAccessor/SodiumAccessor.java @@ -32,6 +32,7 @@ import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.ISodiumAcce import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper; import me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer; +import me.jellysquid.mods.sodium.client.render.chunk.map.ChunkTrackerHolder; import net.minecraft.client.Minecraft; #if PRE_MC_1_17_1 import net.minecraft.nbt.CompoundTag; @@ -64,7 +65,14 @@ public class SodiumAccessor implements ISodiumAccessor { SodiumWorldRenderer renderer = SodiumWorldRenderer.instance(); LevelHeightAccessor height = Minecraft.getInstance().level; - #if POST_MC_1_18_2 + #if POST_MC_1_20_1 + // TODO: This is just a tmp solution, use a proper solution later + return MC_RENDER.getMaximumRenderedChunks().stream().filter((DhChunkPos chunk) -> { + return (renderer.isBoxVisible( + chunk.getMinBlockX()+1, height.getMinBuildHeight()+1, chunk.getMinBlockZ()+1, + chunk.getMinBlockX()+15, height.getMaxBuildHeight()-1, chunk.getMinBlockZ()+15)); + }).collect(Collectors.toCollection(HashSet::new)); + #elif POST_MC_1_18_2 // 0b11 = Lighted chunk & loaded chunk return renderer.getChunkTracker().getChunks(0b00).filter( (long l) -> { diff --git a/versionProperties/1.20.1.properties b/versionProperties/1.20.1.properties index d50fe48db..a87ea3a65 100644 --- a/versionProperties/1.20.1.properties +++ b/versionProperties/1.20.1.properties @@ -14,7 +14,7 @@ fabric_api_version=0.85.0+1.20.1 starlight_version_fabric= phosphor_version_fabric= lithium_version= - sodium_version=mc1.20-0.4.10 + sodium_version=mc1.20.1-0.5.0 iris_version=1.6.4+1.20.1 bclib_version=3.0.12 immersive_portals_version=