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 0cc318056..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; @@ -18,7 +67,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; @@ -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 f5960f5b8..3f260e00d 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=