FontRenderer.java 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package eu.tankernn.gameEngine.renderEngine.font;
  2. import java.util.List;
  3. import java.util.Map;
  4. import org.lwjgl.opengl.GL11;
  5. import eu.tankernn.gameEngine.loader.font.Font;
  6. import eu.tankernn.gameEngine.loader.font.GUIText;
  7. public class FontRenderer {
  8. private FontShader shader = new FontShader();
  9. public void render(Map<Font, List<GUIText>> texts) {
  10. prepare();
  11. for (Font font: texts.keySet()) {
  12. loadFont(font);
  13. for (GUIText text: texts.get(font)) {
  14. renderText(text);
  15. }
  16. }
  17. endRendering();
  18. }
  19. public void finalize() {
  20. shader.finalize();
  21. }
  22. private void prepare() {
  23. GL11.glEnable(GL11.GL_BLEND);
  24. GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
  25. GL11.glDisable(GL11.GL_DEPTH_TEST);
  26. shader.start();
  27. }
  28. private void loadFont(Font font) {
  29. font.family.getTextureAtlas().bindToUnit(0);
  30. shader.color.loadVec3(font.color);
  31. shader.width.loadFloat(font.width);
  32. shader.edge.loadFloat(font.edge);
  33. shader.borderWidth.loadFloat(font.outlineWidth);
  34. shader.borderEdge.loadFloat(font.outlineEdge);
  35. shader.outlineColor.loadVec3(font.outlineColor);
  36. }
  37. private void renderText(GUIText text) {
  38. text.getMesh().bind(0, 1);
  39. shader.translation.loadVec2(text.getPosition());
  40. GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, text.getVertexCount());
  41. text.getMesh().unbind(0, 1);
  42. }
  43. private void endRendering() {
  44. shader.stop();
  45. GL11.glDisable(GL11.GL_BLEND);
  46. GL11.glEnable(GL11.GL_DEPTH_TEST);
  47. }
  48. public void render(GUIText guiText) {
  49. prepare();
  50. loadFont(guiText.getFont());
  51. renderText(guiText);
  52. endRendering();
  53. }
  54. }