main
Brett 2024-11-12 20:47:18 -05:00
parent 04cf8158c4
commit ed6f36020e
3 changed files with 26 additions and 6 deletions

View File

@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.25) cmake_minimum_required(VERSION 3.25)
include(FetchContent) include(FetchContent)
set(BLT_GRAPHICS_VERSION 1.0.9) set(BLT_GRAPHICS_VERSION 1.0.10)
set(BLT_GRAPHICS_TEST_VERSION 0.0.1) set(BLT_GRAPHICS_TEST_VERSION 0.0.1)
project(BLT_WITH_GRAPHICS VERSION ${BLT_GRAPHICS_VERSION}) project(BLT_WITH_GRAPHICS VERSION ${BLT_GRAPHICS_VERSION})

View File

@ -69,15 +69,25 @@ namespace blt::gfx
class font_generator_t class font_generator_t
{ {
public: public:
struct size_bounds_t
{
float min_size, max_size;
blt::u64 min_char, max_char;
};
struct bounded_font_t struct bounded_font_t
{ {
std::unique_ptr<font_texture_atlas> atlas; std::unique_ptr<font_texture_atlas> atlas;
float min_size, max_size; // float min_size, max_size;
blt::u64 min_char, max_char; // blt::u64 min_char, max_char;
std::vector<size_bounds_t> size_limits;
bounded_font_t(std::unique_ptr<font_texture_atlas> atlas, float minSize, float maxSize, u64 minChar, u64 maxChar): explicit bounded_font_t(std::unique_ptr<font_texture_atlas> atlas): atlas(std::move(atlas))
atlas(std::move(atlas)), min_size(minSize), max_size(maxSize), min_char(minChar), max_char(maxChar)
{} {}
// bounded_font_t(std::unique_ptr<font_texture_atlas> atlas, float minSize, float maxSize, u64 minChar, u64 maxChar):
// atlas(std::move(atlas)), min_size(minSize), max_size(maxSize), min_char(minChar), max_char(maxChar)
// {}
}; };
public: public:
@ -89,6 +99,7 @@ namespace blt::gfx
{ {
for (auto& atlas : atlases) for (auto& atlas : atlases)
{ {
BLT_TRACE("(%f %ld), %f %f, %ld %ld", size, c, atlas.min_size, atlas.max_size, atlas.min_char, atlas.max_char);
if (!(size >= atlas.min_size && size <= atlas.max_size)) if (!(size >= atlas.min_size && size <= atlas.max_size))
continue; continue;
if (c >= atlas.min_char && c <= atlas.max_char) if (c >= atlas.min_char && c <= atlas.max_char)
@ -188,18 +199,21 @@ namespace blt::gfx
}; };
font_generator_t& generator; font_generator_t& generator;
std::string contents;
vertex_array_t vao{}; vertex_array_t vao{};
std::vector<text_render_info_t> renders; std::vector<text_render_info_t> renders;
blt::vec2f position; blt::vec2f position;
blt::vec2f scale = {1, 1}; blt::vec2f scale = {1, 1};
blt::vec4 color = blt::make_color(1, 1, 1); blt::vec4 color = blt::make_color(1, 1, 1);
float z_index = 0; float z_index = 0;
float current_size = 0;
}; };
public: public:
explicit font_renderer_t(); explicit font_renderer_t();
void create_default(blt::i32 dimensions = 0); void create_default(blt::i32 dimensions = 0);
void create(const std::vector<float>& generated_font_sizes, blt::i32 dimensions = 0); void create(const std::vector<float>& generated_font_sizes, blt::i32 dimensions = 0);
void cleanup(); void cleanup();

View File

@ -220,7 +220,7 @@ namespace blt::gfx
void font_renderer_t::create_default(blt::i32 dimensions) void font_renderer_t::create_default(blt::i32 dimensions)
{ {
create({9, 11, 12, 13, 14, 16, 18, 24, 32, 36, 40, 48, 52, 64, 72, 96, 106}, dimensions); create({9, 11, 12, 13, 14, 16, 18, 24, 32, 36, 40, 48, 52, 64, 72, 96, 106, 250}, dimensions);
add_default_font(reinterpret_cast<const blt::u8*>(font::default_font_compressed_data), font::default_font_compressed_size, true); add_default_font(reinterpret_cast<const blt::u8*>(font::default_font_compressed_data), font::default_font_compressed_size, true);
} }
@ -241,6 +241,10 @@ namespace blt::gfx
void font_renderer_t::compiled_text_t::change_text(std::string_view str, float size) void font_renderer_t::compiled_text_t::change_text(std::string_view str, float size)
{ {
if (str == contents)
return;
contents = str;
current_size = size;
static std::vector<float> vertices; static std::vector<float> vertices;
vertices.clear(); vertices.clear();
renders.clear(); renders.clear();
@ -325,4 +329,6 @@ namespace blt::gfx
glDrawArrays(GL_TRIANGLES, static_cast<int>(render.render_start), static_cast<int>(render.render_count)); glDrawArrays(GL_TRIANGLES, static_cast<int>(render.render_start), static_cast<int>(render.render_count));
} }
} }
} }