LiteCraft/src/main/java/io/github/hydos/ginger/engine/render/renderers/FontRenderer.java

62 lines
1.4 KiB
Java

package io.github.hydos.ginger.engine.render.renderers;
import java.util.*;
import org.lwjgl.opengl.*;
import io.github.hydos.ginger.engine.font.*;
import io.github.hydos.ginger.engine.render.shaders.FontShader;
public class FontRenderer
{
private FontShader shader;
public FontRenderer()
{ shader = new FontShader(); }
public void render(Map<FontType, List<GUIText>> texts)
{
prepare();
for (FontType font : texts.keySet())
{
GL13.glActiveTexture(GL13.GL_TEXTURE0);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, font.getTextureAtlas());
for (GUIText text : texts.get(font))
{ renderText(text); }
}
endRendering();
}
public void cleanUp()
{ shader.cleanUp(); }
private void prepare()
{
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glDisable(GL11.GL_DEPTH_TEST);
shader.start();
}
private void renderText(GUIText text)
{
GL30.glBindVertexArray(text.getMesh());
GL20.glEnableVertexAttribArray(0);
GL20.glEnableVertexAttribArray(1);
shader.loadColour(text.getColour());
shader.loadTranslation(text.getPosition());
shader.loadText(text);
GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, text.getVertexCount());
GL30.glBindVertexArray(0);
GL20.glDisableVertexAttribArray(0);
GL20.glDisableVertexAttribArray(1);
}
private void endRendering()
{
shader.stop();
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glDisable(GL11.GL_BLEND);
}
}