background image

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