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.List;
|
||||||
import java.util.Set;
|
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
|
* 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
|
* 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;
|
float depth = -900f;
|
||||||
|
|
||||||
for (var panel : panels) {
|
for (var panel : panels) {
|
||||||
|
RenderSystem.depthFunc(GL_ALWAYS);
|
||||||
|
|
||||||
panel.set3DDepth(depth);
|
panel.set3DDepth(depth);
|
||||||
RenderSystem.setShaderColor(1F, 1F, 1F, 1F);
|
RenderSystem.setShaderColor(1F, 1F, 1F, 1F);
|
||||||
depth = Math.max(depth, panel.render(pose, mouse_x, mouse_y, flag));
|
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));
|
net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiContainerEvent.DrawBackground(this, pose, mouse_x, mouse_y));
|
||||||
|
|
||||||
RenderSystem.disableDepthTest();
|
RenderSystem.disableDepthTest();
|
||||||
|
@ -7,6 +7,9 @@ import net.minecraft.client.renderer.GameRenderer;
|
|||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
|
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
|
* I am too lazy to learn how Mojang's API works
|
||||||
* so I just recreate part of GMod's API in here
|
* so I just recreate part of GMod's API in here
|
||||||
@ -59,6 +62,11 @@ public class RenderHelper {
|
|||||||
float v1
|
float v1
|
||||||
) {
|
) {
|
||||||
RenderSystem.setShader(GameRenderer::getPositionTexShader);
|
RenderSystem.setShader(GameRenderer::getPositionTexShader);
|
||||||
|
RenderSystem.enableTexture();
|
||||||
|
RenderSystem.enableBlend();
|
||||||
|
RenderSystem.defaultBlendFunc();
|
||||||
|
|
||||||
|
RenderSystem.depthFunc(GL_ALWAYS);
|
||||||
|
|
||||||
var builder = Tesselator.getInstance().getBuilder();
|
var builder = Tesselator.getInstance().getBuilder();
|
||||||
builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX);
|
builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX);
|
||||||
@ -450,6 +458,8 @@ public class RenderHelper {
|
|||||||
RenderSystem.defaultBlendFunc();
|
RenderSystem.defaultBlendFunc();
|
||||||
RenderSystem.setShader(GameRenderer::getPositionColorShader);
|
RenderSystem.setShader(GameRenderer::getPositionColorShader);
|
||||||
|
|
||||||
|
RenderSystem.depthFunc(GL_ALWAYS);
|
||||||
|
|
||||||
var tess = Tesselator.getInstance();
|
var tess = Tesselator.getInstance();
|
||||||
BufferBuilder builder = tess.getBuilder();
|
BufferBuilder builder = tess.getBuilder();
|
||||||
|
|
||||||
@ -462,7 +472,6 @@ public class RenderHelper {
|
|||||||
|
|
||||||
tess.end();
|
tess.end();
|
||||||
|
|
||||||
RenderSystem.disableBlend();
|
|
||||||
RenderSystem.enableTexture();
|
RenderSystem.enableTexture();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,9 @@ import javax.annotation.Nonnull;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.List;
|
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 abstract class AbstractSlotPanel extends EditablePanel {
|
||||||
public AbstractSlotPanel(@Nonnull MatteryScreen<?> screen, @Nullable EditablePanel parent, float x, float y, float width, float height) {
|
public AbstractSlotPanel(@Nonnull MatteryScreen<?> screen, @Nullable EditablePanel parent, float x, float y, float width, float height) {
|
||||||
super(screen, parent, x, y, width, 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);
|
system_stack.translate(parent_x + 1, parent_y + 1, 0);
|
||||||
RenderSystem.applyModelViewMatrix();
|
RenderSystem.applyModelViewMatrix();
|
||||||
|
|
||||||
|
RenderSystem.depthFunc(GL_LESS);
|
||||||
|
|
||||||
// Thanks Mojang
|
// Thanks Mojang
|
||||||
// Very cool
|
// Very cool
|
||||||
// (for int x, int y, which are then cast into doubles anyway)
|
// (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().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 ? */);
|
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);
|
screen.getItemRenderer().renderGuiItemDecorations(screen.getFont(), itemstack, 0, 0, count_override);
|
||||||
|
|
||||||
// too big accumulations can lead to Z near clipping issues
|
// too big accumulations can lead to Z near clipping issues
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package ru.dbotthepony.mc.otm.screen.panels;
|
package ru.dbotthepony.mc.otm.screen.panels;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.narration.NarratableEntry;
|
import net.minecraft.client.gui.narration.NarratableEntry;
|
||||||
@ -14,6 +15,8 @@ import javax.annotation.Nonnull;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import static org.lwjgl.opengl.GL11.GL_ALWAYS;
|
||||||
|
|
||||||
public class FramePanel extends EditablePanel implements NarratableEntry {
|
public class FramePanel extends EditablePanel implements NarratableEntry {
|
||||||
public enum FrameTabPosition {
|
public enum FrameTabPosition {
|
||||||
TOP(28, 28,28, 32),
|
TOP(28, 28,28, 32),
|
||||||
@ -239,7 +242,9 @@ public class FramePanel extends EditablePanel implements NarratableEntry {
|
|||||||
// RenderSystem.enableDepthTest();
|
// RenderSystem.enableDepthTest();
|
||||||
|
|
||||||
// title
|
// title
|
||||||
|
RenderSystem.depthFunc(GL_ALWAYS);
|
||||||
screen.getFont().draw(stack, title, 8, 5, 4210752);
|
screen.getFont().draw(stack, title, 8, 5, 4210752);
|
||||||
|
RenderSystem.depthFunc(GL_ALWAYS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package ru.dbotthepony.mc.otm.screen.panels;
|
package ru.dbotthepony.mc.otm.screen.panels;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import ru.dbotthepony.mc.otm.menu.MatteryMenu;
|
import ru.dbotthepony.mc.otm.menu.MatteryMenu;
|
||||||
import ru.dbotthepony.mc.otm.menu.widget.AbstractWidget;
|
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.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import static org.lwjgl.opengl.GL11.GL_ALWAYS;
|
||||||
|
|
||||||
public class MatteryWidgetPanel extends EditablePanel {
|
public class MatteryWidgetPanel extends EditablePanel {
|
||||||
public final AbstractWidget widget;
|
public final AbstractWidget widget;
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package ru.dbotthepony.mc.otm.screen.panels;
|
package ru.dbotthepony.mc.otm.screen.panels;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import net.minecraft.client.gui.components.AbstractWidget;
|
import net.minecraft.client.gui.components.AbstractWidget;
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
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.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import static org.lwjgl.opengl.GL11.GL_ALWAYS;
|
||||||
|
|
||||||
public class MinecraftWidgetPanel<T extends AbstractWidget> extends EditablePanel {
|
public class MinecraftWidgetPanel<T extends AbstractWidget> extends EditablePanel {
|
||||||
public interface WidgetFactory<T extends AbstractWidget> {
|
public interface WidgetFactory<T extends AbstractWidget> {
|
||||||
T create(MinecraftWidgetPanel<T> panel);
|
T create(MinecraftWidgetPanel<T> panel);
|
||||||
@ -89,7 +92,9 @@ public class MinecraftWidgetPanel<T extends AbstractWidget> extends EditablePane
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void innerRender(PoseStack stack, float mouse_x, float mouse_y, float flag) {
|
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);
|
getOrCreateWidget().render(stack, (int) mouse_x, (int) mouse_y, flag);
|
||||||
|
RenderSystem.depthFunc(GL_ALWAYS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user