From 608e9e29f5d869dcf7c1231340de14a5e9defbb9 Mon Sep 17 00:00:00 2001 From: Redacted Date: Fri, 5 Jul 2024 05:20:42 -0400 Subject: [PATCH] Support for multiple fonts --- assets/fonts/Jupiteroid.ttf | Bin 0 -> 138516 bytes include/JGL/JGL.h | 14 +++---- main.cpp | 18 ++++---- src/JGL.cpp | 81 ++++++++++++++++++++++++++---------- 4 files changed, 76 insertions(+), 37 deletions(-) create mode 100644 assets/fonts/Jupiteroid.ttf diff --git a/assets/fonts/Jupiteroid.ttf b/assets/fonts/Jupiteroid.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2892699240520d6f63d7f8e068ad16e136e71a0d GIT binary patch literal 138516 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 literal 0 HcmV?d00001 diff --git a/include/JGL/JGL.h b/include/JGL/JGL.h index 693a0de..aea0437 100644 --- a/include/JGL/JGL.h +++ b/include/JGL/JGL.h @@ -3,16 +3,15 @@ // #pragma once -#include -#include -#include #include #include #include +#include +#include +#include #include #include #include - // OpenGL Wrapper for rendering 2D graphics primitives in both a 2D and 3D context namespace JGL { @@ -50,7 +49,8 @@ namespace JGL { }; bool InitTextEngine(); - + int LoadFont(const std::string& font_path); + void UnloadFont(int font_index); // TODO: implement correct coloring namespace J2D { @@ -68,7 +68,7 @@ namespace JGL { void FillTexturedPolygon2D(); void DrawSprite2D(); void DrawPartialSprite2D(); - void DrawString2D(const Color3& color, std::string text, float x, float y, float scale, u32 size = 16); + void DrawString2D(const Color3& color, std::string text, float x, float y, float scale, u32 size, unsigned int font_index); void FillRect2D(const Color3 &color, const Vector2 &pos, const Vector2 &size); void OutlineRect2D ( const Color3& color, const Vector2& pos, const Vector2& size, float thickness = 1); void FillRoundedRect2D (const Color3& color, const Vector2& pos, const Vector2& size, float radius); @@ -87,7 +87,7 @@ namespace JGL { void WireframeCapsule3D(const Color3& color, const Capsule& cap, float thickness = 1); void FillTriangleMesh3D(const Color3& color, const TriangleMesh& mesh); void WireframeTriangleMesh3D(const Color3& color, const TriangleMesh& mesh, float thickness = 1); - void DrawString3D(const Color3& color, const std::string& text, const Vector3& pos, float scale, u32 size = 12); + void DrawString3D(const Color3& color, const std::string& text, const Vector3& pos, float scale, u32 size, unsigned int font_index); void DrawMatrixGizmo (const Matrix3x3&, const Vector3&); void DrawMatrixGizmo (const Matrix4x4&); diff --git a/main.cpp b/main.cpp index eb5d9dc..12c335c 100644 --- a/main.cpp +++ b/main.cpp @@ -26,6 +26,9 @@ struct point { GLfloat t; }; +int FreeSans; +int Jupiteroid; + class JGLDemoWindow : public ReWindow::RWindow { public: @@ -53,12 +56,13 @@ public: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_TEXTURE_2D); - JGL::InitTextEngine(); + JGL::InitTextEngine(); + FreeSans = JGL::LoadFont("assets/fonts/FreeSans.ttf"); + Jupiteroid = JGL::LoadFont("assets/fonts/Jupiteroid.ttf"); } - void display() - { + void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); @@ -76,15 +80,13 @@ public: {105, 100} }; JGL::J2D::FillTriangle2D(JGL::Colors::Yellow, tri); - - - JGL::J3D::DrawString3D(JGL::Colors::Red, "JGL Sample Text", {1, -120, 0.5f}, 2.f); - JGL::J2D::DrawString2D(JGL::Colors::Green, "William J. Tomasine II ", 0.f, -120.f, 1.f); - JGL::J2D::DrawLine2D(JGL::Colors::Greens::DarkGreen, {10, 10}, {200, 300}); JGL::J3D::DrawLine3D(JGL::Colors::Red, {0,0,0}, {1,0,0}); JGL::J3D::DrawLine3D(JGL::Colors::Red, {0,0,0}, {1,0,0}); + JGL::J3D::DrawString3D(JGL::Colors::Red, "JGL Sample Text", {1, -32, 0.5f}, 1.f, 32, FreeSans); + JGL::J2D::DrawString2D(JGL::Colors::Green, "Jupiteroid Font", 0.f, -48.f, 1.f, 16, Jupiteroid); + //glFlush(); } diff --git a/src/JGL.cpp b/src/JGL.cpp index 9fcfcfd..fa52c4a 100644 --- a/src/JGL.cpp +++ b/src/JGL.cpp @@ -6,41 +6,59 @@ #include #include #include - #if __linux__ #include #include FT_FREETYPE_H #endif - #if _WIN32 #include #include FT_FREETYPE_H #endif GLuint program; - namespace JGL { - FT_Face face; FT_Library ft; + struct Font { + int index = 0; + FT_Face face; + }; + + std::vector faces; + using namespace J3ML; - bool InitTextEngine() { - constexpr u32 default_font_size = 16; if (FT_Init_FreeType(&ft)) - { - std::cout << "Error::FREETYPE: " << std::endl; - return false; - } + return true; + return false; + } - if (FT_New_Face(ft, "assets/fonts/FreeSans.ttf", 0, &face)) - { + int LoadFont(const std::string &font_path) { + if (ft == nullptr) + return -1; + Font font; + if (FT_New_Face(ft, font_path.c_str(), 0, &font.face)) { std::cout << "Error::FREETYPE: Failed to load font!" << std::endl; - return false; + return -1; } - return true; + unsigned int newIndex = 0; + for (const auto& f : faces) + if (f.index >= newIndex) + newIndex = f.index + 1; + font.index = newIndex; + faces.push_back(font); + + std::cout << "Loaded font from " << font_path << " with index " << newIndex << std::endl; + return newIndex; + } + + void UnloadFont(int font_index) { + for (int i = 0; i < faces.size(); i++) + if (faces[i].index == font_index) + FT_Done_Face(faces[i].face), + faces.erase(faces.begin() + i); } namespace J2D @@ -152,23 +170,32 @@ namespace JGL glEnd(); } - void DrawString2D(const Color3& color, std::string text, float x, float y, float scale, u32 size) { + void DrawString2D(const Color3& color, std::string text, float x, float y, float scale, u32 size, unsigned int font_index) { glUseProgram(0); // Fixed-function pipeline. + Font font{}; + for (const auto& f : faces) + if (f.index == font_index) + font = f; + if (font.face == NULL) { + std::cout << "null font" << std::endl; + return; + } + GLfloat currentColor[4]; glGetFloatv(GL_CURRENT_COLOR, currentColor); glColor3f(color.r/255.f, color.g/255.f, color.b/255.f); - FT_Set_Pixel_Sizes(face, 0, size); + FT_Set_Pixel_Sizes(font.face, 0, size); std::vector textures(text.length()); for (int i = 0; i < text.length(); i++) { - if (FT_Load_Char(face, text.c_str()[i], FT_LOAD_RENDER)) + if (FT_Load_Char(font.face, text.c_str()[i], FT_LOAD_RENDER)) continue; - FT_GlyphSlot g = face->glyph; + FT_GlyphSlot g = font.face->glyph; glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glActiveTexture(GL_TEXTURE0); @@ -236,7 +263,7 @@ namespace JGL glEnd(); } - void DrawString3D(const Color3& color, const std::string& text, const Vector3& pos, float scale, u32 size) + void DrawString3D(const Color3& color, const std::string& text, const Vector3& pos, float scale, u32 size, unsigned int font_index) { float x = pos.x; float y = pos.y; @@ -247,15 +274,25 @@ namespace JGL glUseProgram(0); // Fixed-function pipeline. glColor4f(color.r, color.g, color.b, 1.0f); - FT_Set_Pixel_Sizes(face, 0, size); + Font font; + for (auto& f : faces) + if (f.index == font_index) + font = f; + if (font.face == NULL) { + std::cout << "null font" << std::endl; + return; + } + + + FT_Set_Pixel_Sizes(font.face, 0, size); //for (c = text.c_str(); *c; c++) for (int i = 0; i < text.length(); i++) { - if (FT_Load_Char(face, text.c_str()[i], FT_LOAD_RENDER)) + if (FT_Load_Char(font.face, text.c_str()[i], FT_LOAD_RENDER)) continue; - FT_GlyphSlot g = face->glyph; + FT_GlyphSlot g = font.face->glyph; glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glActiveTexture(GL_TEXTURE0);