From 43b5a8a8c24ad8c4903f7954e8c8224ff12f399a Mon Sep 17 00:00:00 2001 From: MrTJP Date: Wed, 29 Nov 2023 16:49:41 -0500 Subject: [PATCH] fix: halo renderer bug messing up rendering of various mods --- .../projectred/core/client/HaloRenderer.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/mrtjp/projectred/core/client/HaloRenderer.java b/core/src/main/java/mrtjp/projectred/core/client/HaloRenderer.java index e9126a459..e1e78a0f5 100644 --- a/core/src/main/java/mrtjp/projectred/core/client/HaloRenderer.java +++ b/core/src/main/java/mrtjp/projectred/core/client/HaloRenderer.java @@ -176,6 +176,16 @@ public static void onRenderWorldLastEvent(final RenderLevelLastEvent event) { // Unfabulous rendering. Batched rendering doesn't seem to work from stage events when not // on fabulous for some reason, so we have to do it here instead. if (!isFabulous()) { + if (levelLights.isEmpty()) return; + + // Poll all pending lights from queue + List lightList = new LinkedList<>(); + LevelLight l; + while ((l = levelLights.poll()) != null) { + lightList.add(l); + } + + // Prepare render Vec3 cam = Minecraft.getInstance().getEntityRenderDispatcher().camera.getPosition(); PoseStack stack = event.getPoseStack(); stack.pushPose(); @@ -185,22 +195,17 @@ public static void onRenderWorldLastEvent(final RenderLevelLastEvent event) { ccrs.reset(); MultiBufferSource.BufferSource buffers = Minecraft.getInstance().renderBuffers().bufferSource(); - // Build light list - List lightList = new LinkedList<>(); - LevelLight l; - while ((l = levelLights.poll()) != null) { - lightList.add(l); - } - // Render to normal render target for primary visuals ccrs.bind(HALO_GLOW_RENDER_TYPE, buffers, stack); for (LevelLight light : lightList) { renderToCCRS(ccrs, light.box, light.colour, light.t, HaloContext.LEVEL_RENDERER); } + + // Finish render buffers.endBatch(); + stack.popPose(); } - // Fabulous bloom post-processing effects rendered here instead of during stage if (isFabulous() && postChainFlushPending) { postChainFlushPending = false;