From f7bed7a045d1609f628b42073b73b58efba328cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Thu, 11 Mar 2021 09:28:22 +0100 Subject: [PATCH] Enable displaying text --- .../base/api/game/gui/GUI.java | 6 +-- .../core/gl/render/DefaultRenderer.java | 2 +- .../base/engine/gui/render/NanoVGGUI.java | 40 +++++++++++-------- .../base/engine/ui/GLFWScreen.java | 4 -- 4 files changed, 28 insertions(+), 24 deletions(-) diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/game/gui/GUI.java b/api/src/main/java/com/bartlomiejpluta/base/api/game/gui/GUI.java index 0e2494d6..afd4dc02 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/api/game/gui/GUI.java +++ b/api/src/main/java/com/bartlomiejpluta/base/api/game/gui/GUI.java @@ -12,13 +12,13 @@ public interface GUI extends Renderable, Disposable { void drawRectangle(float x, float y, float w, float h); - void fillColor(Color color); + void fillColor(float red, float green, float blue, float alpha); + + void strokeColor(float red, float green, float blue, float alpha); void setFontFace(String fontUid); void setFontSize(float size); void putText(float x, float y, CharSequence text); - - Color createColor(float red, float green, float blue, float alpha); } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/render/DefaultRenderer.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/render/DefaultRenderer.java index a99fa181..b316b5f8 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/render/DefaultRenderer.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/render/DefaultRenderer.java @@ -53,7 +53,7 @@ public class DefaultRenderer implements Renderer { } private void clear() { - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } private void updateViewport(Screen screen) { diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/render/NanoVGGUI.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/render/NanoVGGUI.java index 7cb5bb8c..da46b449 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/render/NanoVGGUI.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/gui/render/NanoVGGUI.java @@ -1,20 +1,17 @@ package com.bartlomiejpluta.base.engine.gui.render; import com.bartlomiejpluta.base.api.game.camera.Camera; -import com.bartlomiejpluta.base.api.game.gui.Color; import com.bartlomiejpluta.base.api.game.gui.GUI; import com.bartlomiejpluta.base.api.game.gui.Widget; import com.bartlomiejpluta.base.api.game.screen.Screen; import com.bartlomiejpluta.base.api.internal.render.ShaderManager; import com.bartlomiejpluta.base.engine.error.AppException; import com.bartlomiejpluta.base.engine.gui.manager.FontManager; -import com.bartlomiejpluta.base.engine.gui.model.NanoVGColorAdapter; import lombok.Getter; import lombok.Setter; +import org.lwjgl.nanovg.NVGColor; import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; import java.util.Set; import static org.lwjgl.nanovg.NanoVG.*; @@ -28,7 +25,7 @@ public class NanoVGGUI implements GUI { @Setter private Widget root; - private final List createdColors = new LinkedList<>(); + private NVGColor color; private final Set loadedFonts = new HashSet<>(); private final FontManager fontManager; @@ -40,6 +37,8 @@ public class NanoVGGUI implements GUI { public void init(Screen screen) { context = nvgCreate(NVG_ANTIALIAS | NVG_STENCIL_STROKES); + color = NVGColor.create(); + if (context == NULL) { throw new AppException("Could not onCreate NanoVG"); } @@ -66,22 +65,31 @@ public class NanoVGGUI implements GUI { nvgRect(context, x, y, w, h); } - @Override - public void fillColor(Color color) { - nvgFillColor(context, (NanoVGColorAdapter) color); - nvgFill(context); - } - @Override public void putText(float x, float y, CharSequence text) { nvgText(context, x, y, text); } @Override - public Color createColor(float red, float green, float blue, float alpha) { - var color = new NanoVGColorAdapter(red, green, blue, alpha); - createdColors.add(color); - return color; + public void fillColor(float red, float green, float blue, float alpha) { + color.r(red); + color.g(green); + color.b(blue); + color.a(alpha); + + nvgFillColor(context, color); + nvgFill(context); + } + + @Override + public void strokeColor(float red, float green, float blue, float alpha) { + color.r(red); + color.g(green); + color.b(blue); + color.a(alpha); + + nvgStrokeColor(context, color); + nvgFill(context); } @Override @@ -102,7 +110,7 @@ public class NanoVGGUI implements GUI { @Override public void dispose() { - createdColors.forEach(NanoVGColorAdapter::dispose); + color.free(); nvgDelete(context); } } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/ui/GLFWScreen.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/ui/GLFWScreen.java index 3da0ff5e..c3b604de 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/ui/GLFWScreen.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/ui/GLFWScreen.java @@ -112,9 +112,6 @@ public class GLFWScreen implements Screen { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - // Required by GUI - glEnable(GL_STENCIL_TEST); - // Set the clear color clear(0.0f, 0.0f, 0.0f, 0.0f); } @@ -137,7 +134,6 @@ public class GLFWScreen implements Screen { @Override public void restoreState() { - glEnable(GL_STENCIL_TEST); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); }