1. Φόρτωση αρχείου γραμματοσειράς (.ttf)
2. Rasterization χαρακτήρων μέσω stb_truetype
3. Δημιουργία texture atlas που περιέχει glyph bitmaps
4. Υπολογισμό UV συντεταγμένων για κάθε χαρακτήρα
5. Απόδοση μέσω textured quads
Η χρήση atlas μειώνει σημαντικά τον αριθμό texture bindings κατά το rendering.
Η υλοποίηση του component είναι:
struct UI_Text_Component
{
public:
float font_size;
UI_Text_Component()
: text("test"),
font_path("assets/fonts/Tiny5/Tiny5−Regular.ttf"),
font_size(16.0f) {}
void build();
void set_text(const std::string &new_text);
bool needs_rebuild();
Text &get_text_object();
private:
std::string text;
std::string font_path;
glm::vec3 color = glm::vec3(1.0f);
int font_color_mode = 0;
bool m_needs_rebuild = true;
Text
*
text_object = nullptr;
};
Κάθε φορά που αλλάζει το περιεχόμενο του κειμένου μέσω της μεθόδου:
void set_text(const std::string &new_text)
ενεργοποιείται η σημαία:
m_needs_rebuild = true;
Η προσέγγιση αυτή αποφεύγει περιττό υπολογισμό σε κάθε frame και βελτιώνει την απόδοση.
41