From 531f769bde603027ed5b31f559e4901495ac8d21 Mon Sep 17 00:00:00 2001 From: lcy0x1 Date: Thu, 19 Sep 2024 23:08:26 +0800 Subject: [PATCH] fix #1504 and #1553 --- .../neoforge/client/ClientHooks.java | 7 +---- .../neoforge/client/gui/GuiLayerManager.java | 27 +++++++++++++++++-- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/neoforged/neoforge/client/ClientHooks.java b/src/main/java/net/neoforged/neoforge/client/ClientHooks.java index 8bc74f258c..c0e4614f85 100644 --- a/src/main/java/net/neoforged/neoforge/client/ClientHooks.java +++ b/src/main/java/net/neoforged/neoforge/client/ClientHooks.java @@ -180,7 +180,6 @@ import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; import net.neoforged.neoforge.client.extensions.common.IClientMobEffectExtensions; import net.neoforged.neoforge.client.gui.ClientTooltipComponentManager; -import net.neoforged.neoforge.client.gui.GuiLayerManager; import net.neoforged.neoforge.client.gui.map.MapDecorationRendererManager; import net.neoforged.neoforge.client.model.data.ModelData; import net.neoforged.neoforge.common.NeoForge; @@ -247,12 +246,8 @@ public static void popGuiLayer(Minecraft minecraft) { } public static float getGuiFarPlane() { - // 11000 units for the overlay background and 10000 units for each layered Screen or 200 units for each HUD layer, whichever ends up higher - + // 11000 units for the overlay background and 10000 units for each layered Scree float depth = 10_000F * (1 + guiLayers.size()); - if (Minecraft.getInstance().level != null) { - depth = Math.max(depth, GuiLayerManager.Z_SEPARATION * Minecraft.getInstance().gui.getLayerCount()); - } return 11_000F + depth; } diff --git a/src/main/java/net/neoforged/neoforge/client/gui/GuiLayerManager.java b/src/main/java/net/neoforged/neoforge/client/gui/GuiLayerManager.java index 8d39152000..fb82138107 100644 --- a/src/main/java/net/neoforged/neoforge/client/gui/GuiLayerManager.java +++ b/src/main/java/net/neoforged/neoforge/client/gui/GuiLayerManager.java @@ -5,6 +5,8 @@ package net.neoforged.neoforge.client.gui; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; import java.util.ArrayList; import java.util.List; import java.util.function.BooleanSupplier; @@ -12,6 +14,8 @@ import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.LayeredDraw; +import net.minecraft.client.renderer.RenderStateShard; +import net.minecraft.client.renderer.RenderType; import net.minecraft.resources.ResourceLocation; import net.neoforged.fml.ModLoader; import net.neoforged.neoforge.client.event.RegisterGuiLayersEvent; @@ -69,8 +73,10 @@ private void renderInner(GuiGraphics guiGraphics, DeltaTracker partialTick) { layer.layer().render(guiGraphics, partialTick); NeoForge.EVENT_BUS.post(new RenderGuiLayerEvent.Post(guiGraphics, partialTick, layer.name(), layer.layer())); } - - guiGraphics.pose().translate(0.0F, 0.0F, Z_SEPARATION); + // clear depth values to keep hud rendered at the same depth + guiGraphics.pose().translate(0, 0, -1000); + guiGraphics.fill(LayerRenderType.GUI, 0, 0, guiGraphics.guiWidth(), guiGraphics.guiHeight(), -1); + guiGraphics.pose().translate(0, 0, 1000); } guiGraphics.pose().popPose(); @@ -87,4 +93,21 @@ public void initModdedLayers() { public int getLayerCount() { return this.layers.size(); } + + private static class LayerRenderType extends RenderType { + public static final RenderType GUI = create( + "reverse_gui", + DefaultVertexFormat.POSITION_COLOR, + VertexFormat.Mode.QUADS, + 786432, + RenderType.CompositeState.builder() + .setShaderState(RENDERTYPE_GUI_SHADER) + .setWriteMaskState(RenderStateShard.DEPTH_WRITE) + .setDepthTestState(GREATER_DEPTH_TEST) + .createCompositeState(false)); + + public LayerRenderType(String name, VertexFormat format, VertexFormat.Mode mode, int bufferSize, boolean affectsCrumbling, boolean sortOnUpload, Runnable setupState, Runnable clearState) { + super(name, format, mode, bufferSize, affectsCrumbling, sortOnUpload, setupState, clearState); + } + } }