From e4c58ab4c01a519d1d7de1ab747c6c3523567434 Mon Sep 17 00:00:00 2001 From: IMS212 Date: Fri, 14 Feb 2025 20:17:47 -0800 Subject: [PATCH] Update to 25w07a --- buildSrc/src/main/kotlin/BuildConfig.kt | 6 +-- .../client/gl/device/GLRenderDevice.java | 4 +- .../compile/pipeline/BlockRenderContext.java | 8 +-- .../chunk/compile/pipeline/BlockRenderer.java | 4 +- .../pipeline/DefaultFluidRenderer.java | 2 +- .../tasks/ChunkBuilderMeshingTask.java | 6 +-- .../chunk/shader/DefaultShaderInterface.java | 9 ++-- .../frapi/mesh/MutableQuadViewImpl.java | 18 +++---- .../render/AbstractBlockRenderContext.java | 7 ++- .../frapi/render/ItemRenderContext.java | 10 ++-- .../render/NonTerrainBlockRenderContext.java | 4 +- .../render/immediate/CloudRenderer.java | 53 +++++++++---------- .../client/services/PlatformBlockAccess.java | 6 +-- .../client/services/PlatformModelAccess.java | 9 ++-- .../mods/sodium/client/util/TextureUtil.java | 5 +- .../core/world/map/ClientChunkCacheMixin.java | 6 +-- .../checks/threading/MixinRenderSystem.java | 28 ---------- .../render/frapi/BakedModelMixin.java | 11 ++-- .../render/frapi/ItemRendererMixin.java | 32 ----------- .../render/frapi/ModelBlockRendererMixin.java | 4 +- .../intrinsics/BufferBuilderMixin.java | 16 +++--- .../matrix_stack/PoseStackMixin.java | 47 +--------------- .../render/model/item/ItemRendererMixin.java | 28 ++-------- .../world/clouds/LevelRendererMixin.java | 10 ++-- .../textures/SpriteContentsInvoker.java | 3 +- .../tracking/ModelBlockRendererMixin.java | 6 +-- .../SpriteContentsInterpolationMixin.java | 10 ++-- .../resources/sodium-common.accesswidener | 1 - .../main/resources/sodium-common.mixins.json | 31 ++++++----- fabric/build.gradle.kts | 11 +++- .../fabric/block/FabricBlockAccess.java | 5 +- .../fabric/model/FabricModelAccess.java | 8 +-- .../mixin/core/model/quad/BakedQuadMixin.java | 4 +- .../model/DelegateBakedModelMixin.java | 44 --------------- .../model/MultiPartBakedModelMixin.java | 14 +++-- .../model/WeightedBakedModelMixin.java | 39 -------------- .../model/WeightedRandomListMixin.java | 44 --------------- .../model/block/ModelBlockRendererMixin.java | 8 +-- fabric/src/main/resources/fabric.mod.json | 1 - .../resources/sodium-fabric.accesswidener | 1 - .../main/resources/sodium-fabric.mixins.json | 3 -- settings.gradle.kts | 1 - 42 files changed, 152 insertions(+), 415 deletions(-) delete mode 100644 common/src/main/java/net/caffeinemc/mods/sodium/mixin/debug/checks/threading/MixinRenderSystem.java delete mode 100644 fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/model/DelegateBakedModelMixin.java delete mode 100644 fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/model/WeightedBakedModelMixin.java delete mode 100644 fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/model/WeightedRandomListMixin.java diff --git a/buildSrc/src/main/kotlin/BuildConfig.kt b/buildSrc/src/main/kotlin/BuildConfig.kt index 9c29c66cc8..7ff0e53440 100644 --- a/buildSrc/src/main/kotlin/BuildConfig.kt +++ b/buildSrc/src/main/kotlin/BuildConfig.kt @@ -1,13 +1,13 @@ import org.gradle.api.Project object BuildConfig { - val MINECRAFT_VERSION: String = "1.21.4" + val MINECRAFT_VERSION: String = "25w07a" val NEOFORGE_VERSION: String = "21.4.88-beta" - val FABRIC_LOADER_VERSION: String = "0.16.9" + val FABRIC_LOADER_VERSION: String = "0.16.10" val FABRIC_API_VERSION: String = "0.112.1+1.21.4" // This value can be set to null to disable Parchment. - val PARCHMENT_VERSION: String? = "2025.01.19" + val PARCHMENT_VERSION: String? = null // https://semver.org/ var MOD_VERSION: String = "0.7.0" diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/gl/device/GLRenderDevice.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/gl/device/GLRenderDevice.java index 237d49cc6e..b2841433ef 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/client/gl/device/GLRenderDevice.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/gl/device/GLRenderDevice.java @@ -8,7 +8,7 @@ import net.caffeinemc.mods.sodium.client.gl.tessellation.*; import net.caffeinemc.mods.sodium.client.gl.util.EnumBitField; import org.lwjgl.opengl.*; -import com.mojang.blaze3d.vertex.BufferUploader; + import java.nio.ByteBuffer; public class GLRenderDevice implements RenderDevice { @@ -34,8 +34,6 @@ public void makeActive() { return; } - BufferUploader.reset(); - this.stateTracker.clear(); this.isActive = true; } diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/pipeline/BlockRenderContext.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/pipeline/BlockRenderContext.java index d65aaf086b..a67491106d 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/pipeline/BlockRenderContext.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/pipeline/BlockRenderContext.java @@ -2,7 +2,7 @@ import net.caffeinemc.mods.sodium.client.render.chunk.translucent_sorting.TranslucentGeometryCollector; import net.caffeinemc.mods.sodium.client.world.LevelSlice; -import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.renderer.block.model.BlockStateModel; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.state.BlockState; import org.joml.Vector3f; @@ -17,7 +17,7 @@ public class BlockRenderContext { private final Vector3f origin = new Vector3f(); private BlockState state; - private BakedModel model; + private BlockStateModel model; private long seed; @@ -27,7 +27,7 @@ public BlockRenderContext(LevelSlice slice, TranslucentGeometryCollector collect this.collector = collector; } - public void update(BlockPos pos, BlockPos origin, BlockState state, BakedModel model, long seed) { + public void update(BlockPos pos, BlockPos origin, BlockState state, BlockStateModel model, long seed) { this.pos.set(pos); this.origin.set(origin.getX(), origin.getY(), origin.getZ()); @@ -68,7 +68,7 @@ public BlockState state() { /** * @return The model used for this block */ - public BakedModel model() { + public BlockStateModel model() { return this.model; } diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/pipeline/BlockRenderer.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/pipeline/BlockRenderer.java index 415f9a35fa..393090c048 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/pipeline/BlockRenderer.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/pipeline/BlockRenderer.java @@ -34,8 +34,8 @@ import net.fabricmc.fabric.api.util.TriState; import net.minecraft.client.renderer.ItemBlockRenderTypes; import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.block.model.BlockStateModel; import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.model.BakedModel; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.SingleThreadedRandomSource; @@ -80,7 +80,7 @@ public void release() { this.slice = null; } - public void renderModel(BakedModel model, BlockState state, BlockPos pos, BlockPos origin) { + public void renderModel(BlockStateModel model, BlockState state, BlockPos pos, BlockPos origin) { this.state = state; this.pos = pos; diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/pipeline/DefaultFluidRenderer.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/pipeline/DefaultFluidRenderer.java index cf89774909..d400fceda8 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/pipeline/DefaultFluidRenderer.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/pipeline/DefaultFluidRenderer.java @@ -84,7 +84,7 @@ private boolean isSideExposed(BlockAndTintGetter world, int x, int y, int z, Dir VoxelShape threshold = Shapes.box(0.0D, 0.0D, 0.0D, 1.0D, height, 1.0D); - return !Shapes.blockOccudes(threshold, shape, dir); + return !Shapes.blockOccludes(threshold, shape, dir); } return true; diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/tasks/ChunkBuilderMeshingTask.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/tasks/ChunkBuilderMeshingTask.java index a328e552c6..ba16095ec5 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/tasks/ChunkBuilderMeshingTask.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/compile/tasks/ChunkBuilderMeshingTask.java @@ -2,8 +2,8 @@ import it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap; import net.caffeinemc.mods.sodium.client.SodiumClientMod; -import net.caffeinemc.mods.sodium.client.render.chunk.ExtendedBlockEntityType; import net.caffeinemc.mods.sodium.client.render.chunk.DefaultChunkRenderer; +import net.caffeinemc.mods.sodium.client.render.chunk.ExtendedBlockEntityType; import net.caffeinemc.mods.sodium.client.render.chunk.RenderSection; import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkBuildBuffers; import net.caffeinemc.mods.sodium.client.render.chunk.compile.ChunkBuildContext; @@ -29,9 +29,9 @@ import net.minecraft.CrashReportCategory; import net.minecraft.ReportedException; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.block.model.BlockStateModel; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.chunk.VisGraph; -import net.minecraft.client.resources.model.BakedModel; import net.minecraft.core.BlockPos; import net.minecraft.util.profiling.Profiler; import net.minecraft.util.profiling.ProfilerFiller; @@ -112,7 +112,7 @@ public ChunkBuildOutput execute(ChunkBuildContext buildContext, CancellationToke modelOffset.set(x & 15, y & 15, z & 15); if (blockState.getRenderShape() == RenderShape.MODEL) { - BakedModel model = cache.getBlockModels() + BlockStateModel model = cache.getBlockModels() .getBlockModel(blockState); blockRenderer.renderModel(model, blockState, blockPos, modelOffset); } diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/shader/DefaultShaderInterface.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/shader/DefaultShaderInterface.java index f2cb18fcb6..b2cc75d595 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/shader/DefaultShaderInterface.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/chunk/shader/DefaultShaderInterface.java @@ -1,6 +1,7 @@ package net.caffeinemc.mods.sodium.client.render.chunk.shader; import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.textures.GpuTexture; import net.caffeinemc.mods.sodium.client.gl.shader.uniform.GlUniformFloat2v; import net.caffeinemc.mods.sodium.client.gl.shader.uniform.GlUniformFloat3v; import net.caffeinemc.mods.sodium.client.gl.shader.uniform.GlUniformInt; @@ -51,8 +52,8 @@ public DefaultShaderInterface(ShaderBindingContext context, ChunkShaderOptions o @Override // the shader interface should not modify pipeline state public void setupState() { // TODO: Bind to these textures directly rather than using fragile RenderSystem state - this.bindTexture(ChunkShaderTextureSlot.BLOCK, TextureUtil.getBlockTextureId()); - this.bindTexture(ChunkShaderTextureSlot.LIGHT, TextureUtil.getLightTextureId()); + this.bindTexture(ChunkShaderTextureSlot.BLOCK, TextureUtil.getBlockTexture()); + this.bindTexture(ChunkShaderTextureSlot.LIGHT, TextureUtil.getLightTexture()); var textureAtlas = (TextureAtlasAccessor) Minecraft.getInstance() .getTextureManager() @@ -78,9 +79,9 @@ public void resetState() { } @Deprecated(forRemoval = true) // should be handled properly in GFX instead. - private void bindTexture(ChunkShaderTextureSlot slot, int textureId) { + private void bindTexture(ChunkShaderTextureSlot slot, GpuTexture textureId) { GlStateManager._activeTexture(GL32C.GL_TEXTURE0 + slot.ordinal()); - GlStateManager._bindTexture(textureId); + textureId.bind(); var uniform = this.uniformTextures.get(slot); uniform.setInt(slot.ordinal()); diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/mesh/MutableQuadViewImpl.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/mesh/MutableQuadViewImpl.java index fcde4314fa..491a65f063 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/mesh/MutableQuadViewImpl.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/mesh/MutableQuadViewImpl.java @@ -28,8 +28,8 @@ import net.fabricmc.fabric.api.renderer.v1.mesh.QuadTransform; import net.fabricmc.fabric.api.renderer.v1.mesh.QuadView; import net.fabricmc.fabric.api.renderer.v1.model.SpriteFinder; -import net.minecraft.client.renderer.LightTexture; import net.fabricmc.fabric.api.util.TriState; +import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.core.Direction; @@ -292,17 +292,17 @@ public final MutableQuadViewImpl fromVanilla(int[] quadData, int startIndex) { @Override public final MutableQuadViewImpl fromVanilla(BakedQuad quad, RenderMaterial material, @Nullable Direction cullFace) { - fromVanillaInternal(quad.getVertices(), 0); + fromVanillaInternal(quad.vertices(), 0); data[baseIndex + HEADER_BITS] = EncodingFormat.cullFace(0, cullFace); - nominalFace(quad.getDirection()); - tintIndex(quad.getTintIndex()); + nominalFace(quad.direction()); + tintIndex(quad.tintIndex()); // TODO: Is this the same as hasShade? - if (!((BakedQuadView) quad).hasShade()) { + if (!((BakedQuadView) (Object) quad).hasShade()) { material = RenderMaterialImpl.setDisableDiffuse((RenderMaterialImpl) material, true); } - if (material.ambientOcclusion().orElse(true) && !((BakedQuadView) quad).hasAO()) { + if (material.ambientOcclusion().orElse(true) && !((BakedQuadView) (Object) quad).hasAO()) { material = RenderMaterialImpl.setAmbientOcclusion((RenderMaterialImpl) material, TriState.FALSE); } @@ -310,7 +310,7 @@ public final MutableQuadViewImpl fromVanilla(BakedQuad quad, RenderMaterial mate tag(0); // Copy geometry cached inside the quad - BakedQuadView bakedView = (BakedQuadView) quad; + BakedQuadView bakedView = (BakedQuadView) (Object) quad; NormI8.unpack(bakedView.getFaceNormal(), faceNormal); data[baseIndex + HEADER_FACE_NORMAL] = bakedView.getFaceNormal(); int headerBits = EncodingFormat.lightFace(data[baseIndex + HEADER_BITS], bakedView.getLightFace()); @@ -318,7 +318,7 @@ public final MutableQuadViewImpl fromVanilla(BakedQuad quad, RenderMaterial mate data[baseIndex + HEADER_BITS] = EncodingFormat.geometryFlags(headerBits, bakedView.getFlags()); isGeometryInvalid = false; - int lightEmission = quad.getLightEmission(); + int lightEmission = quad.lightEmission(); if (lightEmission > 0) { for (int i = 0; i < 4; i++) { @@ -326,7 +326,7 @@ public final MutableQuadViewImpl fromVanilla(BakedQuad quad, RenderMaterial mate } } - cachedSprite(quad.getSprite()); + cachedSprite(quad.sprite()); return this; } diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/AbstractBlockRenderContext.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/AbstractBlockRenderContext.java index 5413cb129d..250d37ed93 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/AbstractBlockRenderContext.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/AbstractBlockRenderContext.java @@ -23,11 +23,10 @@ import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.renderer.block.model.BlockStateModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.util.RandomSource; -import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; @@ -66,7 +65,7 @@ public class BlockEmitter extends MutableQuadViewImpl { clear(); } - public void bufferDefaultModel(BakedModel model, BlockState state, Predicate cullTest) { + public void bufferDefaultModel(BlockStateModel model, BlockState state, Predicate cullTest) { AbstractBlockRenderContext.this.bufferDefaultModel(model, state, cullTest); } @@ -207,7 +206,7 @@ protected void shadeQuad(MutableQuadViewImpl quad, LightMode lightMode, boolean } /* Handling of vanilla models - this is the hot path for non-modded models */ - public void bufferDefaultModel(BakedModel model, @Nullable BlockState state, Predicate cullTest) { + public void bufferDefaultModel(BlockStateModel model, @Nullable BlockState state, Predicate cullTest) { MutableQuadViewImpl editorQuad = this.editorQuad; diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/ItemRenderContext.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/ItemRenderContext.java index 9f83c0b959..5985a0de98 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/ItemRenderContext.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/ItemRenderContext.java @@ -36,9 +36,9 @@ import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.Sheets; +import net.minecraft.client.renderer.block.model.BlockStateModel; import net.minecraft.client.renderer.entity.ItemRenderer; import net.minecraft.client.renderer.item.ItemStackRenderState; -import net.minecraft.client.resources.model.BakedModel; import net.minecraft.util.RandomSource; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.level.block.state.BlockState; @@ -64,7 +64,7 @@ public class ItemEmitter extends MutableQuadViewImpl { clear(); } - public void bufferDefaultModel(BakedModel model) { + public void bufferDefaultModel(BlockStateModel model) { ItemRenderContext.this.bufferDefaultModel(this, model, null); } @@ -115,7 +115,7 @@ public QuadEmitter getEmitter() { return editorQuad; } - public void renderModel(ItemDisplayContext transformMode, PoseStack poseStack, MultiBufferSource bufferSource, int lightmap, int overlay, BakedModel model, int[] colors, RenderType layer, ItemStackRenderState.FoilType glint) { + public void renderModel(ItemDisplayContext transformMode, PoseStack poseStack, MultiBufferSource bufferSource, int lightmap, int overlay, BlockStateModel model, int[] colors, RenderType layer, ItemStackRenderState.FoilType glint) { this.transformMode = transformMode; this.poseStack = poseStack; matPosition = poseStack.last().pose(); @@ -243,7 +243,7 @@ private VertexConsumer createVertexConsumer(RenderType type, ItemStackRenderStat return ItemRenderer.getFoilBuffer(bufferSource, type, true, glint != ItemStackRenderState.FoilType.NONE); } - public void bufferDefaultModel(QuadEmitter quadEmitter, BakedModel model, @Nullable BlockState state) { + public void bufferDefaultModel(QuadEmitter quadEmitter, BlockStateModel model, @Nullable BlockState state) { if (vanillaBufferer == null) { VanillaModelEncoder.emitItemQuads(quadEmitter, model, null, randomSupplier); } else { @@ -268,6 +268,6 @@ public void bufferDefaultModel(QuadEmitter quadEmitter, BakedModel model, @Nulla /** used to accept a method reference from the ItemRenderer. */ @FunctionalInterface public interface VanillaModelBufferer { - void accept(BakedModel model, int[] colirs, int color, int overlay, PoseStack matrixStack, VertexConsumer buffer); + void accept(BlockStateModel model, int[] colirs, int color, int overlay, PoseStack matrixStack, VertexConsumer buffer); } } diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/NonTerrainBlockRenderContext.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/NonTerrainBlockRenderContext.java index da19e8e5eb..f5949faf70 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/NonTerrainBlockRenderContext.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/frapi/render/NonTerrainBlockRenderContext.java @@ -33,7 +33,7 @@ import net.fabricmc.fabric.api.util.TriState; import net.minecraft.client.color.block.BlockColors; import net.minecraft.client.renderer.ItemBlockRenderTypes; -import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.renderer.block.model.BlockStateModel; import net.minecraft.core.BlockPos; import net.minecraft.util.RandomSource; import net.minecraft.world.level.BlockAndTintGetter; @@ -56,7 +56,7 @@ public NonTerrainBlockRenderContext(BlockColors colorMap) { this.lighters = new LightPipelineProvider(this.lightDataCache); } - public void renderModel(BlockAndTintGetter blockView, BakedModel model, BlockState state, BlockPos pos, PoseStack poseStack, VertexConsumer buffer, boolean cull, RandomSource random, long seed, int overlay) { + public void renderModel(BlockAndTintGetter blockView, BlockStateModel model, BlockState state, BlockPos pos, PoseStack poseStack, VertexConsumer buffer, boolean cull, RandomSource random, long seed, int overlay) { this.level = blockView; this.state = state; this.pos = pos; diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/immediate/CloudRenderer.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/immediate/CloudRenderer.java index 16cf9cf093..c477df44b1 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/client/render/immediate/CloudRenderer.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/render/immediate/CloudRenderer.java @@ -1,9 +1,11 @@ package net.caffeinemc.mods.sodium.client.render.immediate; import com.mojang.blaze3d.buffers.BufferUsage; +import com.mojang.blaze3d.pipeline.BlendFunction; +import com.mojang.blaze3d.pipeline.RenderPipeline; import com.mojang.blaze3d.pipeline.RenderTarget; -import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.NativeImage; +import com.mojang.blaze3d.shaders.Uniform; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; import net.caffeinemc.mods.sodium.api.util.ColorABGR; @@ -15,7 +17,9 @@ import net.minecraft.client.CloudStatus; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.renderer.*; +import net.minecraft.client.renderer.DepthTestFunction; +import net.minecraft.client.renderer.FogParameters; +import net.minecraft.client.renderer.FogRenderer; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceProvider; import net.minecraft.util.ARGB; @@ -26,7 +30,6 @@ import org.jetbrains.annotations.Nullable; import org.joml.Matrix4f; import org.joml.Vector4f; -import org.lwjgl.opengl.GL32C; import org.lwjgl.system.MemoryStack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,12 +39,20 @@ public class CloudRenderer { private static final Logger LOGGER = LoggerFactory.getLogger("Sodium-CloudRenderer"); - private static final ShaderProgram CLOUDS_SHADER = new ShaderProgram( - ResourceLocation.fromNamespaceAndPath("sodium", "clouds"), - DefaultVertexFormat.POSITION_COLOR, - ShaderDefines.builder() - .build() - ); + private static final RenderPipeline.Snippet CLOUD_SNIPPET = RenderPipeline.builder().withBlend(BlendFunction.TRANSLUCENT).withVertexFormat(DefaultVertexFormat.POSITION_COLOR, VertexFormat.Mode.QUADS) + .withUniform("ColorModulator", Uniform.Type.VEC4) + .withUniform("FogStart", Uniform.Type.FLOAT) + .withUniform("FogEnd", Uniform.Type.FLOAT) + .withUniform("FogShape", Uniform.Type.INT) + .withUniform("FogColor", Uniform.Type.VEC4) + .withUniform("ModelViewMat", Uniform.Type.MATRIX4X4) + .withUniform("ProjMat", Uniform.Type.MATRIX4X4) + .withDepthTestFunction(DepthTestFunction.LEQUAL_DEPTH_TEST) // TODO this should be GL_LESS apparently? + .withVertexShader(ResourceLocation.fromNamespaceAndPath("sodium", "clouds")) + .withFragmentShader(ResourceLocation.fromNamespaceAndPath("sodium", "clouds")).buildSnippet(); + + private static final RenderPipeline CLOUDS_FULL = RenderPipeline.builder(CLOUD_SNIPPET).withCull(true).withLocation(ResourceLocation.fromNamespaceAndPath("sodium", "clouds_full")).build(); + private static final RenderPipeline CLOUDS_FLAT = RenderPipeline.builder(CLOUD_SNIPPET).withCull(false).withLocation(ResourceLocation.fromNamespaceAndPath("sodium", "clouds_flat")).build(); private static final ResourceLocation CLOUDS_TEXTURE_ID = ResourceLocation.withDefaultNamespace("textures/environment/clouds.png"); @@ -166,40 +177,26 @@ public void render(Camera camera, .bindWrite(false); } - RenderSystem.enableBlend(); - RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); - - RenderSystem.setShader(CLOUDS_SHADER); - if (flat) { RenderSystem.disableCull(); } - RenderSystem.enableDepthTest(); - RenderSystem.depthFunc(GL32C.GL_LESS); + RenderSystem.getModelViewStack().pushMatrix(); + RenderSystem.getModelViewStack().set(modelViewMatrix); // Draw vertexBuffer.bind(); - vertexBuffer.drawWithShader(modelViewMatrix, projectionMatrix, RenderSystem.getShader()); + vertexBuffer.drawWithRenderPipeline(flat ? CLOUDS_FLAT : CLOUDS_FULL, s -> {}); VertexBuffer.unbind(); - // State teardown - RenderSystem.depthFunc(GL32C.GL_LEQUAL); - RenderSystem.disableDepthTest(); - - if (flat) { - RenderSystem.enableCull(); - } - - RenderSystem.defaultBlendFunc(); - RenderSystem.disableBlend(); - if (renderTarget != null) { Minecraft.getInstance() .getMainRenderTarget() .bindWrite(false); } + RenderSystem.getModelViewStack().popMatrix(); + RenderSystem.setShaderFog(prevFogParameters); RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); } diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/services/PlatformBlockAccess.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/services/PlatformBlockAccess.java index a124dcabb7..598afd3a21 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/client/services/PlatformBlockAccess.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/services/PlatformBlockAccess.java @@ -2,10 +2,9 @@ import net.caffeinemc.mods.sodium.client.model.quad.ModelQuadView; import net.caffeinemc.mods.sodium.client.render.frapi.render.AmbientOcclusionMode; -import net.fabricmc.fabric.api.util.TriState; import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.renderer.block.model.BlockStateModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.BlockAndTintGetter; @@ -13,7 +12,6 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.FluidState; -import org.jetbrains.annotations.Nullable; public interface PlatformBlockAccess { PlatformBlockAccess INSTANCE = Services.load(PlatformBlockAccess.class); @@ -77,7 +75,7 @@ static PlatformBlockAccess getInstance() { * @param pos The current position * @return If ambient occlusion is forced, or {@code DEFAULT} */ - AmbientOcclusionMode usesAmbientOcclusion(BakedModel model, BlockState state, SodiumModelData data, RenderType renderType, BlockAndTintGetter level, BlockPos pos); + AmbientOcclusionMode usesAmbientOcclusion(BlockStateModel model, BlockState state, SodiumModelData data, RenderType renderType, BlockAndTintGetter level, BlockPos pos); /** * @param blockEntity The block entity to check. diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/services/PlatformModelAccess.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/services/PlatformModelAccess.java index efca9b4d44..cd6578bb59 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/client/services/PlatformModelAccess.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/services/PlatformModelAccess.java @@ -3,13 +3,12 @@ import net.caffeinemc.mods.sodium.client.world.LevelSlice; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.renderer.block.model.BlockStateModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.SectionPos; import net.minecraft.util.RandomSource; import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.ApiStatus; @@ -33,7 +32,7 @@ static PlatformModelAccess getInstance() { * @param modelData The platform specific model data. * @return A list of render types used by this model. */ - Iterable getModelRenderTypes(BlockAndTintGetter level, BakedModel model, BlockState state, BlockPos pos, RandomSource random, SodiumModelData modelData); + Iterable getModelRenderTypes(BlockAndTintGetter level, BlockStateModel model, BlockState state, BlockPos pos, RandomSource random, SodiumModelData modelData); /** * Returns a list of quads used by this model. @@ -47,7 +46,7 @@ static PlatformModelAccess getInstance() { * @param modelData The platform specific model data. * @return The list of quads used by the model. */ - List getQuads(BlockAndTintGetter level, BlockPos pos, BakedModel model, BlockState state, Direction face, RandomSource random, RenderType renderType, SodiumModelData modelData); + List getQuads(BlockAndTintGetter level, BlockPos pos, BlockStateModel model, BlockState state, Direction face, RandomSource random, RenderType renderType, SodiumModelData modelData); /** * Gets the container holding model data for this chunk. This operation is not thread safe. @@ -66,7 +65,7 @@ static PlatformModelAccess getInstance() { * @param originalData The model data, as retrieved by {@code getModelDataContainer()}. * @return The true model data, to render with. */ - SodiumModelData getModelData(LevelSlice slice, BakedModel model, BlockState state, BlockPos pos, SodiumModelData originalData); + SodiumModelData getModelData(LevelSlice slice, BlockStateModel model, BlockState state, BlockPos pos, SodiumModelData originalData); /** * Should not use. Use {@code SodiumModelData.EMPTY} instead. diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/util/TextureUtil.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/util/TextureUtil.java index 29ab22ceb2..703345bfe7 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/client/util/TextureUtil.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/util/TextureUtil.java @@ -1,20 +1,21 @@ package net.caffeinemc.mods.sodium.client.util; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.textures.GpuTexture; public class TextureUtil { /** * NOTE: Must be called while a RenderLayer is active. */ - public static int getLightTextureId() { + public static GpuTexture getLightTexture() { return RenderSystem.getShaderTexture(2); } /** * NOTE: Must be called while a RenderLayer is active. */ - public static int getBlockTextureId() { + public static GpuTexture getBlockTexture() { return RenderSystem.getShaderTexture(0); } } diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/core/world/map/ClientChunkCacheMixin.java b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/core/world/map/ClientChunkCacheMixin.java index aa75cb4939..78248fdc1a 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/core/world/map/ClientChunkCacheMixin.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/core/world/map/ClientChunkCacheMixin.java @@ -4,12 +4,11 @@ import net.caffeinemc.mods.sodium.client.render.chunk.map.ChunkTrackerHolder; import net.minecraft.client.multiplayer.ClientChunkCache; import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.LevelChunk; -import org.jetbrains.annotations.Nullable; +import net.minecraft.world.level.levelgen.Heightmap; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -18,6 +17,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import java.util.Map; import java.util.function.Consumer; @Mixin(ClientChunkCache.class) @@ -47,7 +47,7 @@ private void onChunkUnloaded(ChunkPos pos, CallbackInfo ci) { shift = At.Shift.AFTER ) ) - private void onChunkLoaded(int chunkX, int chunkZ, FriendlyByteBuf buf, CompoundTag nbt, Consumer consumer, CallbackInfoReturnable<@Nullable LevelChunk> cir) { + private void onChunkLoaded(int chunkX, int chunkZ, FriendlyByteBuf friendlyByteBuf, Map map, Consumer consumer, CallbackInfoReturnable cir) { ChunkTrackerHolder.get(this.level) .onChunkStatusAdded(chunkX, chunkZ, ChunkStatus.FLAG_HAS_BLOCK_DATA); } diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/debug/checks/threading/MixinRenderSystem.java b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/debug/checks/threading/MixinRenderSystem.java deleted file mode 100644 index ca2bde6658..0000000000 --- a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/debug/checks/threading/MixinRenderSystem.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.caffeinemc.mods.sodium.mixin.debug.checks.threading; - -import com.mojang.blaze3d.pipeline.RenderCall; -import com.mojang.blaze3d.systems.RenderSystem; -import net.caffeinemc.mods.sodium.client.render.util.DeferredRenderTask; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(RenderSystem.class) -public abstract class MixinRenderSystem { - /** - * @author JellySquid - * @reason Disallow the use of RenderSystem.recordRenderCall entirely - */ - @Overwrite(remap = false) - public static void recordRenderCall(RenderCall call) { - throw new UnsupportedOperationException("Usage of RenderSystem#recordRenderCall is likely a bug, " + - "which is handled as an error when Sodium is enabled in debug mode"); - } - - @Inject(method = "replayQueue", at = @At("HEAD")) - private static void handleDeferredTasks(CallbackInfo ci) { - DeferredRenderTask.runAll(); - } -} diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/frapi/BakedModelMixin.java b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/frapi/BakedModelMixin.java index 1c71d14e8e..e63a11a0b7 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/frapi/BakedModelMixin.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/frapi/BakedModelMixin.java @@ -4,11 +4,10 @@ import net.caffeinemc.mods.sodium.client.render.frapi.render.ItemRenderContext; import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter; import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel; -import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.renderer.block.model.BlockStateModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.util.RandomSource; -import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; @@ -17,12 +16,12 @@ import java.util.function.Predicate; import java.util.function.Supplier; -@Mixin(BakedModel.class) +@Mixin(BlockStateModel.class) public interface BakedModelMixin extends FabricBakedModel { @Override default void emitItemQuads(QuadEmitter emitter, Supplier randomSupplier) { if (emitter instanceof ItemRenderContext.ItemEmitter itemE && !itemE.hasTransforms()) { - itemE.bufferDefaultModel((BakedModel) this); + itemE.bufferDefaultModel((BlockStateModel) this); } else { FabricBakedModel.super.emitItemQuads(emitter, randomSupplier); } @@ -31,9 +30,9 @@ default void emitItemQuads(QuadEmitter emitter, Supplier randomSup @Override default void emitBlockQuads(QuadEmitter emitter, BlockAndTintGetter blockView, BlockState state, BlockPos pos, Supplier randomSupplier, Predicate<@Nullable Direction> cullTest) { if (emitter instanceof AbstractBlockRenderContext.BlockEmitter) { - ((AbstractBlockRenderContext.BlockEmitter) emitter).bufferDefaultModel((BakedModel) this, state, cullTest); + ((AbstractBlockRenderContext.BlockEmitter) emitter).bufferDefaultModel((BlockStateModel) this, state, cullTest); } else if (emitter instanceof ItemRenderContext.ItemEmitter itemE && !itemE.hasTransforms()) { - itemE.bufferDefaultModel((BakedModel) this); + itemE.bufferDefaultModel((BlockStateModel) this); } else { FabricBakedModel.super.emitBlockQuads(emitter, blockView, state, pos, randomSupplier, cullTest); } diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/frapi/ItemRendererMixin.java b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/frapi/ItemRendererMixin.java index a4e9a7a463..552445e6fc 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/frapi/ItemRendererMixin.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/frapi/ItemRendererMixin.java @@ -16,45 +16,13 @@ package net.caffeinemc.mods.sodium.mixin.features.render.frapi; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import net.caffeinemc.mods.sodium.client.render.frapi.render.ItemRenderContext; -import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.ItemRenderer; -import net.minecraft.client.renderer.item.ItemStackRenderState; -import net.minecraft.client.resources.model.BakedModel; -import net.minecraft.world.item.ItemDisplayContext; -import net.minecraft.world.item.ItemStack; -import org.spongepowered.asm.mixin.Final; 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.callback.CallbackInfo; /** * Entrypoint of the FRAPI pipeline for item rendering, for the baked models that require it. */ @Mixin(ItemRenderer.class) public abstract class ItemRendererMixin { - @Shadow - private static void renderModelLists(BakedModel bakedModel, int[] is, int i, int j, PoseStack poseStack, VertexConsumer vertexConsumer) { - } - @Unique - private static final ItemRenderContext.VanillaModelBufferer vanillaBufferer = ItemRendererMixin::renderModelLists; - - @Unique - private static final ThreadLocal contexts = ThreadLocal.withInitial(() -> new ItemRenderContext(vanillaBufferer)); - - @Inject(method = "renderItem", at = @At(value = "HEAD"), cancellable = true) - private static void beforeRenderItem(ItemDisplayContext itemDisplayContext, PoseStack poseStack, MultiBufferSource multiBufferSource, int light, int overlay, int[] colors, BakedModel model, RenderType renderType, ItemStackRenderState.FoilType foilType, CallbackInfo ci) { - if (!((FabricBakedModel) model).isVanillaAdapter()) { - contexts.get().renderModel(itemDisplayContext, poseStack, multiBufferSource, light, overlay, model, colors, renderType, foilType); - ci.cancel(); - } - } } diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/frapi/ModelBlockRendererMixin.java b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/frapi/ModelBlockRendererMixin.java index e231e6497a..9644078920 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/frapi/ModelBlockRendererMixin.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/frapi/ModelBlockRendererMixin.java @@ -22,7 +22,7 @@ import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel; import net.minecraft.client.color.block.BlockColors; import net.minecraft.client.renderer.block.ModelBlockRenderer; -import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.renderer.block.model.BlockStateModel; import net.minecraft.core.BlockPos; import net.minecraft.util.RandomSource; import net.minecraft.world.level.BlockAndTintGetter; @@ -48,7 +48,7 @@ public abstract class ModelBlockRendererMixin { private final ThreadLocal contexts = ThreadLocal.withInitial(() -> new NonTerrainBlockRenderContext(blockColors)); @Inject(method = "tesselateBlock", at = @At("HEAD"), cancellable = true) - private void onRender(BlockAndTintGetter blockView, BakedModel model, BlockState state, BlockPos pos, PoseStack matrix, VertexConsumer buffer, boolean cull, RandomSource rand, long seed, int overlay, CallbackInfo ci) { + private void onRender(BlockAndTintGetter blockView, BlockStateModel model, BlockState state, BlockPos pos, PoseStack matrix, VertexConsumer buffer, boolean cull, RandomSource rand, long seed, int overlay, CallbackInfo ci) { if (!((FabricBakedModel) model).isVanillaAdapter()) { contexts.get().renderModel(blockView, model, state, pos, matrix, buffer, cull, rand, seed, overlay); ci.cancel(); diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/immediate/buffer_builder/intrinsics/BufferBuilderMixin.java b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/immediate/buffer_builder/intrinsics/BufferBuilderMixin.java index 9232a508e5..df87047b48 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/immediate/buffer_builder/intrinsics/BufferBuilderMixin.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/immediate/buffer_builder/intrinsics/BufferBuilderMixin.java @@ -25,20 +25,20 @@ public void putBulkData(PoseStack.Pose matrices, BakedQuad bakedQuad, float r, f if (!this.fastFormat) { VertexConsumer.super.putBulkData(matrices, bakedQuad, r, g, b, a, light, overlay); - if (bakedQuad.getSprite() != null) { - SpriteUtil.INSTANCE.markSpriteActive(bakedQuad.getSprite()); + if (bakedQuad.sprite() != null) { + SpriteUtil.INSTANCE.markSpriteActive(bakedQuad.sprite()); } return; } - if (bakedQuad.getVertices().length < 32) { + if (bakedQuad.vertices().length < 32) { return; // we do not accept quads with less than 4 properly sized vertices } VertexBufferWriter writer = VertexBufferWriter.of(this); - ModelQuadView quad = (ModelQuadView) bakedQuad; + ModelQuadView quad = (ModelQuadView) (Object) bakedQuad; int color = ColorABGR.pack(r, g, b, a); BakedModelEncoder.writeQuadVertices(writer, matrices, quad, color, light, overlay, false); @@ -53,20 +53,20 @@ public void putBulkData(PoseStack.Pose matrices, BakedQuad bakedQuad, float[] br if (!this.fastFormat) { VertexConsumer.super.putBulkData(matrices, bakedQuad, brightnessTable, r, g, b, a, light, overlay, colorize); - if (bakedQuad.getSprite() != null) { - SpriteUtil.INSTANCE.markSpriteActive(bakedQuad.getSprite()); + if (bakedQuad.sprite() != null) { + SpriteUtil.INSTANCE.markSpriteActive(bakedQuad.sprite()); } return; } - if (bakedQuad.getVertices().length < 32) { + if (bakedQuad.vertices().length < 32) { return; // we do not accept quads with less than 4 properly sized vertices } VertexBufferWriter writer = VertexBufferWriter.of(this); - ModelQuadView quad = (ModelQuadView) bakedQuad; + ModelQuadView quad = (ModelQuadView) (Object) bakedQuad; BakedModelEncoder.writeQuadVertices(writer, matrices, quad, r, g, b, a, brightnessTable, colorize, light, overlay); diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/immediate/matrix_stack/PoseStackMixin.java b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/immediate/matrix_stack/PoseStackMixin.java index fa72ac8594..6777778ad9 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/immediate/matrix_stack/PoseStackMixin.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/immediate/matrix_stack/PoseStackMixin.java @@ -1,54 +1,9 @@ package net.caffeinemc.mods.sodium.mixin.features.render.immediate.matrix_stack; -import org.joml.Matrix3f; -import org.joml.Matrix4f; -import org.spongepowered.asm.mixin.*; import com.mojang.blaze3d.vertex.PoseStack; - -import java.util.ArrayDeque; -import java.util.Deque; +import org.spongepowered.asm.mixin.Mixin; @Mixin(PoseStack.class) public abstract class PoseStackMixin { - @Shadow - @Final - private Deque poseStack; - - @Unique - private final Deque cache = new ArrayDeque<>(); - - - /** - * @author JellySquid - * @reason Re-use entries when possible - */ - @Overwrite - public void pushPose() { - var prev = this.poseStack.getLast(); - - PoseStack.Pose entry; - - if (!this.cache.isEmpty()) { - entry = this.cache.removeLast(); - entry.pose() - .set(prev.pose()); - entry.normal() - .set(prev.normal()); - } else { - entry = new PoseStack.Pose(new Matrix4f(prev.pose()), new Matrix3f(prev.normal())); - } - - entry.trustedNormals = prev.trustedNormals; - - this.poseStack.addLast(entry); - } - /** - * @author JellySquid - * @reason Re-use entries when possible - */ - @Overwrite - public void popPose() { - this.cache.addLast(this.poseStack.removeLast()); - } } diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/item/ItemRendererMixin.java b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/item/ItemRendererMixin.java index c5af90987f..d380e0095a 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/item/ItemRendererMixin.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/item/ItemRendererMixin.java @@ -10,10 +10,8 @@ import net.caffeinemc.mods.sodium.client.model.quad.BakedQuadView; import net.caffeinemc.mods.sodium.client.render.immediate.model.BakedModelEncoder; import net.caffeinemc.mods.sodium.client.render.vertex.VertexConsumerUtils; -import net.caffeinemc.mods.sodium.client.util.DirectionUtil; import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.entity.ItemRenderer; -import net.minecraft.core.Direction; import net.minecraft.util.RandomSource; import net.minecraft.world.level.levelgen.SingleThreadedRandomSource; import org.spongepowered.asm.mixin.Mixin; @@ -37,25 +35,7 @@ private static int getLayerColorSafe(int[] is, int i) { * @reason Avoid Allocations * @return JellySquid */ - @WrapOperation(method = "renderModelLists", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/RandomSource;create()Lnet/minecraft/util/RandomSource;")) - private static RandomSource renderModelFastRandom(Operation original) { - return ItemRendererMixin.random.get(); - } - - /** - * @reason Avoid Allocations - * @return JellySquid - */ - @WrapOperation(method = "renderModelLists", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/Direction;values()[Lnet/minecraft/core/Direction;")) - private static Direction[] renderModelFastDirections(Operation original) { - return DirectionUtil.ALL_DIRECTIONS; - } - - /** - * @reason Avoid Allocations - * @return JellySquid - */ - @WrapOperation(method = "renderModelLists", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;renderQuadList(Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;Ljava/util/List;[III)V")) + @WrapOperation(method = "renderItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;renderQuadList(Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;Ljava/util/List;[III)V")) private static void renderModelFast(PoseStack poseStack, VertexConsumer vertexConsumer, List quads, int[] colors, int light, int overlay, Operation original) { var writer = VertexConsumerUtils.convertOrLog(vertexConsumer); @@ -76,16 +56,16 @@ private static void renderBakedItemQuads(PoseStack.Pose matrices, VertexBufferWr for (int i = 0; i < quads.size(); i++) { BakedQuad bakedQuad = quads.get(i); - if (bakedQuad.getVertices().length < 32) { + if (bakedQuad.vertices().length < 32) { continue; // ignore bad quads } - BakedQuadView quad = (BakedQuadView) bakedQuad; + BakedQuadView quad = (BakedQuadView) (Object) bakedQuad; int color = 0xFFFFFFFF; if (bakedQuad.isTinted()) { - color = ColorARGB.toABGR(getLayerColorSafe(colors, bakedQuad.getTintIndex())); + color = ColorARGB.toABGR(getLayerColorSafe(colors, bakedQuad.tintIndex())); } BakedModelEncoder.writeQuadVertices(writer, matrices, quad, color, light, overlay, BakedModelEncoder.shouldMultiplyAlpha()); diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/world/clouds/LevelRendererMixin.java b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/world/clouds/LevelRendererMixin.java index 7bd7e6c87a..cd1cde76ac 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/world/clouds/LevelRendererMixin.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/world/clouds/LevelRendererMixin.java @@ -1,7 +1,7 @@ package net.caffeinemc.mods.sodium.mixin.features.render.world.clouds; -import com.mojang.blaze3d.pipeline.RenderTarget; import com.mojang.blaze3d.resource.ResourceHandle; +import com.mojang.blaze3d.systems.RenderSystem; import net.caffeinemc.mods.sodium.client.render.immediate.CloudRenderer; import net.minecraft.client.Camera; import net.minecraft.client.CloudStatus; @@ -16,7 +16,6 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Group; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.Objects; @@ -40,20 +39,19 @@ public class LevelRendererMixin { * @reason Optimize cloud rendering */ @Group(name = "sodium$cloudsOverride", min = 1, max = 1) - @Dynamic @Inject( method = "method_62205", at = @At( value = "INVOKE", - target = "Lnet/minecraft/client/renderer/CloudRenderer;render(ILnet/minecraft/client/CloudStatus;FLorg/joml/Matrix4f;Lorg/joml/Matrix4f;Lnet/minecraft/world/phys/Vec3;F)V" + target = "Lnet/minecraft/client/renderer/CloudRenderer;render(ILnet/minecraft/client/CloudStatus;FLnet/minecraft/world/phys/Vec3;F)V" ), require = 0, cancellable = true ) - public void renderCloudsFabric(ResourceHandle resourceHandle, int cloudColor, CloudStatus cloudStatus, float cloudHeight, Matrix4f matModelView, Matrix4f matProjection, Vec3 camera, float partialTicks, CallbackInfo ci) { + public void renderCloudsFabric(int cloudColor, CloudStatus cloudStatus, float f, Vec3 vec3, float g, CallbackInfo ci) { ci.cancel(); - this.sodium$renderClouds(matModelView, matProjection, cloudColor); + this.sodium$renderClouds(new Matrix4f(RenderSystem.getModelViewMatrix()), RenderSystem.getProjectionMatrix(), cloudColor); } @Group(name = "sodium$cloudsOverride", min = 1, max = 1) diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/SpriteContentsInvoker.java b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/SpriteContentsInvoker.java index 66d3dfbff1..95edc7ff0d 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/SpriteContentsInvoker.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/SpriteContentsInvoker.java @@ -1,6 +1,7 @@ package net.caffeinemc.mods.sodium.mixin.features.textures; import com.mojang.blaze3d.platform.NativeImage; +import com.mojang.blaze3d.textures.GpuTexture; import net.minecraft.client.renderer.texture.SpriteContents; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; @@ -8,5 +9,5 @@ @Mixin(SpriteContents.class) public interface SpriteContentsInvoker { @Invoker - void invokeUpload(int x, int y, int unpackSkipPixels, int unpackSkipRows, NativeImage[] images); + void invokeUpload(int x, int y, int unpackSkipPixels, int unpackSkipRows, NativeImage[] images, GpuTexture texture); } \ No newline at end of file diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/tracking/ModelBlockRendererMixin.java b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/tracking/ModelBlockRendererMixin.java index 4444d4c71c..00653d3ce4 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/tracking/ModelBlockRendererMixin.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/tracking/ModelBlockRendererMixin.java @@ -21,9 +21,9 @@ public class ModelBlockRendererMixin { * @author embeddedt */ @Inject(method = "putQuadData", at = @At("HEAD")) - private void preRenderQuad(BlockAndTintGetter level, BlockState state, BlockPos pos, VertexConsumer vertexConsumer, PoseStack.Pose matrices, BakedQuad quad, float brightness0, float brightness1, float brightness2, float brightness3, int light0, int light1, int light2, int light3, int overlay, CallbackInfo ci) { - if (quad.getSprite() != null) { - SpriteUtil.INSTANCE.markSpriteActive(quad.getSprite()); + private void preRenderQuad(BlockAndTintGetter blockAndTintGetter, BlockState blockState, BlockPos blockPos, VertexConsumer vertexConsumer, PoseStack.Pose pose, BakedQuad quad, float[] fs, int[] is, int i, CallbackInfo ci) { + if (quad.sprite() != null) { + SpriteUtil.INSTANCE.markSpriteActive(quad.sprite()); } } } diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/upload/SpriteContentsInterpolationMixin.java b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/upload/SpriteContentsInterpolationMixin.java index 9812fb7eb2..d7db2bbfc5 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/upload/SpriteContentsInterpolationMixin.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/mixin/features/textures/animations/upload/SpriteContentsInterpolationMixin.java @@ -1,15 +1,17 @@ package net.caffeinemc.mods.sodium.mixin.features.textures.animations.upload; +import com.mojang.blaze3d.platform.NativeImage; +import com.mojang.blaze3d.textures.GpuTexture; +import net.caffeinemc.mods.sodium.api.util.ColorMixer; import net.caffeinemc.mods.sodium.client.util.NativeImageHelper; import net.caffeinemc.mods.sodium.mixin.features.textures.SpriteContentsInvoker; -import net.caffeinemc.mods.sodium.api.util.ColorMixer; import net.minecraft.client.renderer.texture.SpriteContents; import org.lwjgl.system.MemoryUtil; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import com.mojang.blaze3d.platform.NativeImage; + import java.util.List; @Mixin(SpriteContents.InterpolationData.class) @@ -38,7 +40,7 @@ public void assignParent(SpriteContents parent, CallbackInfo ci) { * @reason Drastic optimizations */ @Overwrite - void uploadInterpolatedFrame(int x, int y, SpriteContents.Ticker arg) { + void uploadInterpolatedFrame(int x, int y, SpriteContents.Ticker arg, GpuTexture texture) { SpriteContents.AnimatedTexture animation = ((SpriteContentsTickerAccessor) arg).getAnimationInfo(); SpriteContentsAnimatedTextureAccessor animation2 = (SpriteContentsAnimatedTextureAccessor) ((SpriteContentsTickerAccessor) arg).getAnimationInfo(); List frames = ((SpriteContentsAnimatedTextureAccessor) animation).getFrames(); @@ -97,6 +99,6 @@ void uploadInterpolatedFrame(int x, int y, SpriteContents.Ticker arg) { } } - ((SpriteContentsInvoker) this.parent).invokeUpload(x, y, 0, 0, this.activeFrame); + ((SpriteContentsInvoker) this.parent).invokeUpload(x, y, 0, 0, this.activeFrame, texture); } } diff --git a/common/src/main/resources/sodium-common.accesswidener b/common/src/main/resources/sodium-common.accesswidener index b5f056958a..50f5fa2221 100644 --- a/common/src/main/resources/sodium-common.accesswidener +++ b/common/src/main/resources/sodium-common.accesswidener @@ -13,7 +13,6 @@ accessible class net/minecraft/client/renderer/FogRenderer$MobEffectFogFunction accessible class net/minecraft/client/renderer/texture/Stitcher$Holder accessible class net/minecraft/world/level/biome/Biome$ClimateSettings accessible method net/minecraft/client/renderer/SectionBufferBuilderPool (Ljava/util/List;)V -accessible method com/mojang/blaze3d/vertex/PoseStack$Pose (Lorg/joml/Matrix4f;Lorg/joml/Matrix3f;)V accessible field com/mojang/blaze3d/vertex/PoseStack$Pose trustedNormals Z accessible field net/minecraft/world/level/GrassColor pixels [I diff --git a/common/src/main/resources/sodium-common.mixins.json b/common/src/main/resources/sodium-common.mixins.json index 4fdf585949..647781eca6 100644 --- a/common/src/main/resources/sodium-common.mixins.json +++ b/common/src/main/resources/sodium-common.mixins.json @@ -13,8 +13,8 @@ "core.MinecraftMixin", "core.WindowMixin", "core.gui.LevelLoadStatusManagerMixin", - "core.model.colors.BlockColorsMixin", "core.model.TextureAtlasSpriteMixin", + "core.model.colors.BlockColorsMixin", "core.render.BlockEntityTypeMixin", "core.render.TextureAtlasMixin", "core.render.VertexFormatMixin", @@ -27,23 +27,22 @@ "core.render.immediate.consumer.VertexMultiConsumerMixin$MultipleMixin", "core.render.texture.TextureAtlasAccessor", "core.render.world.EntityRendererAccessor", - "core.render.world.RenderBuffersMixin", "core.render.world.LevelRendererMixin", + "core.render.world.RenderBuffersMixin", "core.world.biome.ClientLevelMixin", - "core.world.chunk.ZeroBitStorageMixin", - "core.world.chunk.SimpleBitStorageMixin", "core.world.chunk.PalettedContainerMixin", + "core.world.chunk.SimpleBitStorageMixin", + "core.world.chunk.ZeroBitStorageMixin", "core.world.map.ClientChunkCacheMixin", - "core.world.map.ClientPacketListenerMixin", "core.world.map.ClientLevelMixin", - "debug.checks.threading.MixinRenderSystem", + "core.world.map.ClientPacketListenerMixin", "features.gui.hooks.console.GameRendererMixin", "features.gui.hooks.debug.DebugScreenOverlayMixin", "features.gui.hooks.settings.OptionsScreenMixin", "features.gui.screen.LevelLoadingScreenMixin", "features.options.overlays.GuiMixin", - "features.options.render_layers.LeavesBlockMixin", "features.options.render_layers.ItemBlockRenderTypesMixin", + "features.options.render_layers.LeavesBlockMixin", "features.options.weather.LevelRendererMixin", "features.render.compositing.RenderTargetMixin", "features.render.entity.CubeMixin", @@ -51,9 +50,9 @@ "features.render.entity.cull.EntityRendererMixin", "features.render.entity.shadows.EntityRenderDispatcherMixin", "features.render.frapi.BakedModelMixin", - "features.render.frapi.ModelBlockRendererMixin", - "features.render.frapi.ItemRendererMixin", "features.render.frapi.ItemRendererAccessor", + "features.render.frapi.ItemRendererMixin", + "features.render.frapi.ModelBlockRendererMixin", "features.render.gui.font.BakedGlyphMixin", "features.render.gui.outlines.LevelRendererMixin", "features.render.immediate.DirectionMixin", @@ -67,25 +66,25 @@ "features.render.model.item.ItemRendererMixin", "features.render.particle.SingleQuadParticleMixin", "features.render.world.clouds.LevelRendererMixin", - "features.render.world.sky.FogRendererMixin", "features.render.world.sky.ClientLevelMixin", + "features.render.world.sky.FogRendererMixin", "features.render.world.sky.LevelRendererMixin", "features.shader.uniform.ShaderInstanceMixin", "features.textures.NativeImageAccessor", "features.textures.SpriteContentsInvoker", - "features.textures.animations.tracking.ModelBlockRendererMixin", - "features.textures.animations.tracking.GuiGraphicsMixin", - "features.textures.animations.tracking.TextureAtlasMixin", - "features.textures.animations.tracking.TextureSheetParticleMixin", "features.textures.animations.tracking.AnimatedTextureAccessor", + "features.textures.animations.tracking.GuiGraphicsMixin", + "features.textures.animations.tracking.ModelBlockRendererMixin", "features.textures.animations.tracking.SpriteContentsFrameInfoAccessor", - "features.textures.animations.tracking.SpriteContentsTickerMixin", "features.textures.animations.tracking.SpriteContentsMixin", + "features.textures.animations.tracking.SpriteContentsTickerMixin", + "features.textures.animations.tracking.TextureAtlasMixin", + "features.textures.animations.tracking.TextureSheetParticleMixin", "features.textures.animations.upload.SpriteContentsAccessor", "features.textures.animations.upload.SpriteContentsAnimatedTextureAccessor", "features.textures.animations.upload.SpriteContentsFrameInfoAccessor", - "features.textures.animations.upload.SpriteContentsTickerAccessor", "features.textures.animations.upload.SpriteContentsInterpolationMixin", + "features.textures.animations.upload.SpriteContentsTickerAccessor", "features.textures.mipmaps.MipmapGeneratorMixin", "features.textures.mipmaps.SpriteContentsMixin", "features.textures.scan.SpriteContentsMixin", diff --git a/fabric/build.gradle.kts b/fabric/build.gradle.kts index 06a030e855..c7535ea7f3 100644 --- a/fabric/build.gradle.kts +++ b/fabric/build.gradle.kts @@ -45,7 +45,13 @@ dependencies { modImplementation("net.fabricmc:fabric-loader:${BuildConfig.FABRIC_LOADER_VERSION}") fun addEmbeddedFabricModule(name: String) { - val module = fabricApi.module(name, BuildConfig.FABRIC_API_VERSION) + val module = fabricApi.module(name, "0.116.1+1.21.5") + modImplementation(module) + include(module) + } + + fun addEmbeddedFabricModuleC(name: String) { + val module = fabricApi.module(name, "0.116.0+1.21.5") modImplementation(module) include(module) } @@ -53,7 +59,7 @@ dependencies { // Fabric API modules addEmbeddedFabricModule("fabric-api-base") addEmbeddedFabricModule("fabric-block-view-api-v2") - addEmbeddedFabricModule("fabric-renderer-api-v1") + modImplementation(files("fabric-renderer-api-v1-5.0.6+c327076a88.jar")) addEmbeddedFabricModule("fabric-rendering-data-attachment-v1") addEmbeddedFabricModule("fabric-rendering-fluids-v1") addEmbeddedFabricModule("fabric-resource-loader-v0") @@ -72,6 +78,7 @@ loom { configName = "Fabric/Client" appendProjectPathToConfigName = false ideConfigGenerated(true) + environmentVariable("LD_PRELOAD", "/usr/lib/librenderdoc.so") runDir("run") } } diff --git a/fabric/src/main/java/net/caffeinemc/mods/sodium/fabric/block/FabricBlockAccess.java b/fabric/src/main/java/net/caffeinemc/mods/sodium/fabric/block/FabricBlockAccess.java index 0fd7c13935..dc4f4b20aa 100644 --- a/fabric/src/main/java/net/caffeinemc/mods/sodium/fabric/block/FabricBlockAccess.java +++ b/fabric/src/main/java/net/caffeinemc/mods/sodium/fabric/block/FabricBlockAccess.java @@ -6,10 +6,9 @@ import net.caffeinemc.mods.sodium.client.services.PlatformBlockAccess; import net.caffeinemc.mods.sodium.client.services.SodiumModelData; import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandlerRegistry; -import net.fabricmc.fabric.api.util.TriState; import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.renderer.block.model.BlockStateModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.BlockAndTintGetter; @@ -82,7 +81,7 @@ public float getNormalVectorShade(ModelQuadView quad, BlockAndTintGetter level, } @Override - public AmbientOcclusionMode usesAmbientOcclusion(BakedModel model, BlockState state, SodiumModelData data, RenderType renderType, BlockAndTintGetter level, BlockPos pos) { + public AmbientOcclusionMode usesAmbientOcclusion(BlockStateModel model, BlockState state, SodiumModelData data, RenderType renderType, BlockAndTintGetter level, BlockPos pos) { return model.useAmbientOcclusion() ? AmbientOcclusionMode.DEFAULT : AmbientOcclusionMode.DISABLED; } diff --git a/fabric/src/main/java/net/caffeinemc/mods/sodium/fabric/model/FabricModelAccess.java b/fabric/src/main/java/net/caffeinemc/mods/sodium/fabric/model/FabricModelAccess.java index 0566c84e8a..d7e9e02ee2 100644 --- a/fabric/src/main/java/net/caffeinemc/mods/sodium/fabric/model/FabricModelAccess.java +++ b/fabric/src/main/java/net/caffeinemc/mods/sodium/fabric/model/FabricModelAccess.java @@ -8,7 +8,7 @@ import net.minecraft.client.renderer.ItemBlockRenderTypes; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.renderer.block.model.BlockStateModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.SectionPos; @@ -24,12 +24,12 @@ public class FabricModelAccess implements PlatformModelAccess { private static final SodiumModelDataContainer EMPTY_CONTAINER = new SodiumModelDataContainer(Long2ObjectMaps.emptyMap()); @Override - public Iterable getModelRenderTypes(BlockAndTintGetter level, BakedModel model, BlockState state, BlockPos pos, RandomSource random, SodiumModelData modelData) { + public Iterable getModelRenderTypes(BlockAndTintGetter level, BlockStateModel model, BlockState state, BlockPos pos, RandomSource random, SodiumModelData modelData) { return Collections.singleton(ItemBlockRenderTypes.getChunkRenderType(state)); } @Override - public List getQuads(BlockAndTintGetter level, BlockPos pos, BakedModel model, BlockState state, Direction face, RandomSource random, RenderType renderType, SodiumModelData modelData) { + public List getQuads(BlockAndTintGetter level, BlockPos pos, BlockStateModel model, BlockState state, Direction face, RandomSource random, RenderType renderType, SodiumModelData modelData) { return model.getQuads(state, face, random); } @@ -39,7 +39,7 @@ public SodiumModelDataContainer getModelDataContainer(Level level, SectionPos se } @Override - public SodiumModelData getModelData(LevelSlice slice, BakedModel model, BlockState state, BlockPos pos, SodiumModelData originalData) { + public SodiumModelData getModelData(LevelSlice slice, BlockStateModel model, BlockState state, BlockPos pos, SodiumModelData originalData) { return null; } diff --git a/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/core/model/quad/BakedQuadMixin.java b/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/core/model/quad/BakedQuadMixin.java index 38d70ac214..a29a7fa811 100644 --- a/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/core/model/quad/BakedQuadMixin.java +++ b/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/core/model/quad/BakedQuadMixin.java @@ -39,7 +39,7 @@ public abstract class BakedQuadMixin implements BakedQuadView { private boolean shade; @Shadow - public abstract int getLightEmission(); + public abstract int lightEmission(); @Unique private int flags; @@ -130,7 +130,7 @@ public Direction getLightFace() { @Override public int getMaxLightQuad(int idx) { - return LightTexture.lightCoordsWithEmission(getLight(idx), getLightEmission()); + return LightTexture.lightCoordsWithEmission(getLight(idx), lightEmission()); } @Override diff --git a/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/model/DelegateBakedModelMixin.java b/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/model/DelegateBakedModelMixin.java deleted file mode 100644 index 12b5a3d81a..0000000000 --- a/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/model/DelegateBakedModelMixin.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.caffeinemc.mods.sodium.mixin.features.model; - -import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter; -import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel; -import net.fabricmc.fabric.impl.renderer.VanillaModelEncoder; -import net.minecraft.client.resources.model.BakedModel; -import net.minecraft.client.resources.model.DelegateBakedModel; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.util.RandomSource; -import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -import java.util.function.Predicate; -import java.util.function.Supplier; - -@Mixin(value = DelegateBakedModel.class, priority = 1010) -public class DelegateBakedModelMixin implements FabricBakedModel { - @Shadow - @Final - protected BakedModel parent; - - @Override - public void emitBlockQuads(QuadEmitter emitter, BlockAndTintGetter blockView, BlockState state, BlockPos pos, Supplier randomSupplier, Predicate<@Nullable Direction> cullTest) { - if (!this.parent.isVanillaAdapter()) { - this.parent.emitBlockQuads(emitter, blockView, state, pos, randomSupplier, cullTest); - } else { - VanillaModelEncoder.emitBlockQuads(emitter, (BakedModel)this, state, randomSupplier, cullTest); - } - } - - @Override - public void emitItemQuads(QuadEmitter emitter, Supplier randomSupplier) { - if (!this.parent.isVanillaAdapter()) { - this.parent.emitItemQuads(emitter, randomSupplier); - } else { - VanillaModelEncoder.emitItemQuads(emitter, ((BakedModel) this), null, randomSupplier); - } - } -} diff --git a/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/model/MultiPartBakedModelMixin.java b/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/model/MultiPartBakedModelMixin.java index 0f90f63a90..b06d8e797b 100644 --- a/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/model/MultiPartBakedModelMixin.java +++ b/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/model/MultiPartBakedModelMixin.java @@ -2,12 +2,11 @@ import it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap; import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.renderer.block.model.BlockStateModel; import net.minecraft.client.resources.model.MultiPartBakedModel; import net.minecraft.core.Direction; import net.minecraft.util.RandomSource; import net.minecraft.world.level.block.state.BlockState; -import org.apache.commons.lang3.tuple.Pair; import org.spongepowered.asm.mixin.*; import java.util.ArrayList; @@ -15,12 +14,11 @@ import java.util.List; import java.util.Map; import java.util.concurrent.locks.StampedLock; -import java.util.function.Predicate; @Mixin(MultiPartBakedModel.class) public class MultiPartBakedModelMixin { @Unique - private final Map stateCacheFast = new Reference2ReferenceOpenHashMap<>(); + private final Map stateCacheFast = new Reference2ReferenceOpenHashMap<>(); @Unique private final StampedLock lock = new StampedLock(); @@ -38,7 +36,7 @@ public List getQuads(BlockState state, Direction face, RandomSource r return Collections.emptyList(); } - BakedModel[] models; + BlockStateModel[] models; long readStamp = this.lock.readLock(); try { @@ -50,7 +48,7 @@ public List getQuads(BlockState state, Direction face, RandomSource r if (models == null) { long writeStamp = this.lock.writeLock(); try { - List modelList = new ArrayList<>(this.selectors.size()); + List modelList = new ArrayList<>(this.selectors.size()); for (MultiPartBakedModel.Selector selector : this.selectors) { if (selector.condition().test(state)) { @@ -58,7 +56,7 @@ public List getQuads(BlockState state, Direction face, RandomSource r } } - models = modelList.toArray(BakedModel[]::new); + models = modelList.toArray(BlockStateModel[]::new); this.stateCacheFast.put(state, models); } finally { this.lock.unlockWrite(writeStamp); @@ -68,7 +66,7 @@ public List getQuads(BlockState state, Direction face, RandomSource r List quads = new ArrayList<>(); long seed = random.nextLong(); - for (BakedModel model : models) { + for (BlockStateModel model : models) { random.setSeed(seed); quads.addAll(model.getQuads(state, face, random)); } diff --git a/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/model/WeightedBakedModelMixin.java b/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/model/WeightedBakedModelMixin.java deleted file mode 100644 index 2668c97b96..0000000000 --- a/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/model/WeightedBakedModelMixin.java +++ /dev/null @@ -1,39 +0,0 @@ -package net.caffeinemc.mods.sodium.mixin.features.model; - -import net.caffeinemc.mods.sodium.client.util.WeightedRandomListExtension; -import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.resources.model.BakedModel; -import net.minecraft.client.resources.model.WeightedBakedModel; -import net.minecraft.core.Direction; -import net.minecraft.util.RandomSource; -import net.minecraft.util.random.SimpleWeightedRandomList; -import net.minecraft.util.random.WeightedEntry; -import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.*; - -import java.util.Collections; -import java.util.List; - -@Mixin(WeightedBakedModel.class) -public class WeightedBakedModelMixin { - @Shadow - @Final - private SimpleWeightedRandomList list; - - /** - * @author JellySquid - * @reason Avoid excessive object allocations - */ - @Overwrite - public List getQuads(@Nullable BlockState state, @Nullable Direction face, RandomSource random) { - WeightedEntry.Wrapper model = ((WeightedRandomListExtension>) list).sodium$getQuick(random); - - if (model != null) { - return model.data() - .getQuads(state, face, random); - } - - return Collections.emptyList(); - } -} diff --git a/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/model/WeightedRandomListMixin.java b/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/model/WeightedRandomListMixin.java deleted file mode 100644 index 9bb5b70266..0000000000 --- a/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/model/WeightedRandomListMixin.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.caffeinemc.mods.sodium.mixin.features.model; - -import com.google.common.collect.ImmutableList; -import net.caffeinemc.mods.sodium.client.util.WeightedRandomListExtension; -import net.minecraft.util.RandomSource; -import net.minecraft.util.random.WeightedEntry; -import net.minecraft.util.random.WeightedRandomList; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(WeightedRandomList.class) -public class WeightedRandomListMixin implements WeightedRandomListExtension { - @Shadow - @Final - private ImmutableList items; - - @Shadow - @Final - private int totalWeight; - - @Override - public E sodium$getQuick(RandomSource random) { - if (this.totalWeight == 0) return null; - - int randomValue = Math.abs((int) random.nextLong()) % this.totalWeight; - - int i = 0; - int len = items.size(); - - E weighted; - - do { - if (i >= len) { - return null; - } - - weighted = items.get(i++); - randomValue -= weighted.getWeight().asInt(); - } while (randomValue >= 0); - - return weighted; - } -} diff --git a/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/block/ModelBlockRendererMixin.java b/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/block/ModelBlockRendererMixin.java index 636c9974eb..ee2438a975 100644 --- a/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/block/ModelBlockRendererMixin.java +++ b/fabric/src/main/java/net/caffeinemc/mods/sodium/mixin/features/render/model/block/ModelBlockRendererMixin.java @@ -11,7 +11,7 @@ import net.caffeinemc.mods.sodium.client.util.DirectionUtil; import net.minecraft.client.renderer.block.ModelBlockRenderer; import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.renderer.block.model.BlockStateModel; import net.minecraft.core.Direction; import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; @@ -36,11 +36,11 @@ private static void renderQuads(PoseStack.Pose matrices, VertexBufferWriter writ for (int i = 0; i < quads.size(); i++) { BakedQuad bakedQuad = quads.get(i); - if (bakedQuad.getVertices().length < 32) { + if (bakedQuad.vertices().length < 32) { continue; // ignore bad quads } - BakedQuadView quad = (BakedQuadView) bakedQuad; + BakedQuadView quad = (BakedQuadView) (Object) bakedQuad; int color = quad.hasColor() ? defaultColor : 0xFFFFFFFF; @@ -57,7 +57,7 @@ private static void renderQuads(PoseStack.Pose matrices, VertexBufferWriter writ * @author JellySquid */ @Inject(method = "renderModel", at = @At("HEAD"), cancellable = true) - private void renderFast(PoseStack.Pose entry, VertexConsumer vertexConsumer, BlockState blockState, BakedModel bakedModel, float red, float green, float blue, int light, int overlay, CallbackInfo ci) { + private void renderFast(PoseStack.Pose entry, VertexConsumer vertexConsumer, BlockState blockState, BlockStateModel bakedModel, float red, float green, float blue, int light, int overlay, CallbackInfo ci) { var writer = VertexConsumerUtils.convertOrLog(vertexConsumer); if (writer == null) { return; diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 981d74eca4..146b8e64da 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -71,7 +71,6 @@ "sodium-fabric.mixins.json" ], "depends" : { - "minecraft": ["1.21.4"], "fabricloader" : ">=0.16.0", "fabric-block-view-api-v2" : "*", "fabric-renderer-api-v1" : "*", diff --git a/fabric/src/main/resources/sodium-fabric.accesswidener b/fabric/src/main/resources/sodium-fabric.accesswidener index 7dc0f617eb..db3cac990b 100644 --- a/fabric/src/main/resources/sodium-fabric.accesswidener +++ b/fabric/src/main/resources/sodium-fabric.accesswidener @@ -14,7 +14,6 @@ accessible class net/minecraft/client/renderer/texture/Stitcher$Holder accessible class net/minecraft/world/level/biome/Biome$ClimateSettings accessible method net/minecraft/client/renderer/SectionBufferBuilderPool (Ljava/util/List;)V -accessible method com/mojang/blaze3d/vertex/PoseStack$Pose (Lorg/joml/Matrix4f;Lorg/joml/Matrix3f;)V accessible field com/mojang/blaze3d/vertex/PoseStack$Pose trustedNormals Z accessible field net/minecraft/world/level/GrassColor pixels [I diff --git a/fabric/src/main/resources/sodium-fabric.mixins.json b/fabric/src/main/resources/sodium-fabric.mixins.json index 29fbd40e6c..9a70675532 100644 --- a/fabric/src/main/resources/sodium-fabric.mixins.json +++ b/fabric/src/main/resources/sodium-fabric.mixins.json @@ -10,10 +10,7 @@ }, "client": [ "core.model.quad.BakedQuadMixin", - "features.model.DelegateBakedModelMixin", "features.model.MultiPartBakedModelMixin", - "features.model.WeightedBakedModelMixin", - "features.model.WeightedRandomListMixin", "features.render.model.block.ModelBlockRendererMixin", "features.world.biome.BiomeMixin" ] diff --git a/settings.gradle.kts b/settings.gradle.kts index 0f606fd359..ef3e8f27b6 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -11,4 +11,3 @@ pluginManagement { include("common") include("fabric") -include("neoforge") \ No newline at end of file