From 56708738729b39392b5c60c1ba96d8e986d9457b Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 11 Nov 2023 21:30:57 -0500 Subject: Batch Beacon Beams + Fix drawing from an incorrect buffer --- .../hysky/skyblocker/mixin/AfterTranslucentMixin.java | 6 +++++- .../hysky/skyblocker/utils/render/RenderHelper.java | 19 ++++++++----------- 2 files changed, 13 insertions(+), 12 deletions(-) (limited to 'src/main') diff --git a/src/main/java/de/hysky/skyblocker/mixin/AfterTranslucentMixin.java b/src/main/java/de/hysky/skyblocker/mixin/AfterTranslucentMixin.java index 07f5aa75..99ba30e1 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/AfterTranslucentMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/AfterTranslucentMixin.java @@ -1,6 +1,7 @@ package de.hysky.skyblocker.mixin; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import com.llamalad7.mixinextras.sugar.Share; @@ -8,6 +9,7 @@ import com.llamalad7.mixinextras.sugar.ref.LocalBooleanRef; import de.hysky.skyblocker.utils.render.RenderHelper; import dev.cbyrne.betterinject.annotations.Inject; +import net.minecraft.client.render.BufferBuilderStorage; import net.minecraft.client.render.WorldRenderer; /** @@ -15,6 +17,8 @@ import net.minecraft.client.render.WorldRenderer; */ @Mixin(value = WorldRenderer.class, priority = 2000) public class AfterTranslucentMixin { + @Shadow + private BufferBuilderStorage bufferBuilders; @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/ParticleManager;renderParticles(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider$Immediate;Lnet/minecraft/client/render/LightmapTextureManager;Lnet/minecraft/client/render/Camera;F)V")) private void onRenderParticles(@Share("renderedParticles") LocalBooleanRef renderedParticles) { @@ -25,7 +29,7 @@ public class AfterTranslucentMixin { private void beforeClouds(@Share("renderedParticles") LocalBooleanRef renderedParticles) { if (renderedParticles.get()) { renderedParticles.set(false); - RenderHelper.drawGlobalObjectsAfterTranslucent(); + RenderHelper.drawGlobalObjectsAfterAfterTranslucent(bufferBuilders.getEntityVertexConsumers()); } } } diff --git a/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java b/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java index 020252e7..1058d94c 100644 --- a/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java +++ b/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java @@ -12,6 +12,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.render.*; import net.minecraft.client.render.VertexFormat.DrawMode; +import net.minecraft.client.render.block.entity.BeaconBlockEntityRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.sound.SoundEvents; import net.minecraft.text.OrderedText; @@ -76,13 +77,8 @@ public class RenderHelper { matrices.push(); matrices.translate(pos.getX() - camera.getX(), pos.getY() - camera.getY(), pos.getZ() - camera.getZ()); - Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder buffer = tessellator.getBuffer(); - VertexConsumerProvider.Immediate consumer = VertexConsumerProvider.immediate(buffer); + BeaconBlockEntityRendererInvoker.renderBeam(matrices, context.consumers(), context.tickDelta(), context.world().getTime(), 0, MAX_OVERWORLD_BUILD_HEIGHT, colorComponents); - BeaconBlockEntityRendererInvoker.renderBeam(matrices, consumer, context.tickDelta(), context.world().getTime(), 0, MAX_OVERWORLD_BUILD_HEIGHT, colorComponents); - - consumer.draw(); matrices.pop(); } } @@ -251,13 +247,14 @@ public class RenderHelper { matrices.pop(); } - public static void drawGlobalObjectsAfterTranslucent() { - Tessellator tessellator = RenderSystem.renderThreadTesselator(); - BufferBuilder buffer = tessellator.getBuffer(); - VertexConsumerProvider.Immediate immediate = VertexConsumerProvider.immediate(buffer); - + public static void drawGlobalObjectsAfterAfterTranslucent(VertexConsumerProvider.Immediate immediate) { + //Filled Blocks immediate.draw(SRenderLayers.getFilled()); immediate.draw(SRenderLayers.getFilledThroughWalls()); + + //Beacon Beams + immediate.draw(RenderLayer.getBeaconBeam(BeaconBlockEntityRenderer.BEAM_TEXTURE, false)); + immediate.draw(RenderLayer.getBeaconBeam(BeaconBlockEntityRenderer.BEAM_TEXTURE, true)); } public static void runOnRenderThread(Runnable runnable) { -- cgit