diff --git a/common/src/main/java/org/thinkingstudio/obsidianui/screen/SpruceHandledScreen.java b/common/src/main/java/org/thinkingstudio/obsidianui/screen/SpruceHandledScreen.java index e2237c4e..6fb33bc1 100644 --- a/common/src/main/java/org/thinkingstudio/obsidianui/screen/SpruceHandledScreen.java +++ b/common/src/main/java/org/thinkingstudio/obsidianui/screen/SpruceHandledScreen.java @@ -22,7 +22,6 @@ import org.thinkingstudio.obsidianui.SprucePositioned; import org.thinkingstudio.obsidianui.Tooltip; import org.thinkingstudio.obsidianui.navigation.NavigationDirection; -import org.thinkingstudio.obsidianui.util.ScissorManager; import org.thinkingstudio.obsidianui.widget.SpruceElement; import org.thinkingstudio.obsidianui.widget.SpruceWidget; import java.util.function.BooleanSupplier; @@ -115,12 +114,10 @@ private boolean tryNavigating(Element element, NavigationDirection direction, bo @Override public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) { - ScissorManager.pushScaleFactor(this.scaleFactor); super.render(drawContext, mouseX, mouseY, delta); this.renderWidgets(drawContext, mouseX, mouseY, delta); this.renderTitle(drawContext, mouseX, mouseY, delta); Tooltip.renderAll(drawContext); - ScissorManager.popScaleFactor(); } public void renderTitle(DrawContext drawContext, int mouseX, int mouseY, float delta) { diff --git a/common/src/main/java/org/thinkingstudio/obsidianui/screen/SpruceScreen.java b/common/src/main/java/org/thinkingstudio/obsidianui/screen/SpruceScreen.java index 6c380d43..df8dcb9a 100644 --- a/common/src/main/java/org/thinkingstudio/obsidianui/screen/SpruceScreen.java +++ b/common/src/main/java/org/thinkingstudio/obsidianui/screen/SpruceScreen.java @@ -19,7 +19,6 @@ import org.thinkingstudio.obsidianui.SprucePositioned; import org.thinkingstudio.obsidianui.Tooltip; import org.thinkingstudio.obsidianui.navigation.NavigationDirection; -import org.thinkingstudio.obsidianui.util.ScissorManager; import org.thinkingstudio.obsidianui.widget.SpruceElement; import org.thinkingstudio.obsidianui.widget.SpruceWidget; import java.util.function.BooleanSupplier; @@ -110,12 +109,10 @@ private boolean tryNavigating(Element element, NavigationDirection direction, bo @Override public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) { - ScissorManager.pushScaleFactor(this.scaleFactor); this.renderBackground(drawContext, mouseX, mouseY, delta); this.renderWidgets(drawContext, mouseX, mouseY, delta); this.renderTitle(drawContext, mouseX, mouseY, delta); Tooltip.renderAll(drawContext); - ScissorManager.popScaleFactor(); } public void renderTitle(DrawContext drawContext, int mouseX, int mouseY, float delta) { diff --git a/common/src/main/java/org/thinkingstudio/obsidianui/util/ScissorManager.java b/common/src/main/java/org/thinkingstudio/obsidianui/util/ScissorManager.java deleted file mode 100644 index 6030a642..00000000 --- a/common/src/main/java/org/thinkingstudio/obsidianui/util/ScissorManager.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright © 2020~2024 LambdAurora - * Copyright © 2024 ThinkingStudio - * - * This file is part of ObsidianUI. - * - * Licensed under the MIT license. For more information, - * see the LICENSE file. - */ - -package org.thinkingstudio.obsidianui.util; - -import com.mojang.blaze3d.systems.RenderSystem; -import it.unimi.dsi.fastutil.doubles.DoubleArrayList; -import it.unimi.dsi.fastutil.doubles.DoubleList; -import net.minecraft.client.MinecraftClient; -import java.util.ArrayDeque; -import java.util.Deque; - -/** - * Represents a manager for {@link RenderSystem#enableScissor(int, int, int, int)}. - * - * @author LambdAurora - * @version 3.2.1 - * @since 2.0.0 - */ -public final class ScissorManager { - private static final Deque SCISSOR_STACK = new ArrayDeque<>(); - private static final DoubleList SCALE_FACTOR_STACK = new DoubleArrayList(); - - private ScissorManager() { - throw new UnsupportedOperationException("ScissorManager only contains static definitions."); - } - - public static void pushScaleFactor(double scaleFactor) { - SCALE_FACTOR_STACK.add(scaleFactor); - } - - public static void pushScaleFactorMultiplier(double scaleFactor) { - pushScaleFactor(scaleFactor * getCurrentScaleFactor()); - } - - public static void popScaleFactor() { - if (SCALE_FACTOR_STACK.size() == 0) - return; - SCALE_FACTOR_STACK.removeDouble(SCALE_FACTOR_STACK.size() - 1); - } - - public static double getCurrentScaleFactor() { - if (SCALE_FACTOR_STACK.size() == 0) - return 1.f; - return SCALE_FACTOR_STACK.getDouble(SCALE_FACTOR_STACK.size() - 1); - } - - public static void push(int x, int y, int width, int height, double scaleFactor) { - pushScaleFactor(scaleFactor); - push(x, y, width, height); - } - - /** - * Pushes a new scissor state. - * - * @param x the X coordinate of the drawable area - * @param y the Y coordinate of the drawable area - * @param width the width of the drawable area - * @param height the height of the drawable area - */ - public static void push(int x, int y, int width, int height) { - double scaleFactor = getCurrentScaleFactor(); - var handle = new ScissorHandle((int) (scaleFactor * x), adaptY(y, height, scaleFactor), - (int) (scaleFactor * width), (int) (scaleFactor * height)); - handle.apply(); - SCISSOR_STACK.push(handle); - } - - /** - * Pops the last pushed scissor state. - */ - public static void pop() { - SCISSOR_STACK.pop(); - if (SCISSOR_STACK.isEmpty()) { - RenderSystem.disableScissor(); - } else { - SCISSOR_STACK.getFirst().apply(); - } - } - - private static int adaptY(int y, int height, double scaleFactor) { - var window = MinecraftClient.getInstance().getWindow(); - int tmpHeight = (int) (window.getFramebufferHeight() / scaleFactor); - int scaledHeight = window.getFramebufferHeight() / scaleFactor > (double) tmpHeight ? tmpHeight + 1 : tmpHeight; - return (int) (scaleFactor * (scaledHeight - height - y)); - } - - record ScissorHandle(int x, int y, int width, int height) { - void apply() { - RenderSystem.enableScissor(this.x(), this.y(), this.width(), this.height()); - } - } -} diff --git a/common/src/main/java/org/thinkingstudio/obsidianui/widget/AbstractSpruceButtonWidget.java b/common/src/main/java/org/thinkingstudio/obsidianui/widget/AbstractSpruceButtonWidget.java index d07b5449..53a51c2d 100644 --- a/common/src/main/java/org/thinkingstudio/obsidianui/widget/AbstractSpruceButtonWidget.java +++ b/common/src/main/java/org/thinkingstudio/obsidianui/widget/AbstractSpruceButtonWidget.java @@ -10,7 +10,6 @@ package org.thinkingstudio.obsidianui.widget; -import com.mojang.blaze3d.opengl.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.ButtonTextures; @@ -164,8 +163,6 @@ protected void renderButton(DrawContext drawContext, int mouseX, int mouseY, flo @Override protected void renderBackground(DrawContext drawContext, int mouseX, int mouseY, float delta) { RenderSystem.setShaderColor(1.f, 1.f, 1.f, this.getAlpha()); - GlStateManager._enableBlend(); - GlStateManager._enableDepthTest(); drawContext.drawGuiTexture(RenderLayer::getGuiTextured, this.getTexture(), this.getX(), this.getY(), this.getWidth(), this.getHeight()); } diff --git a/common/src/main/java/org/thinkingstudio/obsidianui/widget/SpruceCheckboxWidget.java b/common/src/main/java/org/thinkingstudio/obsidianui/widget/SpruceCheckboxWidget.java index 606157f1..edac5b11 100644 --- a/common/src/main/java/org/thinkingstudio/obsidianui/widget/SpruceCheckboxWidget.java +++ b/common/src/main/java/org/thinkingstudio/obsidianui/widget/SpruceCheckboxWidget.java @@ -10,7 +10,6 @@ package org.thinkingstudio.obsidianui.widget; -import com.mojang.blaze3d.opengl.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; @@ -91,8 +90,6 @@ public void setColored(boolean colored) { @Override protected void renderButton(DrawContext drawContext, int mouseX, int mouseY, float delta) { - GlStateManager._enableDepthTest(); - GlStateManager._enableBlend(); float[] oldColor = RenderSystem.getShaderColor(); float oldRed = oldColor[0], oldGreen = oldColor[1], oldBlue = oldColor[2], oldAlpha = oldColor[3]; @@ -119,9 +116,7 @@ protected void renderButton(DrawContext drawContext, int mouseX, int mouseY, flo @Override protected void renderBackground(DrawContext drawContext, int mouseX, int mouseY, float delta) { - GlStateManager._enableDepthTest(); int color = ColorHelper.fromFloats(this.alpha, 1.f, 1.f, 1.f); - GlStateManager._enableBlend(); drawContext.drawTexture(RenderLayer::getGuiTextured, TEXTURE, this.getX(), this.getY(), this.isFocusedOrHovered() ? 20.f : 0.f, 0.f, this.getHeight(), this.getHeight(), 64, 64, color); } diff --git a/common/src/main/java/org/thinkingstudio/obsidianui/widget/SpruceTexturedButtonWidget.java b/common/src/main/java/org/thinkingstudio/obsidianui/widget/SpruceTexturedButtonWidget.java index 37e46265..b7deb3d0 100644 --- a/common/src/main/java/org/thinkingstudio/obsidianui/widget/SpruceTexturedButtonWidget.java +++ b/common/src/main/java/org/thinkingstudio/obsidianui/widget/SpruceTexturedButtonWidget.java @@ -10,7 +10,6 @@ package org.thinkingstudio.obsidianui.widget; -import com.mojang.blaze3d.opengl.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.RenderLayer; @@ -77,7 +76,6 @@ protected void renderBackground(DrawContext drawContext, int mouseX, int mouseY, } RenderSystem.setShaderColor(1.f, 1.f, 1.f, this.getAlpha()); - GlStateManager._enableDepthTest(); drawContext.drawTexture(RenderLayer::getGuiTextured, this.texture, this.getX(), this.getY(), this.u, v, diff --git a/common/src/main/java/org/thinkingstudio/obsidianui/widget/SpruceToggleSwitch.java b/common/src/main/java/org/thinkingstudio/obsidianui/widget/SpruceToggleSwitch.java index d8099907..8efea734 100644 --- a/common/src/main/java/org/thinkingstudio/obsidianui/widget/SpruceToggleSwitch.java +++ b/common/src/main/java/org/thinkingstudio/obsidianui/widget/SpruceToggleSwitch.java @@ -10,7 +10,6 @@ package org.thinkingstudio.obsidianui.widget; -import com.mojang.blaze3d.opengl.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.RenderLayer; @@ -55,8 +54,6 @@ public SpruceToggleSwitch(Position position, int width, int height, Text message @Override protected void renderButton(DrawContext drawContext, int mouseX, int mouseY, float delta) { - GlStateManager._enableDepthTest(); - GlStateManager._enableBlend(); drawContext.drawTexture(RenderLayer::getGuiTextured, TEXTURE, this.getX() + (this.getValue() ? 14 : 0), this.getY() + (this.getHeight() / 2 - 9), this.getValue() ? 50.f : 32.f, this.isFocusedOrHovered() ? 18.f : 0.f, 18, 18, 68, 36); @@ -72,9 +69,7 @@ protected void renderButton(DrawContext drawContext, int mouseX, int mouseY, flo @Override protected void renderBackground(DrawContext drawContext, int mouseX, int mouseY, float delta) { - GlStateManager._enableDepthTest(); RenderSystem.setShaderColor(1.f, 1.f, 1.f, this.alpha); - GlStateManager._enableBlend(); drawContext.drawTexture(RenderLayer::getGuiTextured, TEXTURE, this.getX(), this.getY() + (this.getHeight() / 2 - 9), 0.f, this.isFocusedOrHovered() ? 18.f : 0.f, 32, 18, 68, 36); } diff --git a/common/src/main/java/org/thinkingstudio/obsidianui/widget/container/SpruceEntryListWidget.java b/common/src/main/java/org/thinkingstudio/obsidianui/widget/container/SpruceEntryListWidget.java index 633eb9a3..527c24f2 100644 --- a/common/src/main/java/org/thinkingstudio/obsidianui/widget/container/SpruceEntryListWidget.java +++ b/common/src/main/java/org/thinkingstudio/obsidianui/widget/container/SpruceEntryListWidget.java @@ -11,8 +11,6 @@ package org.thinkingstudio.obsidianui.widget.container; import com.google.common.collect.Lists; -import com.mojang.blaze3d.opengl.GlStateManager; -import com.mojang.blaze3d.systems.RenderSystem; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.gui.DrawContext; @@ -31,7 +29,6 @@ import org.thinkingstudio.obsidianui.border.EmptyBorder; import org.thinkingstudio.obsidianui.mixin.DrawContextAccessor; import org.thinkingstudio.obsidianui.navigation.NavigationDirection; -import org.thinkingstudio.obsidianui.util.ScissorManager; import org.thinkingstudio.obsidianui.widget.AbstractSpruceWidget; import org.thinkingstudio.obsidianui.widget.WithBackground; import org.thinkingstudio.obsidianui.widget.WithBorder; @@ -345,12 +342,11 @@ protected void renderWidget(DrawContext drawContext, int mouseX, int mouseY, flo int top = this.getY(); int bottom = top + this.getHeight(); - ScissorManager.push(this.getX(), this.getY(), this.getWidth(), this.getHeight()); + drawContext.enableScissor(left, top, right, bottom); this.entries.forEach(e -> e.render(drawContext, mouseX, mouseY, delta)); - ScissorManager.pop(); + drawContext.disableScissor(); - GlStateManager._enableBlend(); // Render the transition thingy. if (this.shouldRenderTransition()) { Identifier topTexture = getSeparatorTexture(true); @@ -378,8 +374,6 @@ protected void renderWidget(DrawContext drawContext, int mouseX, int mouseY, flo } this.getBorder().render(drawContext, this, mouseX, mouseY, delta); - - GlStateManager._disableBlend(); } protected void renderScrollbar(DrawContext drawContext, int scrollbarX, int scrollbarEndX, int scrollbarY, int scrollbarHeight) { diff --git a/common/src/main/java/org/thinkingstudio/obsidianui/widget/text/SpruceTextAreaWidget.java b/common/src/main/java/org/thinkingstudio/obsidianui/widget/text/SpruceTextAreaWidget.java index ac2159a7..98289661 100644 --- a/common/src/main/java/org/thinkingstudio/obsidianui/widget/text/SpruceTextAreaWidget.java +++ b/common/src/main/java/org/thinkingstudio/obsidianui/widget/text/SpruceTextAreaWidget.java @@ -10,8 +10,6 @@ package org.thinkingstudio.obsidianui.widget.text; -import com.mojang.blaze3d.opengl.GlStateManager; -import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; @@ -511,8 +509,6 @@ protected void drawSelection(DrawContext drawContext, String line, int lineY, in int x2 = x + this.textRenderer.getWidth(selected); int y2 = lineY + this.textRenderer.fontHeight; - GlStateManager._enableColorLogicOp(); - GlStateManager._logicOp(5387); RenderLayer renderLayer = RenderLayer.getGui(); VertexConsumer vertexConsumer = ((DrawContextAccessor)drawContext).getVertexConsumers().getBuffer(renderLayer); int color = ColorHelper.fromFloats(1.f, 0.f, 0.f, 1.f); @@ -521,7 +517,6 @@ protected void drawSelection(DrawContext drawContext, String line, int lineY, in vertexConsumer.vertex(x2, lineY, 0).color(color); vertexConsumer.vertex(x, lineY, 0).color(color); drawContext.draw(); - GlStateManager._disableColorLogicOp(); } /** diff --git a/common/src/main/java/org/thinkingstudio/obsidianui/widget/text/SpruceTextFieldWidget.java b/common/src/main/java/org/thinkingstudio/obsidianui/widget/text/SpruceTextFieldWidget.java index 5b5e0b57..7ab327e6 100644 --- a/common/src/main/java/org/thinkingstudio/obsidianui/widget/text/SpruceTextFieldWidget.java +++ b/common/src/main/java/org/thinkingstudio/obsidianui/widget/text/SpruceTextFieldWidget.java @@ -10,7 +10,6 @@ package org.thinkingstudio.obsidianui.widget.text; -import com.mojang.blaze3d.opengl.GlStateManager; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; @@ -467,8 +466,6 @@ protected void drawSelection(DrawContext drawContext, String line, int lineY) { int x2 = x + this.client.textRenderer.getWidth(selected); int y2 = lineY + this.client.textRenderer.fontHeight; - GlStateManager._enableColorLogicOp(); - GlStateManager._logicOp(5387); RenderLayer renderLayer = RenderLayer.getGui(); VertexConsumer vertexConsumer = ((DrawContextAccessor)drawContext).getVertexConsumers().getBuffer(renderLayer); int color = ColorHelper.fromFloats(255.f, 0.f, 0.f, 255.f); @@ -477,7 +474,6 @@ protected void drawSelection(DrawContext drawContext, String line, int lineY) { vertexConsumer.vertex(x2, lineY, 0).color(color); vertexConsumer.vertex(x, lineY, 0).color(color); drawContext.draw(); - GlStateManager._disableColorLogicOp(); } /**