Enable displaying text

This commit is contained in:
2021-03-11 09:28:22 +01:00
parent efa43f0eb0
commit f7bed7a045
4 changed files with 28 additions and 24 deletions

View File

@@ -12,13 +12,13 @@ public interface GUI extends Renderable, Disposable {
void drawRectangle(float x, float y, float w, float h); 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 setFontFace(String fontUid);
void setFontSize(float size); void setFontSize(float size);
void putText(float x, float y, CharSequence text); void putText(float x, float y, CharSequence text);
Color createColor(float red, float green, float blue, float alpha);
} }

View File

@@ -53,7 +53,7 @@ public class DefaultRenderer implements Renderer {
} }
private void clear() { 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) { private void updateViewport(Screen screen) {

View File

@@ -1,20 +1,17 @@
package com.bartlomiejpluta.base.engine.gui.render; package com.bartlomiejpluta.base.engine.gui.render;
import com.bartlomiejpluta.base.api.game.camera.Camera; 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.GUI;
import com.bartlomiejpluta.base.api.game.gui.Widget; import com.bartlomiejpluta.base.api.game.gui.Widget;
import com.bartlomiejpluta.base.api.game.screen.Screen; import com.bartlomiejpluta.base.api.game.screen.Screen;
import com.bartlomiejpluta.base.api.internal.render.ShaderManager; import com.bartlomiejpluta.base.api.internal.render.ShaderManager;
import com.bartlomiejpluta.base.engine.error.AppException; import com.bartlomiejpluta.base.engine.error.AppException;
import com.bartlomiejpluta.base.engine.gui.manager.FontManager; import com.bartlomiejpluta.base.engine.gui.manager.FontManager;
import com.bartlomiejpluta.base.engine.gui.model.NanoVGColorAdapter;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.lwjgl.nanovg.NVGColor;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set; import java.util.Set;
import static org.lwjgl.nanovg.NanoVG.*; import static org.lwjgl.nanovg.NanoVG.*;
@@ -28,7 +25,7 @@ public class NanoVGGUI implements GUI {
@Setter @Setter
private Widget root; private Widget root;
private final List<NanoVGColorAdapter> createdColors = new LinkedList<>(); private NVGColor color;
private final Set<String> loadedFonts = new HashSet<>(); private final Set<String> loadedFonts = new HashSet<>();
private final FontManager fontManager; private final FontManager fontManager;
@@ -40,6 +37,8 @@ public class NanoVGGUI implements GUI {
public void init(Screen screen) { public void init(Screen screen) {
context = nvgCreate(NVG_ANTIALIAS | NVG_STENCIL_STROKES); context = nvgCreate(NVG_ANTIALIAS | NVG_STENCIL_STROKES);
color = NVGColor.create();
if (context == NULL) { if (context == NULL) {
throw new AppException("Could not onCreate NanoVG"); throw new AppException("Could not onCreate NanoVG");
} }
@@ -66,22 +65,31 @@ public class NanoVGGUI implements GUI {
nvgRect(context, x, y, w, h); nvgRect(context, x, y, w, h);
} }
@Override
public void fillColor(Color color) {
nvgFillColor(context, (NanoVGColorAdapter) color);
nvgFill(context);
}
@Override @Override
public void putText(float x, float y, CharSequence text) { public void putText(float x, float y, CharSequence text) {
nvgText(context, x, y, text); nvgText(context, x, y, text);
} }
@Override @Override
public Color createColor(float red, float green, float blue, float alpha) { public void fillColor(float red, float green, float blue, float alpha) {
var color = new NanoVGColorAdapter(red, green, blue, alpha); color.r(red);
createdColors.add(color); color.g(green);
return color; 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 @Override
@@ -102,7 +110,7 @@ public class NanoVGGUI implements GUI {
@Override @Override
public void dispose() { public void dispose() {
createdColors.forEach(NanoVGColorAdapter::dispose); color.free();
nvgDelete(context); nvgDelete(context);
} }
} }

View File

@@ -112,9 +112,6 @@ public class GLFWScreen implements Screen {
glEnable(GL_BLEND); glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
// Required by GUI
glEnable(GL_STENCIL_TEST);
// Set the clear color // Set the clear color
clear(0.0f, 0.0f, 0.0f, 0.0f); clear(0.0f, 0.0f, 0.0f, 0.0f);
} }
@@ -137,7 +134,6 @@ public class GLFWScreen implements Screen {
@Override @Override
public void restoreState() { public void restoreState() {
glEnable(GL_STENCIL_TEST);
glEnable(GL_BLEND); glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
} }