Ignore depth buffer when drawing screens (panels are properly Z sorted), partially fixes issues with TOP
This commit is contained in:
parent
2753997898
commit
a26ed5ec41
@ -33,6 +33,10 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.lwjgl.opengl.GL11.GL_ALWAYS;
|
||||
import static org.lwjgl.opengl.GL11.GL_LESS;
|
||||
import static org.lwjgl.opengl.GL13.GL_TEXTURE0;
|
||||
|
||||
/**
|
||||
* This class encapsulate most of logic for handling EditablePanel and it's children
|
||||
* It inherits AbstractContainerScreen, but most of methods of AbstractContainerScreen are re implemented or straight removed
|
||||
@ -455,14 +459,24 @@ public abstract class MatteryScreen<T extends MatteryMenu> extends AbstractConta
|
||||
}
|
||||
}
|
||||
|
||||
RenderSystem.defaultBlendFunc();
|
||||
RenderSystem.enableBlend();
|
||||
RenderSystem.enableDepthTest();
|
||||
RenderSystem.enableTexture();
|
||||
RenderSystem.activeTexture(GL_TEXTURE0);
|
||||
|
||||
float depth = -900f;
|
||||
|
||||
for (var panel : panels) {
|
||||
RenderSystem.depthFunc(GL_ALWAYS);
|
||||
|
||||
panel.set3DDepth(depth);
|
||||
RenderSystem.setShaderColor(1F, 1F, 1F, 1F);
|
||||
depth = Math.max(depth, panel.render(pose, mouse_x, mouse_y, flag));
|
||||
}
|
||||
|
||||
RenderSystem.depthFunc(GL_LESS);
|
||||
|
||||
net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiContainerEvent.DrawBackground(this, pose, mouse_x, mouse_y));
|
||||
|
||||
RenderSystem.disableDepthTest();
|
||||
|
@ -7,6 +7,9 @@ import net.minecraft.client.renderer.GameRenderer;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
|
||||
|
||||
import static org.lwjgl.opengl.GL11.GL_ALWAYS;
|
||||
import static org.lwjgl.opengl.GL11.GL_LESS;
|
||||
|
||||
/**
|
||||
* I am too lazy to learn how Mojang's API works
|
||||
* so I just recreate part of GMod's API in here
|
||||
@ -59,6 +62,11 @@ public class RenderHelper {
|
||||
float v1
|
||||
) {
|
||||
RenderSystem.setShader(GameRenderer::getPositionTexShader);
|
||||
RenderSystem.enableTexture();
|
||||
RenderSystem.enableBlend();
|
||||
RenderSystem.defaultBlendFunc();
|
||||
|
||||
RenderSystem.depthFunc(GL_ALWAYS);
|
||||
|
||||
var builder = Tesselator.getInstance().getBuilder();
|
||||
builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX);
|
||||
@ -450,6 +458,8 @@ public class RenderHelper {
|
||||
RenderSystem.defaultBlendFunc();
|
||||
RenderSystem.setShader(GameRenderer::getPositionColorShader);
|
||||
|
||||
RenderSystem.depthFunc(GL_ALWAYS);
|
||||
|
||||
var tess = Tesselator.getInstance();
|
||||
BufferBuilder builder = tess.getBuilder();
|
||||
|
||||
@ -462,7 +472,6 @@ public class RenderHelper {
|
||||
|
||||
tess.end();
|
||||
|
||||
RenderSystem.disableBlend();
|
||||
RenderSystem.enableTexture();
|
||||
}
|
||||
|
||||
|
@ -19,6 +19,9 @@ import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
|
||||
import static org.lwjgl.opengl.GL11.GL_ALWAYS;
|
||||
import static org.lwjgl.opengl.GL11.GL_LESS;
|
||||
|
||||
public abstract class AbstractSlotPanel extends EditablePanel {
|
||||
public AbstractSlotPanel(@Nonnull MatteryScreen<?> screen, @Nullable EditablePanel parent, float x, float y, float width, float height) {
|
||||
super(screen, parent, x, y, width, height);
|
||||
@ -55,11 +58,15 @@ public abstract class AbstractSlotPanel extends EditablePanel {
|
||||
system_stack.translate(parent_x + 1, parent_y + 1, 0);
|
||||
RenderSystem.applyModelViewMatrix();
|
||||
|
||||
RenderSystem.depthFunc(GL_LESS);
|
||||
|
||||
// Thanks Mojang
|
||||
// Very cool
|
||||
// (for int x, int y, which are then cast into doubles anyway)
|
||||
screen.getItemRenderer().blitOffset = accumulated_depth - 100; // force item to draw only 50 units "above" background
|
||||
screen.getItemRenderer().renderAndDecorateItem(Minecraft.getInstance().player, itemstack, 0, 0, (int) (parent_x + parent_y * 1000) /* some kind of indexing ? */);
|
||||
|
||||
RenderSystem.depthFunc(GL_ALWAYS);
|
||||
screen.getItemRenderer().renderGuiItemDecorations(screen.getFont(), itemstack, 0, 0, count_override);
|
||||
|
||||
// too big accumulations can lead to Z near clipping issues
|
||||
|
@ -1,5 +1,6 @@
|
||||
package ru.dbotthepony.mc.otm.screen.panels;
|
||||
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.narration.NarratableEntry;
|
||||
@ -14,6 +15,8 @@ import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static org.lwjgl.opengl.GL11.GL_ALWAYS;
|
||||
|
||||
public class FramePanel extends EditablePanel implements NarratableEntry {
|
||||
public enum FrameTabPosition {
|
||||
TOP(28, 28,28, 32),
|
||||
@ -239,7 +242,9 @@ public class FramePanel extends EditablePanel implements NarratableEntry {
|
||||
// RenderSystem.enableDepthTest();
|
||||
|
||||
// title
|
||||
RenderSystem.depthFunc(GL_ALWAYS);
|
||||
screen.getFont().draw(stack, title, 8, 5, 4210752);
|
||||
RenderSystem.depthFunc(GL_ALWAYS);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,5 +1,6 @@
|
||||
package ru.dbotthepony.mc.otm.screen.panels;
|
||||
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import ru.dbotthepony.mc.otm.menu.MatteryMenu;
|
||||
import ru.dbotthepony.mc.otm.menu.widget.AbstractWidget;
|
||||
@ -8,6 +9,8 @@ import ru.dbotthepony.mc.otm.screen.MatteryScreen;
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import static org.lwjgl.opengl.GL11.GL_ALWAYS;
|
||||
|
||||
public class MatteryWidgetPanel extends EditablePanel {
|
||||
public final AbstractWidget widget;
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package ru.dbotthepony.mc.otm.screen.panels;
|
||||
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import net.minecraft.client.gui.components.AbstractWidget;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
@ -10,6 +11,8 @@ import ru.dbotthepony.mc.otm.screen.MatteryScreen;
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import static org.lwjgl.opengl.GL11.GL_ALWAYS;
|
||||
|
||||
public class MinecraftWidgetPanel<T extends AbstractWidget> extends EditablePanel {
|
||||
public interface WidgetFactory<T extends AbstractWidget> {
|
||||
T create(MinecraftWidgetPanel<T> panel);
|
||||
@ -89,7 +92,9 @@ public class MinecraftWidgetPanel<T extends AbstractWidget> extends EditablePane
|
||||
|
||||
@Override
|
||||
protected void innerRender(PoseStack stack, float mouse_x, float mouse_y, float flag) {
|
||||
RenderSystem.depthFunc(GL_ALWAYS);
|
||||
getOrCreateWidget().render(stack, (int) mouse_x, (int) mouse_y, flag);
|
||||
RenderSystem.depthFunc(GL_ALWAYS);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
Reference in New Issue
Block a user