diff --git a/build.gradle b/build.gradle index a6119c0b..232156c6 100644 --- a/build.gradle +++ b/build.gradle @@ -64,15 +64,16 @@ dependencies { modImplementation(fabricApi.module("fabric-api-base", project.fabric_version)) modImplementation(fabricApi.module("fabric-block-view-api-v2", project.fabric_version)) modImplementation(fabricApi.module("fabric-rendering-fluids-v1", project.fabric_version)) + modImplementation(fabricApi.module("fabric-renderer-api-v1", project.fabric_version)) modImplementation("net.fabricmc.fabric-api:fabric-rendering-data-attachment-v1:0.3.40+73761d2e3b") modImplementation(fabricApi.module("fabric-resource-loader-v0", project.fabric_version)) - modImplementation "maven.modrinth:sodium:mc1.21-0.5.11" + modImplementation "maven.modrinth:sodium:mc1.21-0.6.0-beta.1-fabric" //modImplementation "maven.modrinth:c2me-fabric:0.2.0+alpha.10.49+1.19.4" //modImplementation "maven.modrinth:chunks-fade-in:v1.0.3-1.19.4" //modImplementation "maven.modrinth:immersiveportals:v2.7.3-mc1.19.4" - modCompileOnly "maven.modrinth:iris:1.7.0+1.20.6" + modCompileOnly "maven.modrinth:iris:1.8.0-beta.3+1.21-fabric" } diff --git a/gradle.properties b/gradle.properties index a0a7780a..38db456c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,12 +3,12 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://modmuss50.me/fabric.html -minecraft_version=1.21 -yarn_mappings=1.21+build.2 -loader_version=0.15.11 +minecraft_version=1.21.1 +yarn_mappings=1.21.1+build.3 +loader_version=0.16.3 -#Fabric api -fabric_version=0.100.1+1.21 +# Fabric API +fabric_version=0.103.0+1.21.1 # Mod Properties mod_version=0.3.0 diff --git a/src/main/java/me/cortex/nvidium/Nvidium.java b/src/main/java/me/cortex/nvidium/Nvidium.java index b2a1dbf3..dcf0b59f 100644 --- a/src/main/java/me/cortex/nvidium/Nvidium.java +++ b/src/main/java/me/cortex/nvidium/Nvidium.java @@ -5,6 +5,7 @@ import net.fabricmc.loader.api.ModContainer; import net.minecraft.util.Util; import org.lwjgl.opengl.GL; +import org.lwjgl.opengl.GLCapabilities; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/me/cortex/nvidium/NvidiumWorldRenderer.java b/src/main/java/me/cortex/nvidium/NvidiumWorldRenderer.java index 285b6584..4b09a37e 100644 --- a/src/main/java/me/cortex/nvidium/NvidiumWorldRenderer.java +++ b/src/main/java/me/cortex/nvidium/NvidiumWorldRenderer.java @@ -6,12 +6,12 @@ import me.cortex.nvidium.sodiumCompat.NvidiumCompactChunkVertex; import me.cortex.nvidium.util.DownloadTaskStream; import me.cortex.nvidium.util.UploadingBufferStream; -import me.jellysquid.mods.sodium.client.SodiumClientMod; -import me.jellysquid.mods.sodium.client.render.chunk.ChunkRenderMatrices; -import me.jellysquid.mods.sodium.client.render.chunk.RenderSection; -import me.jellysquid.mods.sodium.client.render.chunk.compile.ChunkBuildOutput; -import me.jellysquid.mods.sodium.client.render.chunk.vertex.format.impl.CompactChunkVertex; -import me.jellysquid.mods.sodium.client.render.viewport.Viewport; +import net.caffeinemc.mods.sodium.client.SodiumClientMod; +import net.caffeinemc.mods.sodium.client.render.chunk.ChunkRenderMatrices; +import net.caffeinemc.mods.sodium.client.render.chunk.RenderSection; +import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkBuildOutput; +import net.caffeinemc.mods.sodium.client.render.chunk.vertex.format.impl.CompactChunkVertex; +import net.caffeinemc.mods.sodium.client.render.viewport.Viewport; import net.minecraft.client.render.Camera; import net.minecraft.client.texture.Sprite; import org.jetbrains.annotations.Nullable; @@ -129,7 +129,7 @@ private void update_allowed_memory() { } } - public void update(Camera camera, Viewport viewport, int frame, boolean spectator) { + public void update(Camera camera, Viewport viewport, boolean spectator) { if (asyncChunkTracker != null) { asyncChunkTracker.update(viewport, camera, spectator); } diff --git a/src/main/java/me/cortex/nvidium/RenderPipeline.java b/src/main/java/me/cortex/nvidium/RenderPipeline.java index 68bbc1a6..17d2f81f 100644 --- a/src/main/java/me/cortex/nvidium/RenderPipeline.java +++ b/src/main/java/me/cortex/nvidium/RenderPipeline.java @@ -15,8 +15,8 @@ import me.cortex.nvidium.util.DownloadTaskStream; import me.cortex.nvidium.util.TickableManager; import me.cortex.nvidium.util.UploadingBufferStream; -import me.jellysquid.mods.sodium.client.render.chunk.ChunkRenderMatrices; -import me.jellysquid.mods.sodium.client.render.viewport.Viewport; +import net.caffeinemc.mods.sodium.client.render.chunk.ChunkRenderMatrices; +import net.caffeinemc.mods.sodium.client.render.viewport.Viewport; import net.minecraft.client.MinecraftClient; import net.minecraft.util.math.BlockPos; import org.joml.*; diff --git a/src/main/java/me/cortex/nvidium/api0/NvidiumAPI.java b/src/main/java/me/cortex/nvidium/api0/NvidiumAPI.java index cc0e82d4..a8c11095 100644 --- a/src/main/java/me/cortex/nvidium/api0/NvidiumAPI.java +++ b/src/main/java/me/cortex/nvidium/api0/NvidiumAPI.java @@ -1,8 +1,9 @@ package me.cortex.nvidium.api0; import me.cortex.nvidium.Nvidium; +import me.cortex.nvidium.NvidiumWorldRenderer; import me.cortex.nvidium.sodiumCompat.INvidiumWorldRendererGetter; -import me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer; +import net.caffeinemc.mods.sodium.client.render.SodiumWorldRenderer; import org.joml.Matrix4fc; import org.joml.Matrix4x3fc; diff --git a/src/main/java/me/cortex/nvidium/config/ConfigGuiBuilder.java b/src/main/java/me/cortex/nvidium/config/ConfigGuiBuilder.java index 424c8065..6f989f1e 100644 --- a/src/main/java/me/cortex/nvidium/config/ConfigGuiBuilder.java +++ b/src/main/java/me/cortex/nvidium/config/ConfigGuiBuilder.java @@ -3,11 +3,11 @@ import com.google.common.collect.ImmutableList; import me.cortex.nvidium.Nvidium; import me.cortex.nvidium.sodiumCompat.NvidiumOptionFlags; -import me.jellysquid.mods.sodium.client.gui.options.*; -import me.jellysquid.mods.sodium.client.gui.options.control.ControlValueFormatter; -import me.jellysquid.mods.sodium.client.gui.options.control.CyclingControl; -import me.jellysquid.mods.sodium.client.gui.options.control.SliderControl; -import me.jellysquid.mods.sodium.client.gui.options.control.TickBoxControl; +import net.caffeinemc.mods.sodium.client.gui.options.*; +import net.caffeinemc.mods.sodium.client.gui.options.control.ControlValueFormatter; +import net.caffeinemc.mods.sodium.client.gui.options.control.CyclingControl; +import net.caffeinemc.mods.sodium.client.gui.options.control.SliderControl; +import net.caffeinemc.mods.sodium.client.gui.options.control.TickBoxControl; import net.minecraft.text.Text; import java.util.ArrayList; @@ -47,7 +47,7 @@ public static void addNvidiumGui(List pages) { .setTooltip(Text.translatable("nvidium.options.region_keep_distance.tooltip")) .setControl(option -> new SliderControl(option, 32, 256, 1, x->Text.literal(x==32?"Vanilla":(x==256?"Keep All":x+" chunks")))) .setImpact(OptionImpact.VARIES) - .setEnabled(Nvidium.IS_ENABLED) + .setEnabled(() -> Nvidium.IS_ENABLED) .setBinding((opts, value) -> opts.region_keep_distance = value, opts -> opts.region_keep_distance) .setFlags() .build() @@ -56,7 +56,7 @@ public static void addNvidiumGui(List pages) { .setTooltip(Text.translatable("nvidium.options.enable_temporal_coherence.tooltip")) .setControl(TickBoxControl::new) .setImpact(OptionImpact.MEDIUM) - .setEnabled(Nvidium.IS_ENABLED) + .setEnabled(() -> Nvidium.IS_ENABLED) .setBinding((opts, value) -> opts.enable_temporal_coherence = value, opts -> opts.enable_temporal_coherence) .setFlags() .build() @@ -65,7 +65,7 @@ public static void addNvidiumGui(List pages) { .setTooltip(Text.translatable("nvidium.options.async_bfs.tooltip")) .setControl(TickBoxControl::new) .setImpact(OptionImpact.HIGH) - .setEnabled(Nvidium.IS_ENABLED) + .setEnabled(() -> Nvidium.IS_ENABLED) .setBinding((opts, value) -> opts.async_bfs = value, opts -> opts.async_bfs) .setFlags(OptionFlag.REQUIRES_RENDERER_RELOAD) .build() @@ -74,7 +74,7 @@ public static void addNvidiumGui(List pages) { .setTooltip(Text.translatable("nvidium.options.automatic_memory_limit.tooltip")) .setControl(TickBoxControl::new) .setImpact(OptionImpact.VARIES) - .setEnabled(Nvidium.IS_ENABLED) + .setEnabled(() -> Nvidium.IS_ENABLED) .setBinding((opts, value) -> opts.automatic_memory = value, opts -> opts.automatic_memory) .setFlags() .build()) @@ -83,7 +83,7 @@ public static void addNvidiumGui(List pages) { .setTooltip(Text.translatable("nvidium.options.max_gpu_memory.tooltip")) .setControl(option -> new SliderControl(option, 2048, 32768, 512, ControlValueFormatter.translateVariable("nvidium.options.mb"))) .setImpact(OptionImpact.VARIES) - .setEnabled(Nvidium.IS_ENABLED && !Nvidium.config.automatic_memory) + .setEnabled(() -> Nvidium.IS_ENABLED && !Nvidium.config.automatic_memory) .setBinding((opts, value) -> opts.max_geometry_memory = value, opts -> opts.max_geometry_memory) .setFlags(Nvidium.SUPPORTS_PERSISTENT_SPARSE_ADDRESSABLE_BUFFER?new OptionFlag[0]:new OptionFlag[]{OptionFlag.REQUIRES_RENDERER_RELOAD}) .build() @@ -92,7 +92,7 @@ public static void addNvidiumGui(List pages) { .setTooltip(Text.translatable("nvidium.options.render_fog.tooltip")) .setControl(TickBoxControl::new) .setBinding((opts, value) -> opts.render_fog = value, opts -> opts.render_fog) - .setEnabled(Nvidium.IS_ENABLED) + .setEnabled(() -> Nvidium.IS_ENABLED) .setImpact(OptionImpact.MEDIUM) .setFlags(OptionFlag.REQUIRES_RENDERER_RELOAD) .build() @@ -111,7 +111,7 @@ public static void addNvidiumGui(List pages) { ) ) .setBinding((opts, value) -> opts.translucency_sorting_level = value, opts -> opts.translucency_sorting_level) - .setEnabled(Nvidium.IS_ENABLED) + .setEnabled(() -> Nvidium.IS_ENABLED) .setImpact(OptionImpact.MEDIUM) //Technically, only need to reload when going from NONE->SECTIONS .setFlags(OptionFlag.REQUIRES_RENDERER_RELOAD) @@ -133,7 +133,7 @@ public static void addNvidiumGui(List pages) { ) ) .setBinding((opts, value) -> opts.statistics_level = value, opts -> opts.statistics_level) - .setEnabled(Nvidium.IS_ENABLED) + .setEnabled(() -> Nvidium.IS_ENABLED) .setImpact(OptionImpact.LOW) .setFlags(NvidiumOptionFlags.REQUIRES_SHADER_RELOAD) .build() diff --git a/src/main/java/me/cortex/nvidium/config/NvidiumConfigStore.java b/src/main/java/me/cortex/nvidium/config/NvidiumConfigStore.java index d48e46a9..a6f4ffa8 100644 --- a/src/main/java/me/cortex/nvidium/config/NvidiumConfigStore.java +++ b/src/main/java/me/cortex/nvidium/config/NvidiumConfigStore.java @@ -2,7 +2,7 @@ import me.cortex.nvidium.Nvidium; import me.cortex.nvidium.config.NvidiumConfig; -import me.jellysquid.mods.sodium.client.gui.options.storage.OptionStorage; +import net.caffeinemc.mods.sodium.client.gui.options.storage.OptionStorage; public class NvidiumConfigStore implements OptionStorage { private final NvidiumConfig config; diff --git a/src/main/java/me/cortex/nvidium/gl/TrackedObject.java b/src/main/java/me/cortex/nvidium/gl/TrackedObject.java index b1fdfdf3..9d164a71 100644 --- a/src/main/java/me/cortex/nvidium/gl/TrackedObject.java +++ b/src/main/java/me/cortex/nvidium/gl/TrackedObject.java @@ -3,6 +3,7 @@ import me.cortex.nvidium.Nvidium; import java.lang.ref.Cleaner; +import java.lang.ref.Cleaner.Cleanable; public abstract class TrackedObject { private final Ref ref; diff --git a/src/main/java/me/cortex/nvidium/managers/AsyncOcclusionTracker.java b/src/main/java/me/cortex/nvidium/managers/AsyncOcclusionTracker.java index f3df829b..ff882450 100644 --- a/src/main/java/me/cortex/nvidium/managers/AsyncOcclusionTracker.java +++ b/src/main/java/me/cortex/nvidium/managers/AsyncOcclusionTracker.java @@ -3,12 +3,12 @@ import com.mojang.blaze3d.systems.RenderSystem; import it.unimi.dsi.fastutil.longs.Long2ReferenceMap; import me.cortex.nvidium.sodiumCompat.IRenderSectionExtension; -import me.jellysquid.mods.sodium.client.SodiumClientMod; -import me.jellysquid.mods.sodium.client.render.chunk.ChunkUpdateType; -import me.jellysquid.mods.sodium.client.render.chunk.RenderSection; -import me.jellysquid.mods.sodium.client.render.chunk.RenderSectionFlags; -import me.jellysquid.mods.sodium.client.render.chunk.occlusion.OcclusionCuller; -import me.jellysquid.mods.sodium.client.render.viewport.Viewport; +import net.caffeinemc.mods.sodium.client.SodiumClientMod; +import net.caffeinemc.mods.sodium.client.render.chunk.ChunkUpdateType; +import net.caffeinemc.mods.sodium.client.render.chunk.RenderSection; +import net.caffeinemc.mods.sodium.client.render.chunk.RenderSectionFlags; +import net.caffeinemc.mods.sodium.client.render.chunk.occlusion.OcclusionCuller; +import net.caffeinemc.mods.sodium.client.render.viewport.Viewport; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.Camera; import net.minecraft.client.texture.Sprite; @@ -72,7 +72,7 @@ private void run() { Set animatedSpriteSet = animateVisibleSpritesOnly?new HashSet<>():null; int[] visibleGeometryCounter = new int[1]; final OcclusionCuller.Visitor visitor = (section, visible) -> { - if (section.getPendingUpdate() != null && section.getBuildCancellationToken() == null) { + if (section.getPendingUpdate() != null && section.getTaskCancellationToken() == null) { if ((!((IRenderSectionExtension)section).isSubmittedRebuild()) && !((IRenderSectionExtension)section).isSeen()) {//If it is in submission queue or seen dont enqueue //Set that the section has been seen ((IRenderSectionExtension)section).isSeen(true); @@ -144,7 +144,7 @@ public final void update(Viewport viewport, Camera camera, boolean spectator) { if (section.isDisposed()) continue; var type = section.getPendingUpdate(); - if (type != null && section.getBuildCancellationToken() == null) { + if (type != null && section.getTaskCancellationToken() == null) { var queue = outputRebuildQueue.get(type); if (queue.size() < type.getMaximumQueueSize()) { ((IRenderSectionExtension) section).isSubmittedRebuild(true); diff --git a/src/main/java/me/cortex/nvidium/managers/RegionManager.java b/src/main/java/me/cortex/nvidium/managers/RegionManager.java index e320206f..d4e16ea8 100644 --- a/src/main/java/me/cortex/nvidium/managers/RegionManager.java +++ b/src/main/java/me/cortex/nvidium/managers/RegionManager.java @@ -7,7 +7,7 @@ import me.cortex.nvidium.gl.buffers.IDeviceMappedBuffer; import me.cortex.nvidium.util.IdProvider; import me.cortex.nvidium.util.UploadingBufferStream; -import me.jellysquid.mods.sodium.client.render.viewport.Viewport; +import net.caffeinemc.mods.sodium.client.render.viewport.Viewport; import net.minecraft.util.math.ChunkSectionPos; import org.lwjgl.system.MemoryUtil; diff --git a/src/main/java/me/cortex/nvidium/managers/SectionManager.java b/src/main/java/me/cortex/nvidium/managers/SectionManager.java index 58335fb9..2f8022ff 100644 --- a/src/main/java/me/cortex/nvidium/managers/SectionManager.java +++ b/src/main/java/me/cortex/nvidium/managers/SectionManager.java @@ -8,12 +8,13 @@ import me.cortex.nvidium.gl.RenderDevice; import me.cortex.nvidium.sodiumCompat.INvidiumWorldRendererGetter; import me.cortex.nvidium.sodiumCompat.IRepackagedResult; +import me.cortex.nvidium.sodiumCompat.RepackagedSectionOutput; import me.cortex.nvidium.util.BufferArena; import me.cortex.nvidium.util.SegmentedManager; import me.cortex.nvidium.util.UploadingBufferStream; -import me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer; -import me.jellysquid.mods.sodium.client.render.chunk.RenderSection; -import me.jellysquid.mods.sodium.client.render.chunk.compile.ChunkBuildOutput; +import net.caffeinemc.mods.sodium.client.render.SodiumWorldRenderer; +import net.caffeinemc.mods.sodium.client.render.chunk.RenderSection; +import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkBuildOutput; import net.minecraft.client.MinecraftClient; import net.minecraft.util.math.ChunkSectionPos; import org.joml.Vector3i; diff --git a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinChunkBuildOutput.java b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinChunkBuildOutput.java index ec11d489..ee0fc5e0 100644 --- a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinChunkBuildOutput.java +++ b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinChunkBuildOutput.java @@ -2,7 +2,7 @@ import me.cortex.nvidium.sodiumCompat.IRepackagedResult; import me.cortex.nvidium.sodiumCompat.RepackagedSectionOutput; -import me.jellysquid.mods.sodium.client.render.chunk.compile.ChunkBuildOutput; +import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkBuildOutput; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -21,7 +21,7 @@ public void set(RepackagedSectionOutput output) { repackagedSectionOutput = output; } - @Inject(method = "delete", at = @At("HEAD")) + @Inject(method = "destroy", at = @At("HEAD")) private void cleanup(CallbackInfo ci) { if (repackagedSectionOutput != null) { repackagedSectionOutput.delete(); diff --git a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinChunkBuilder.java b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinChunkBuilder.java index 3dcd0a00..0be633eb 100644 --- a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinChunkBuilder.java +++ b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinChunkBuilder.java @@ -1,7 +1,8 @@ package me.cortex.nvidium.mixin.sodium; import me.cortex.nvidium.Nvidium; -import me.jellysquid.mods.sodium.client.render.chunk.compile.executor.ChunkBuilder; + +import net.caffeinemc.mods.sodium.client.render.chunk.compile.executor.ChunkBuilder; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -10,7 +11,7 @@ @Mixin(value = ChunkBuilder.class, remap = false) public class MixinChunkBuilder { - @Redirect(method = "getSchedulingBudget", at = @At(value = "INVOKE", target = "Ljava/util/List;size()I")) + @Redirect(method = "getTotalRemainingBudget", at = @At(value = "INVOKE", target = "Ljava/util/List;size()I")) private int moreSchedulingBudget(List threads) { int budget = threads.size(); if (Nvidium.IS_ENABLED && Nvidium.config.async_bfs) { diff --git a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinChunkBuilderMeshingTask.java b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinChunkBuilderMeshingTask.java index 89edeff3..c48563df 100644 --- a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinChunkBuilderMeshingTask.java +++ b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinChunkBuilderMeshingTask.java @@ -3,10 +3,10 @@ import me.cortex.nvidium.Nvidium; import me.cortex.nvidium.sodiumCompat.IRepackagedResult; import me.cortex.nvidium.sodiumCompat.SodiumResultCompatibility; -import me.jellysquid.mods.sodium.client.render.chunk.compile.ChunkBuildContext; -import me.jellysquid.mods.sodium.client.render.chunk.compile.ChunkBuildOutput; -import me.jellysquid.mods.sodium.client.render.chunk.compile.tasks.ChunkBuilderMeshingTask; -import me.jellysquid.mods.sodium.client.util.task.CancellationToken; +import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkBuildContext; +import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkBuildOutput; +import net.caffeinemc.mods.sodium.client.render.chunk.compile.tasks.ChunkBuilderMeshingTask; +import net.caffeinemc.mods.sodium.client.util.task.CancellationToken; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -14,7 +14,7 @@ @Mixin(value = ChunkBuilderMeshingTask.class, remap = false) public class MixinChunkBuilderMeshingTask { - @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("TAIL")) + @Inject(method = "execute(Lnet/caffeinemc/mods/sodium/client/render/chunk/compile/ChunkBuildContext;Lnet/caffeinemc/mods/sodium/client/util/task/CancellationToken;)Lnet/caffeinemc/mods/sodium/client/render/chunk/compile/ChunkBuildOutput;", at = @At("TAIL")) private void repackageResults(ChunkBuildContext buildContext, CancellationToken cancellationToken, CallbackInfoReturnable cir) { if (Nvidium.IS_ENABLED) { var result = cir.getReturnValue(); diff --git a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinChunkJobQueue.java b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinChunkJobQueue.java index 18f2f86b..0b49c4b3 100644 --- a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinChunkJobQueue.java +++ b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinChunkJobQueue.java @@ -5,7 +5,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(targets = {"me.jellysquid.mods.sodium.client.render.chunk.compile.executor.ChunkJobQueue"},remap = false) +@Mixin(targets = {"net.caffeinemc.mods.sodium.client.render.chunk.compile.executor.ChunkJobQueue"},remap = false) public class MixinChunkJobQueue { @Redirect(method = "shutdown", at = @At(value = "INVOKE", target = "Ljava/lang/Runtime;availableProcessors()I")) private int returnAlot(Runtime instance) { diff --git a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinOptionFlag.java b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinOptionFlag.java index 9705d721..5269bc76 100644 --- a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinOptionFlag.java +++ b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinOptionFlag.java @@ -1,7 +1,7 @@ package me.cortex.nvidium.mixin.sodium; import me.cortex.nvidium.sodiumCompat.NvidiumOptionFlags; -import me.jellysquid.mods.sodium.client.gui.options.OptionFlag; +import net.caffeinemc.mods.sodium.client.gui.options.OptionFlag; import org.apache.commons.lang3.ArrayUtils; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; diff --git a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinRenderRegionManager.java b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinRenderRegionManager.java index 4f85565f..b45a1d07 100644 --- a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinRenderRegionManager.java +++ b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinRenderRegionManager.java @@ -3,10 +3,12 @@ import me.cortex.nvidium.Nvidium; import me.cortex.nvidium.NvidiumWorldRenderer; import me.cortex.nvidium.sodiumCompat.INvidiumWorldRendererSetter; -import me.jellysquid.mods.sodium.client.gl.device.CommandList; -import me.jellysquid.mods.sodium.client.render.chunk.compile.ChunkBuildOutput; -import me.jellysquid.mods.sodium.client.render.chunk.region.RenderRegion; -import me.jellysquid.mods.sodium.client.render.chunk.region.RenderRegionManager; +import net.caffeinemc.mods.sodium.client.gl.device.CommandList; +import net.caffeinemc.mods.sodium.client.render.chunk.compile.BuilderTaskOutput; +import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkBuildOutput; +import net.caffeinemc.mods.sodium.client.render.chunk.region.RenderRegion; +import net.caffeinemc.mods.sodium.client.render.chunk.region.RenderRegionManager; +import net.minecraft.client.render.chunk.ChunkBuilder; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -19,17 +21,17 @@ public abstract class MixinRenderRegionManager implements INvidiumWorldRendererSetter { - @Shadow protected abstract void uploadMeshes(CommandList commandList, RenderRegion region, Collection results); + @Shadow protected abstract void uploadResults(CommandList commandList, RenderRegion region, Collection results); @Unique private NvidiumWorldRenderer renderer; - - @Redirect(method = "uploadMeshes(Lme/jellysquid/mods/sodium/client/gl/device/CommandList;Ljava/util/Collection;)V", at = @At(value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/render/chunk/region/RenderRegionManager;uploadMeshes(Lme/jellysquid/mods/sodium/client/gl/device/CommandList;Lme/jellysquid/mods/sodium/client/render/chunk/region/RenderRegion;Ljava/util/Collection;)V")) - private void redirectUpload(RenderRegionManager instance, CommandList cmdList, RenderRegion pass, Collection uploadQueue) { + // todo: rewrite uploadBuildResult + @Redirect(method = "uploadResults(Lnet/caffeinemc/mods/sodium/client/gl/device/CommandList;Ljava/util/Collection;)V", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/client/render/chunk/region/RenderRegionManager;uploadResults(Lnet/caffeinemc/mods/sodium/client/gl/device/CommandList;Lnet/caffeinemc/mods/sodium/client/render/chunk/region/RenderRegion;Ljava/util/Collection;)V")) + private void redirectUpload(RenderRegionManager instance, CommandList cmdList, RenderRegion pass, Collection uploadQueue) { if (Nvidium.IS_ENABLED) { uploadQueue.forEach(renderer::uploadBuildResult); } else { - uploadMeshes(cmdList, pass, uploadQueue); + uploadResults(cmdList, pass, uploadQueue); } } diff --git a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinRenderSection.java b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinRenderSection.java index f15fac17..20109674 100644 --- a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinRenderSection.java +++ b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinRenderSection.java @@ -8,15 +8,15 @@ import me.cortex.nvidium.sodiumCompat.INvidiumWorldRendererSetter; import me.cortex.nvidium.sodiumCompat.IRenderSectionExtension; import me.cortex.nvidium.sodiumCompat.IrisCheck; -import me.jellysquid.mods.sodium.client.gl.device.CommandList; -import me.jellysquid.mods.sodium.client.render.chunk.ChunkRenderMatrices; -import me.jellysquid.mods.sodium.client.render.chunk.ChunkUpdateType; -import me.jellysquid.mods.sodium.client.render.chunk.RenderSection; -import me.jellysquid.mods.sodium.client.render.chunk.RenderSectionManager; -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 me.jellysquid.mods.sodium.client.render.viewport.Viewport; +import net.caffeinemc.mods.sodium.client.gl.device.CommandList; +import net.caffeinemc.mods.sodium.client.render.chunk.ChunkRenderMatrices; +import net.caffeinemc.mods.sodium.client.render.chunk.ChunkUpdateType; +import net.caffeinemc.mods.sodium.client.render.chunk.RenderSection; +import net.caffeinemc.mods.sodium.client.render.chunk.RenderSectionManager; +import net.caffeinemc.mods.sodium.client.render.chunk.region.RenderRegionManager; +import net.caffeinemc.mods.sodium.client.render.chunk.terrain.DefaultTerrainRenderPasses; +import net.caffeinemc.mods.sodium.client.render.chunk.terrain.TerrainRenderPass; +import net.caffeinemc.mods.sodium.client.render.viewport.Viewport; import net.minecraft.client.render.Camera; import net.minecraft.client.world.ClientWorld; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinRenderSectionManager.java b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinRenderSectionManager.java index b80552da..ed956fb8 100644 --- a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinRenderSectionManager.java +++ b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinRenderSectionManager.java @@ -5,18 +5,18 @@ import me.cortex.nvidium.NvidiumWorldRenderer; import me.cortex.nvidium.managers.AsyncOcclusionTracker; import me.cortex.nvidium.sodiumCompat.*; -import me.jellysquid.mods.sodium.client.SodiumClientMod; -import me.jellysquid.mods.sodium.client.gl.device.CommandList; -import me.jellysquid.mods.sodium.client.render.chunk.ChunkRenderMatrices; -import me.jellysquid.mods.sodium.client.render.chunk.ChunkUpdateType; -import me.jellysquid.mods.sodium.client.render.chunk.RenderSection; -import me.jellysquid.mods.sodium.client.render.chunk.RenderSectionManager; -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 me.jellysquid.mods.sodium.client.render.chunk.vertex.format.ChunkVertexType; -import me.jellysquid.mods.sodium.client.render.texture.SpriteUtil; -import me.jellysquid.mods.sodium.client.render.viewport.Viewport; +import net.caffeinemc.mods.sodium.client.SodiumClientMod; +import net.caffeinemc.mods.sodium.client.gl.device.CommandList; +import net.caffeinemc.mods.sodium.client.render.chunk.ChunkRenderMatrices; +import net.caffeinemc.mods.sodium.client.render.chunk.ChunkUpdateType; +import net.caffeinemc.mods.sodium.client.render.chunk.RenderSection; +import net.caffeinemc.mods.sodium.client.render.chunk.RenderSectionManager; +import net.caffeinemc.mods.sodium.client.render.chunk.region.RenderRegionManager; +import net.caffeinemc.mods.sodium.client.render.chunk.terrain.DefaultTerrainRenderPasses; +import net.caffeinemc.mods.sodium.client.render.chunk.terrain.TerrainRenderPass; +import net.caffeinemc.mods.sodium.client.render.chunk.vertex.format.ChunkVertexType; +import net.caffeinemc.mods.sodium.client.render.texture.SpriteUtil; +import net.caffeinemc.mods.sodium.client.render.viewport.Viewport; import net.minecraft.client.render.Camera; import net.minecraft.client.world.ClientWorld; import org.jetbrains.annotations.NotNull; @@ -38,7 +38,7 @@ public class MixinRenderSectionManager implements INvidiumWorldRendererGetter { @Shadow @Final private RenderRegionManager regions; @Shadow @Final private Long2ReferenceMap sectionByPosition; - @Shadow private @NotNull Map> rebuildLists; + @Shadow private @NotNull Map> taskLists; @Shadow @Final private int renderDistance; @Unique private NvidiumWorldRenderer renderer; @Unique private Viewport viewport; @@ -54,12 +54,12 @@ private void init(ClientWorld world, int renderDistance, CommandList commandList if (Nvidium.IS_ENABLED) { if (renderer != null) throw new IllegalStateException("Cannot have multiple world renderers"); - renderer = new NvidiumWorldRenderer(Nvidium.config.async_bfs?new AsyncOcclusionTracker(renderDistance, sectionByPosition, world, rebuildLists):null); + renderer = new NvidiumWorldRenderer(Nvidium.config.async_bfs?new AsyncOcclusionTracker(renderDistance, sectionByPosition, world, taskLists):null); ((INvidiumWorldRendererSetter)regions).setWorldRenderer(renderer); } } - @ModifyArg(method = "", at = @At(value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/render/chunk/compile/executor/ChunkBuilder;(Lnet/minecraft/client/world/ClientWorld;Lme/jellysquid/mods/sodium/client/render/chunk/vertex/format/ChunkVertexType;)V", remap = true), index = 1) + @ModifyArg(method = "", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/client/render/chunk/compile/executor/ChunkBuilder;(Lnet/minecraft/client/world/ClientWorld;Lnet/caffeinemc/mods/sodium/client/render/chunk/vertex/format/ChunkVertexType;)V", remap = true), index = 1) private ChunkVertexType modifyVertexType(ChunkVertexType vertexType) { updateNvidiumIsEnabled(); if (Nvidium.IS_ENABLED) { @@ -80,7 +80,7 @@ private void destroy(CallbackInfo ci) { } } - @Redirect(method = "onSectionRemoved", at = @At(value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/render/chunk/RenderSection;delete()V")) + @Redirect(method = "onSectionRemoved", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/client/render/chunk/RenderSection;delete()V")) private void deleteSection(RenderSection section) { if (Nvidium.IS_ENABLED) { if (Nvidium.config.region_keep_distance == 32) { @@ -91,7 +91,7 @@ private void deleteSection(RenderSection section) { } @Inject(method = "update", at = @At("HEAD")) - private void trackViewport(Camera camera, Viewport viewport, int frame, boolean spectator, CallbackInfo ci) { + private void trackViewport(Camera camera, Viewport viewport, boolean spectator, CallbackInfo ci) { this.viewport = viewport; } @@ -131,7 +131,7 @@ private void redirectTerrainRenderList(Camera camera, Viewport viewport, int fra } } - @Redirect(method = "submitRebuildTasks", at = @At(value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/render/chunk/RenderSection;setPendingUpdate(Lme/jellysquid/mods/sodium/client/render/chunk/ChunkUpdateType;)V")) + @Redirect(method = "submitSectionTasks(Lnet/caffeinemc/mods/sodium/client/render/chunk/compile/executor/ChunkJobCollector;Lnet/caffeinemc/mods/sodium/client/render/chunk/ChunkUpdateType;Z)V", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/client/render/chunk/RenderSection;setPendingUpdate(Lnet/caffeinemc/mods/sodium/client/render/chunk/ChunkUpdateType;)V")) private void injectEnqueueFalse(RenderSection instance, ChunkUpdateType type) { instance.setPendingUpdate(type); if (Nvidium.IS_ENABLED && Nvidium.config.async_bfs) { @@ -148,7 +148,7 @@ private boolean isSectionVisibleBfs(RenderSection section) { return delta <= 1; } - @Inject(method = "isSectionVisible", at = @At(value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/render/chunk/RenderSection;getLastVisibleFrame()I", shift = At.Shift.BEFORE), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD) + @Inject(method = "isSectionVisible", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/client/render/chunk/RenderSection;getLastVisibleFrame()I", shift = At.Shift.BEFORE), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD) private void redirectIsSectionVisible(int x, int y, int z, CallbackInfoReturnable cir, RenderSection render) { if (Nvidium.IS_ENABLED && Nvidium.config.async_bfs) { cir.setReturnValue(isSectionVisibleBfs(render)); @@ -169,13 +169,13 @@ private void redirectAnimatedSpriteUpdates(CallbackInfo ci) { } } - @Inject(method = "scheduleRebuild", at = @At(value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/render/chunk/RenderSection;setPendingUpdate(Lme/jellysquid/mods/sodium/client/render/chunk/ChunkUpdateType;)V", shift = At.Shift.AFTER), locals = LocalCapture.CAPTURE_FAILHARD) + @Inject(method = "scheduleRebuild", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/client/render/chunk/RenderSection;setPendingUpdate(Lnet/caffeinemc/mods/sodium/client/render/chunk/ChunkUpdateType;)V", shift = At.Shift.AFTER), locals = LocalCapture.CAPTURE_FAILHARD) private void instantReschedule(int x, int y, int z, boolean important, CallbackInfo ci, RenderSection section, ChunkUpdateType pendingUpdate) { if (Nvidium.IS_ENABLED && Nvidium.config.async_bfs) { - var queue = rebuildLists.get(pendingUpdate); + var queue = taskLists.get(pendingUpdate); if (isSectionVisibleBfs(section) && queue.size() < pendingUpdate.getMaximumQueueSize()) { ((IRenderSectionExtension)section).isSubmittedRebuild(true); - rebuildLists.get(pendingUpdate).add(section); + taskLists.get(pendingUpdate).add(section); } } } diff --git a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinSodiumOptionsGUI.java b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinSodiumOptionsGUI.java index 8190333d..f6e78d52 100644 --- a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinSodiumOptionsGUI.java +++ b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinSodiumOptionsGUI.java @@ -4,10 +4,10 @@ import me.cortex.nvidium.config.ConfigGuiBuilder; import me.cortex.nvidium.sodiumCompat.INvidiumWorldRendererGetter; import me.cortex.nvidium.sodiumCompat.NvidiumOptionFlags; -import me.jellysquid.mods.sodium.client.gui.SodiumOptionsGUI; -import me.jellysquid.mods.sodium.client.gui.options.*; -import me.jellysquid.mods.sodium.client.gui.options.storage.OptionStorage; -import me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer; +import net.caffeinemc.mods.sodium.client.gui.SodiumOptionsGUI; +import net.caffeinemc.mods.sodium.client.gui.options.*; +import net.caffeinemc.mods.sodium.client.gui.options.storage.OptionStorage; +import net.caffeinemc.mods.sodium.client.render.SodiumWorldRenderer; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; import org.spongepowered.asm.mixin.Final; diff --git a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinSodiumWorldRenderer.java b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinSodiumWorldRenderer.java index d1210436..2625ce7d 100644 --- a/src/main/java/me/cortex/nvidium/mixin/sodium/MixinSodiumWorldRenderer.java +++ b/src/main/java/me/cortex/nvidium/mixin/sodium/MixinSodiumWorldRenderer.java @@ -4,9 +4,10 @@ import me.cortex.nvidium.Nvidium; import me.cortex.nvidium.NvidiumWorldRenderer; import me.cortex.nvidium.sodiumCompat.INvidiumWorldRendererGetter; -import me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer; -import me.jellysquid.mods.sodium.client.render.chunk.RenderSectionManager; -import me.jellysquid.mods.sodium.client.render.viewport.Viewport; +import net.caffeinemc.mods.sodium.client.render.SodiumWorldRenderer; +import net.caffeinemc.mods.sodium.client.render.chunk.RenderSection; +import net.caffeinemc.mods.sodium.client.render.chunk.RenderSectionManager; +import net.caffeinemc.mods.sodium.client.render.viewport.Viewport; import net.minecraft.block.entity.BlockEntity; import net.minecraft.client.render.BufferBuilderStorage; import net.minecraft.client.render.Camera; @@ -19,7 +20,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - +import java.util.List; import java.util.SortedSet; @Mixin(value = SodiumWorldRenderer.class, remap = false) @@ -30,10 +31,10 @@ public abstract class MixinSodiumWorldRenderer implements INvidiumWorldRendererG protected static void renderBlockEntity(MatrixStack matrices, BufferBuilderStorage bufferBuilders, Long2ObjectMap> blockBreakingProgressions, float tickDelta, VertexConsumerProvider.Immediate immediate, double x, double y, double z, BlockEntityRenderDispatcher dispatcher, BlockEntity entity) { } - @Inject(method = "setupTerrain", at = @At(value = "INVOKE", target = "Lme/jellysquid/mods/sodium/client/render/chunk/RenderSectionManager;needsUpdate()Z", shift = At.Shift.BEFORE)) - private void injectTerrainSetup(Camera camera, Viewport viewport, int frame, boolean spectator, boolean updateChunksImmediately, CallbackInfo ci) { + @Inject(method = "setupTerrain", at = @At(value = "INVOKE", target = "Lnet/caffeinemc/mods/sodium/client/render/chunk/RenderSectionManager;needsUpdate()Z", shift = At.Shift.BEFORE)) + private void injectTerrainSetup(Camera camera, Viewport viewport, boolean spectator, boolean updateChunksImmediately, CallbackInfo ci) { if (Nvidium.IS_ENABLED && Nvidium.config.async_bfs) { - ((INvidiumWorldRendererGetter)renderSectionManager).getRenderer().update(camera, viewport, frame, spectator); + ((INvidiumWorldRendererGetter)renderSectionManager).getRenderer().update(camera, viewport, spectator); } } diff --git a/src/main/java/me/cortex/nvidium/mixin/sodium/SodiumWorldRendererAccessor.java b/src/main/java/me/cortex/nvidium/mixin/sodium/SodiumWorldRendererAccessor.java index 86e8ae3f..3ae1f944 100644 --- a/src/main/java/me/cortex/nvidium/mixin/sodium/SodiumWorldRendererAccessor.java +++ b/src/main/java/me/cortex/nvidium/mixin/sodium/SodiumWorldRendererAccessor.java @@ -1,7 +1,7 @@ package me.cortex.nvidium.mixin.sodium; -import me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer; -import me.jellysquid.mods.sodium.client.render.chunk.RenderSectionManager; +import net.caffeinemc.mods.sodium.client.render.SodiumWorldRenderer; +import net.caffeinemc.mods.sodium.client.render.chunk.RenderSectionManager; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; diff --git a/src/main/java/me/cortex/nvidium/renderers/RegionRasterizer.java b/src/main/java/me/cortex/nvidium/renderers/RegionRasterizer.java index eb617a5e..b35e464f 100644 --- a/src/main/java/me/cortex/nvidium/renderers/RegionRasterizer.java +++ b/src/main/java/me/cortex/nvidium/renderers/RegionRasterizer.java @@ -2,7 +2,7 @@ import me.cortex.nvidium.gl.shader.Shader; import me.cortex.nvidium.sodiumCompat.ShaderLoader; -import me.jellysquid.mods.sodium.client.gl.shader.ShaderParser; +import net.caffeinemc.mods.sodium.client.gl.shader.ShaderParser; import net.minecraft.util.Identifier; import static me.cortex.nvidium.gl.shader.ShaderType.FRAGMENT; diff --git a/src/main/java/me/cortex/nvidium/renderers/SectionRasterizer.java b/src/main/java/me/cortex/nvidium/renderers/SectionRasterizer.java index dfac4d8c..399998ff 100644 --- a/src/main/java/me/cortex/nvidium/renderers/SectionRasterizer.java +++ b/src/main/java/me/cortex/nvidium/renderers/SectionRasterizer.java @@ -2,7 +2,7 @@ import me.cortex.nvidium.gl.shader.Shader; import me.cortex.nvidium.sodiumCompat.ShaderLoader; -import me.jellysquid.mods.sodium.client.gl.shader.ShaderParser; +import net.caffeinemc.mods.sodium.client.gl.shader.ShaderParser; import net.minecraft.util.Identifier; import static me.cortex.nvidium.gl.shader.ShaderType.*; diff --git a/src/main/java/me/cortex/nvidium/sodiumCompat/NvidiumCompactChunkVertex.java b/src/main/java/me/cortex/nvidium/sodiumCompat/NvidiumCompactChunkVertex.java index 473a16c8..0a766db9 100644 --- a/src/main/java/me/cortex/nvidium/sodiumCompat/NvidiumCompactChunkVertex.java +++ b/src/main/java/me/cortex/nvidium/sodiumCompat/NvidiumCompactChunkVertex.java @@ -1,19 +1,20 @@ package me.cortex.nvidium.sodiumCompat; -import me.jellysquid.mods.sodium.client.gl.attribute.GlVertexAttributeFormat; -import me.jellysquid.mods.sodium.client.gl.attribute.GlVertexFormat; -import me.jellysquid.mods.sodium.client.render.chunk.terrain.material.Material; -import me.jellysquid.mods.sodium.client.render.chunk.vertex.format.ChunkMeshAttribute; -import me.jellysquid.mods.sodium.client.render.chunk.vertex.format.ChunkVertexEncoder; -import me.jellysquid.mods.sodium.client.render.chunk.vertex.format.ChunkVertexType; +import net.caffeinemc.mods.sodium.client.gl.attribute.GlVertexAttributeFormat; +import net.caffeinemc.mods.sodium.client.gl.attribute.GlVertexFormat; +import net.caffeinemc.mods.sodium.client.render.chunk.terrain.material.Material; +import net.caffeinemc.mods.sodium.client.render.chunk.vertex.format.impl.DefaultChunkMeshAttributes; +import net.caffeinemc.mods.sodium.client.render.chunk.shader.ChunkShaderBindingPoints; +import net.caffeinemc.mods.sodium.client.render.chunk.vertex.format.ChunkVertexEncoder; +import net.caffeinemc.mods.sodium.client.render.chunk.vertex.format.ChunkVertexType; import net.caffeinemc.mods.sodium.api.util.ColorABGR; import net.caffeinemc.mods.sodium.api.util.ColorU8; import net.minecraft.util.math.MathHelper; import org.lwjgl.system.MemoryUtil; public class NvidiumCompactChunkVertex implements ChunkVertexType { - public static final GlVertexFormat VERTEX_FORMAT = new GlVertexFormat<>(ChunkMeshAttribute.class, null, 16); + public static final GlVertexFormat VERTEX_FORMAT = new GlVertexFormat(null, null, 16); public static final int STRIDE = 16; public static final NvidiumCompactChunkVertex INSTANCE = new NvidiumCompactChunkVertex(); @@ -28,37 +29,40 @@ public class NvidiumCompactChunkVertex implements ChunkVertexType { private static final float TEXTURE_SCALE = (1.0f / TEXTURE_MAX_VALUE); - @Override - public float getTextureScale() { - return TEXTURE_SCALE; - } - - @Override - public float getPositionScale() { - return MODEL_SCALE; - } +// @Override +// public float getTextureScale() { +// return TEXTURE_SCALE; +// } +// +// @Override +// public float getPositionScale() { +// return MODEL_SCALE; +// } +// +// @Override +// public float getPositionOffset() { +// return -MODEL_ORIGIN; +// } @Override - public float getPositionOffset() { - return -MODEL_ORIGIN; - } - - @Override - public GlVertexFormat getVertexFormat() { + public GlVertexFormat getVertexFormat() { return VERTEX_FORMAT; } @Override public ChunkVertexEncoder getEncoder() { - return (ptr, material, vertex, sectionIndex) -> { - int light = compactLight(vertex.light); - - MemoryUtil.memPutInt(ptr + 0, (encodePosition(vertex.x) << 0) | (encodePosition(vertex.y) << 16)); - MemoryUtil.memPutInt(ptr + 4, (encodePosition(vertex.z) << 0) | (encodeDrawParameters(material) << 16) | ((light&0xFF)<<24)); - MemoryUtil.memPutInt(ptr + 8, (encodeColor(vertex.color) << 0) | (((light>>8)&0xFF) << 24)); - MemoryUtil.memPutInt(ptr + 12, encodeTexture(vertex.u, vertex.v)); - - return ptr + STRIDE; + return (ptr, material, vertices, sectionIndex) -> { + for(var vertex : vertices) { + int light = compactLight(vertex.light); + + MemoryUtil.memPutInt(ptr + 0, (encodePosition(vertex.x) << 0) | (encodePosition(vertex.y) << 16)); + MemoryUtil.memPutInt(ptr + 4, (encodePosition(vertex.z) << 0) | (encodeDrawParameters(material) << 16) | ((light&0xFF)<<24)); + MemoryUtil.memPutInt(ptr + 8, (encodeColor(vertex.color) << 0) | (((light>>8)&0xFF) << 24)); + MemoryUtil.memPutInt(ptr + 12, encodeTexture(vertex.u, vertex.v)); + + ptr += STRIDE; + } + return ptr; }; } diff --git a/src/main/java/me/cortex/nvidium/sodiumCompat/NvidiumOptionFlags.java b/src/main/java/me/cortex/nvidium/sodiumCompat/NvidiumOptionFlags.java index a5a1c2a5..2736212d 100644 --- a/src/main/java/me/cortex/nvidium/sodiumCompat/NvidiumOptionFlags.java +++ b/src/main/java/me/cortex/nvidium/sodiumCompat/NvidiumOptionFlags.java @@ -1,6 +1,6 @@ package me.cortex.nvidium.sodiumCompat; -import me.jellysquid.mods.sodium.client.gui.options.OptionFlag; +import net.caffeinemc.mods.sodium.client.gui.options.OptionFlag; public class NvidiumOptionFlags { public static OptionFlag REQUIRES_SHADER_RELOAD; diff --git a/src/main/java/me/cortex/nvidium/sodiumCompat/RepackagedSectionOutput.java b/src/main/java/me/cortex/nvidium/sodiumCompat/RepackagedSectionOutput.java index 2f065853..d123925a 100644 --- a/src/main/java/me/cortex/nvidium/sodiumCompat/RepackagedSectionOutput.java +++ b/src/main/java/me/cortex/nvidium/sodiumCompat/RepackagedSectionOutput.java @@ -1,6 +1,6 @@ package me.cortex.nvidium.sodiumCompat; -import me.jellysquid.mods.sodium.client.util.NativeBuffer; +import net.caffeinemc.mods.sodium.client.util.NativeBuffer; import org.joml.Vector3i; //Computed on the build thread instead of the render thread saving alot of 1% lows diff --git a/src/main/java/me/cortex/nvidium/sodiumCompat/ShaderLoader.java b/src/main/java/me/cortex/nvidium/sodiumCompat/ShaderLoader.java index a6d2cb6c..192648ac 100644 --- a/src/main/java/me/cortex/nvidium/sodiumCompat/ShaderLoader.java +++ b/src/main/java/me/cortex/nvidium/sodiumCompat/ShaderLoader.java @@ -3,8 +3,9 @@ import me.cortex.nvidium.Nvidium; import me.cortex.nvidium.config.StatisticsLoggingLevel; import me.cortex.nvidium.config.TranslucencySortingLevel; -import me.jellysquid.mods.sodium.client.gl.shader.ShaderConstants; -import me.jellysquid.mods.sodium.client.gl.shader.ShaderParser; +import net.caffeinemc.mods.sodium.client.gl.shader.ShaderConstants; +import net.caffeinemc.mods.sodium.client.gl.shader.ShaderConstants.Builder; +import net.caffeinemc.mods.sodium.client.gl.shader.ShaderParser; import net.minecraft.util.Identifier; import java.util.function.Consumer; diff --git a/src/main/java/me/cortex/nvidium/sodiumCompat/SodiumResultCompatibility.java b/src/main/java/me/cortex/nvidium/sodiumCompat/SodiumResultCompatibility.java index f9bd3d9e..93109366 100644 --- a/src/main/java/me/cortex/nvidium/sodiumCompat/SodiumResultCompatibility.java +++ b/src/main/java/me/cortex/nvidium/sodiumCompat/SodiumResultCompatibility.java @@ -3,10 +3,11 @@ import it.unimi.dsi.fastutil.ints.IntArrays; import it.unimi.dsi.fastutil.longs.LongArrays; import me.cortex.nvidium.Nvidium; -import me.jellysquid.mods.sodium.client.model.quad.properties.ModelQuadFacing; -import me.jellysquid.mods.sodium.client.render.chunk.compile.ChunkBuildOutput; -import me.jellysquid.mods.sodium.client.render.chunk.terrain.DefaultTerrainRenderPasses; -import me.jellysquid.mods.sodium.client.util.NativeBuffer; +import net.caffeinemc.mods.sodium.client.model.quad.properties.ModelQuadFacing; +import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkBuildOutput; +import net.caffeinemc.mods.sodium.client.render.chunk.data.BuiltSectionMeshParts; +import net.caffeinemc.mods.sodium.client.render.chunk.terrain.DefaultTerrainRenderPasses; +import net.caffeinemc.mods.sodium.client.util.NativeBuffer; import net.minecraft.client.MinecraftClient; import net.minecraft.util.math.Vec3d; import org.joml.Vector3f; @@ -87,65 +88,66 @@ private static void packageSectionGeometry(int formatSize, NativeBuffer output, } //Do translucent first - var translucentData = result.meshes.get(DefaultTerrainRenderPasses.TRANSLUCENT); + var translucentData = result.meshes.get(DefaultTerrainRenderPasses.TRANSLUCENT); if (translucentData != null) { int quadCount = 0; for (int i = 0; i < 7; i++) { - var part = translucentData.getVertexRanges()[i]; - quadCount += part != null?part.vertexCount()/4:0; + var part = translucentData.getVertexCounts()[i]; + quadCount += part/4; } int quadId = 0; long[] sortingData = new long[quadCount]; long[] srcs = new long[7]; + var partOffset = 0; for (int i = 0; i < 7; i++) { - var part = translucentData.getVertexRanges()[i]; - if (part != null) { - long src = MemoryUtil.memAddress(translucentData.getVertexData().getDirectBuffer()) + (long) part.vertexStart() * formatSize; - srcs[i] = src; - - float cx = 0; - float cy = 0; - float cz = 0; - //Update the meta bits of the model format - for (int j = 0; j < part.vertexCount(); j++) { - long base = src + (long) j * formatSize; - byte flags = (byte) 0b100;//Mipping, No alpha cut - MemoryUtil.memPutByte(base + 6L, flags);//Note: the 6 here is the offset into the vertex format - - float x = decodePosition(MemoryUtil.memGetShort(base)); - float y = decodePosition(MemoryUtil.memGetShort(base + 2)); - float z = decodePosition(MemoryUtil.memGetShort(base + 4)); - updateSectionBounds(min, max, x, y, z); - - cx += x; - cy += y; - cz += z; - - if ((j&3) == 3) { - //Compute the center point of the vertex - cx *= 1 / 4f; - cy *= 1 / 4f; - cz *= 1 / 4f; - - //Distance to camera - float dx = cx-cpx; - float dy = cy-cpy; - float dz = cz-cpz; - - float dist = dx*dx + dy*dy + dz*dz; - - int sortDistance = (int) (dist*(1<<12)); - - //We pack the sorting data - long packedSortingData = (((long)sortDistance)<<32)|((((long) j>>2)<<3)|i); - sortingData[quadId++] = packedSortingData; - - cx = 0; - cy = 0; - cz = 0; - } + var part = translucentData.getVertexCounts()[i]; + + long src = MemoryUtil.memAddress(translucentData.getVertexData().getDirectBuffer()) + (long) partOffset * formatSize; + srcs[i] = src; + + float cx = 0; + float cy = 0; + float cz = 0; + //Update the meta bits of the model format + for (int j = 0; j < part; j++) { + long base = src + (long) j * formatSize; + byte flags = (byte) 0b100;//Mipping, No alpha cut + MemoryUtil.memPutByte(base + 6L, flags);//Note: the 6 here is the offset into the vertex format + + float x = decodePosition(MemoryUtil.memGetShort(base)); + float y = decodePosition(MemoryUtil.memGetShort(base + 2)); + float z = decodePosition(MemoryUtil.memGetShort(base + 4)); + updateSectionBounds(min, max, x, y, z); + + cx += x; + cy += y; + cz += z; + + if ((j&3) == 3) { + //Compute the center point of the vertex + cx *= 1 / 4f; + cy *= 1 / 4f; + cz *= 1 / 4f; + + //Distance to camera + float dx = cx-cpx; + float dy = cy-cpy; + float dz = cz-cpz; + + float dist = dx*dx + dy*dy + dz*dz; + + int sortDistance = (int) (dist*(1<<12)); + + //We pack the sorting data + long packedSortingData = (((long)sortDistance)<<32)|((((long) j>>2)<<3)|i); + sortingData[quadId++] = packedSortingData; + + cx = 0; + cy = 0; + cz = 0; } } + partOffset += part; } if (quadId != sortingData.length) { @@ -170,51 +172,50 @@ private static void packageSectionGeometry(int formatSize, NativeBuffer output, var cutout = result.meshes.get(DefaultTerrainRenderPasses.CUTOUT); //Do all but translucent + long solidPartOffset = 0; + long cutoutPartOffset = 0; for (int i = 0; i < 7; i++) { int poff = offset; if (solid != null) { - var part = solid.getVertexRanges()[i]; - if (part != null) { - long src = MemoryUtil.memAddress(solid.getVertexData().getDirectBuffer()) + (long) part.vertexStart() * formatSize; - long dst = outPtr + offset * 4L * formatSize; - MemoryUtil.memCopy(src, dst, (long) part.vertexCount() * formatSize); - - //Update the meta bits of the model format - for (int j = 0; j < part.vertexCount(); j++) { - long base = dst+ (long) j * formatSize; - byte flags = (byte) 0b100;//Mipping, No alpha cut - MemoryUtil.memPutByte(base + 6L, flags);//Note: the 6 here is the offset into the vertex format - - updateSectionBounds(min, max, base); - } - - offset += part.vertexCount()/4; + var part = solid.getVertexCounts()[i]; + long src = MemoryUtil.memAddress(solid.getVertexData().getDirectBuffer()) + solidPartOffset * formatSize; + long dst = outPtr + offset * 4L * formatSize; + MemoryUtil.memCopy(src, dst, (long) part * formatSize); + + //Update the meta bits of the model format + for (int j = 0; j < part; j++) { + long base = dst+ (long) j * formatSize; + byte flags = (byte) 0b100;//Mipping, No alpha cut + MemoryUtil.memPutByte(base + 6L, flags);//Note: the 6 here is the offset into the vertex format + + updateSectionBounds(min, max, base); } + + offset += part/4; + solidPartOffset += part; } if (cutout != null) { - var part = cutout.getVertexRanges()[i]; - if (part != null) { - long src = MemoryUtil.memAddress(cutout.getVertexData().getDirectBuffer()) + (long) part.vertexStart() * formatSize; - long dst = outPtr + offset * 4L * formatSize; - MemoryUtil.memCopy(src, dst, (long) part.vertexCount() * formatSize); - - //Update the meta bits of the model format - for (int j = 0; j < part.vertexCount(); j++) { - long base = dst + (long) j * formatSize; - short sflags = MemoryUtil.memGetByte(base + 6L); - short mipbits = (short) ((sflags&(3<<1))>>1); - //mipping, remap 0.5 cut to 0.1 when iris is loaded - if (mipbits == 0b10 && IrisCheck.IRIS_LOADED) { - mipbits = 0b01; - } - byte flags = (byte) (((sflags&1)<<2) | mipbits); - MemoryUtil.memPutByte(base + 6L, flags);//Note: the 6 here is the offset into the vertex format - - updateSectionBounds(min, max, base); + var part = cutout.getVertexCounts()[i]; + long src = MemoryUtil.memAddress(cutout.getVertexData().getDirectBuffer()) + cutoutPartOffset * formatSize; + long dst = outPtr + offset * 4L * formatSize; + MemoryUtil.memCopy(src, dst, (long) part * formatSize); + + //Update the meta bits of the model format + for (int j = 0; j < part; j++) { + long base = dst + (long) j * formatSize; + short sflags = MemoryUtil.memGetByte(base + 6L); + short mipbits = (short) ((sflags&(3<<1))>>1); + //mipping, remap 0.5 cut to 0.1 when iris is loaded + if (mipbits == 0b10 && IrisCheck.IRIS_LOADED) { + mipbits = 0b01; } + byte flags = (byte) (((sflags&1)<<2) | mipbits); + MemoryUtil.memPutByte(base + 6L, flags);//Note: the 6 here is the offset into the vertex format - offset += part.vertexCount()/4; + updateSectionBounds(min, max, base); } + offset += part/4; + cutoutPartOffset += part; } outOffsets[i] = (short) (offset - poff); } diff --git a/src/main/java/me/cortex/nvidium/util/SegmentedManager.java b/src/main/java/me/cortex/nvidium/util/SegmentedManager.java index c1122d5e..385581d2 100644 --- a/src/main/java/me/cortex/nvidium/util/SegmentedManager.java +++ b/src/main/java/me/cortex/nvidium/util/SegmentedManager.java @@ -1,6 +1,7 @@ package me.cortex.nvidium.util; import it.unimi.dsi.fastutil.longs.LongArrayList; +import it.unimi.dsi.fastutil.longs.LongBidirectionalIterator; import it.unimi.dsi.fastutil.longs.LongList; import it.unimi.dsi.fastutil.longs.LongRBTreeSet; diff --git a/src/main/java/me/cortex/nvidium/util/TickableManager.java b/src/main/java/me/cortex/nvidium/util/TickableManager.java index ad9db23b..dc542c1c 100644 --- a/src/main/java/me/cortex/nvidium/util/TickableManager.java +++ b/src/main/java/me/cortex/nvidium/util/TickableManager.java @@ -1,6 +1,7 @@ package me.cortex.nvidium.util; import java.lang.ref.WeakReference; +import java.util.Iterator; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index c0a9795f..5219cadb 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -22,6 +22,6 @@ "depends": { "fabricloader": ">=0.15", "minecraft": ">=1.21", - "sodium": ["=0.5.9", "=0.5.11"] + "sodium": ["=0.5.9", "=0.5.11", "=0.6.0-beta.1"] } }