diff --git a/runtime/Includes/Core/Application.inl b/runtime/Includes/Core/Application.inl index 5e96302..d4ae847 100644 --- a/runtime/Includes/Core/Application.inl +++ b/runtime/Includes/Core/Application.inl @@ -148,20 +148,22 @@ namespace mlx void Application::LoadFont(const std::filesystem::path& filepath, float scale) { MLX_PROFILE_FUNCTION(); - std::shared_ptr font; - if(filepath.string() == "default") - font = std::make_shared("default", dogica_ttf, scale); - else - font = std::make_shared(filepath, scale); + std::shared_ptr font = m_font_registry.GetFont(filepath, scale); + if(!font) + { + if(filepath.string() == "default") + font = std::make_shared("default", dogica_ttf, scale); + else + font = std::make_shared(filepath, scale); + font->BuildFont(); + m_font_registry.RegisterFont(font); + } + for(auto& gs : m_graphics) { if(gs) gs->GetScene().BindFont(font); } - if(m_font_registry.IsFontKnown(font)) - return; - font->BuildFont(); - m_font_registry.RegisterFont(font); } void Application::TexturePut(Handle win, Handle img, int x, int y) diff --git a/runtime/Includes/Core/Graphics.inl b/runtime/Includes/Core/Graphics.inl index 2b44238..8806200 100644 --- a/runtime/Includes/Core/Graphics.inl +++ b/runtime/Includes/Core/Graphics.inl @@ -27,6 +27,9 @@ namespace mlx void GraphicsSupport::StringPut(int x, int y, std::uint32_t color, std::string str) { MLX_PROFILE_FUNCTION(); + if(str.empty()) + return; + Vec4f vec_color = { static_cast((color & 0x000000FF)) / 255.f, static_cast((color & 0x0000FF00) >> 8) / 255.f, diff --git a/runtime/Includes/Graphics/Font.h b/runtime/Includes/Graphics/Font.h index 0f5888d..dec3805 100644 --- a/runtime/Includes/Graphics/Font.h +++ b/runtime/Includes/Graphics/Font.h @@ -38,7 +38,7 @@ namespace mlx inline void RegisterFont(std::shared_ptr font); inline void UnregisterFont(std::shared_ptr font); - inline bool IsFontKnown(std::shared_ptr font); + inline std::shared_ptr GetFont(const std::filesystem::path& name, float scale); ~FontRegistry() = default; diff --git a/runtime/Includes/Graphics/Font.inl b/runtime/Includes/Graphics/Font.inl index 6a3482c..7e49e0a 100644 --- a/runtime/Includes/Graphics/Font.inl +++ b/runtime/Includes/Graphics/Font.inl @@ -13,11 +13,12 @@ namespace mlx m_fonts_registry.erase(font); } - bool FontRegistry::IsFontKnown(std::shared_ptr font) + std::shared_ptr FontRegistry::GetFont(const std::filesystem::path& name, float scale) { - return std::find_if(m_fonts_registry.begin(), m_fonts_registry.end(), [&font](std::shared_ptr rhs) + auto it = std::find_if(m_fonts_registry.begin(), m_fonts_registry.end(), [&name, scale](std::shared_ptr rhs) { - return font->GetName() == rhs->GetName() && font->GetScale() == rhs->GetScale(); - }) != m_fonts_registry.end(); + return name == rhs->GetName() && scale == rhs->GetScale(); + }); + return (it != m_fonts_registry.end() ? *it : nullptr); } } diff --git a/runtime/Sources/Graphics/Font.cpp b/runtime/Sources/Graphics/Font.cpp index d74afa9..67289d9 100644 --- a/runtime/Sources/Graphics/Font.cpp +++ b/runtime/Sources/Graphics/Font.cpp @@ -50,7 +50,7 @@ namespace mlx } #ifdef DEBUG - m_atlas.Init(vulkan_bitmap, RANGE, RANGE, VK_FORMAT_R8G8B8A8_SRGB, false, m_name + "_font_altas"); + m_atlas.Init(vulkan_bitmap, RANGE, RANGE, VK_FORMAT_R8G8B8A8_SRGB, false, m_name + "_font_atlas"); #else m_atlas.Init(vulkan_bitmap, RANGE, RANGE, VK_FORMAT_R8G8B8A8_SRGB, false, {}); #endif @@ -61,5 +61,6 @@ namespace mlx void Font::Destroy() { m_atlas.Destroy(); + DebugLog("Font: unloaded %", m_name); } } diff --git a/runtime/Sources/Graphics/Text.cpp b/runtime/Sources/Graphics/Text.cpp index 475541c..89e0d09 100644 --- a/runtime/Sources/Graphics/Text.cpp +++ b/runtime/Sources/Graphics/Text.cpp @@ -29,10 +29,10 @@ namespace mlx std::size_t index = vertex_data.size(); - vertex_data.emplace_back(Vec4f{ q.x0, q.y0, 0.0f, 0.0f }, Vec2f{ q.s0, q.t0 }); - vertex_data.emplace_back(Vec4f{ q.x1, q.y0, 0.0f, 0.0f }, Vec2f{ q.s1, q.t0 }); - vertex_data.emplace_back(Vec4f{ q.x1, q.y1, 0.0f, 0.0f }, Vec2f{ q.s1, q.t1 }); - vertex_data.emplace_back(Vec4f{ q.x0, q.y1, 0.0f, 0.0f }, Vec2f{ q.s0, q.t1 }); + vertex_data.emplace_back(Vec4f{ q.x0, q.y0, 0.0f, 1.0f }, Vec2f{ q.s0, q.t0 }); + vertex_data.emplace_back(Vec4f{ q.x1, q.y0, 0.0f, 1.0f }, Vec2f{ q.s1, q.t0 }); + vertex_data.emplace_back(Vec4f{ q.x1, q.y1, 0.0f, 1.0f }, Vec2f{ q.s1, q.t1 }); + vertex_data.emplace_back(Vec4f{ q.x0, q.y1, 0.0f, 1.0f }, Vec2f{ q.s0, q.t1 }); index_data.emplace_back(index + 0); index_data.emplace_back(index + 1); diff --git a/runtime/Sources/Renderer/Buffer.cpp b/runtime/Sources/Renderer/Buffer.cpp index a0dd737..95a70c3 100644 --- a/runtime/Sources/Renderer/Buffer.cpp +++ b/runtime/Sources/Renderer/Buffer.cpp @@ -118,7 +118,16 @@ namespace mlx return; RenderCore::Get().GetAllocator().UnmapMemory(m_allocation); #ifdef DEBUG - RenderCore::Get().GetAllocator().DestroyBuffer(m_allocation, m_buffer, m_debug_name.c_str()); + std::string alloc_name{ m_debug_name }; + if(m_usage & VK_BUFFER_USAGE_INDEX_BUFFER_BIT) + alloc_name.append("_index_buffer"); + else if(m_usage & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT) + alloc_name.append("_vertex_buffer"); + else if(m_usage & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT) + alloc_name.append("_uniform_buffer"); + else + alloc_name.append("_buffer"); + RenderCore::Get().GetAllocator().DestroyBuffer(m_allocation, m_buffer, alloc_name.c_str()); #else RenderCore::Get().GetAllocator().DestroyBuffer(m_allocation, m_buffer, nullptr); #endif