From 6c796bb3a0db48b8290c540797e46c6d22c16f93 Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Sun, 2 Mar 2025 18:58:33 +0100 Subject: [PATCH] Cleanup font generators --- examples/ExampleApps/TextExampleApp.cpp | 7 ---- .../Scene/Text/BitmapFontAtlasGenerator.cpp | 14 +++----- .../Scene/Text/BitmapFontAtlasGenerator.hpp | 8 ++--- .../Scene/Text/IFontAtlasGenerator.hpp | 6 ++-- .../Scene/Text/SdfFontAtlasGenerator.cpp | 35 +++++-------------- .../Scene/Text/SdfFontAtlasGenerator.hpp | 15 +++----- 6 files changed, 24 insertions(+), 61 deletions(-) diff --git a/examples/ExampleApps/TextExampleApp.cpp b/examples/ExampleApps/TextExampleApp.cpp index 9cc801b..2c72bf6 100644 --- a/examples/ExampleApps/TextExampleApp.cpp +++ b/examples/ExampleApps/TextExampleApp.cpp @@ -34,7 +34,6 @@ namespace OpenVulkano using namespace Math; namespace fs = std::filesystem; - constexpr int CREATE_BITMAP_ATLAS = 0; //#define CREATE_NEW_ATLAS class TextExampleAppImpl final : public TextExampleApp @@ -67,12 +66,6 @@ namespace OpenVulkano m_nodesPool.resize(textsCount * atlasesCount); m_drawablesPool.resize(textsCount * atlasesCount); - if constexpr (CREATE_BITMAP_ATLAS) - { - // ReSharper disable once CppDFAUnreachableCode - FontAtlasFactory().GetFontAtlas("Roboto-Regular", 14.0f, SubpixelLayout::RGB)->Save("bitmap_atlas_rgb.ovfont"); - } - #if defined(MSDFGEN_AVAILABLE) && defined(CREATE_NEW_ATLAS) std::set s = SdfFontAtlasGenerator::LoadAllGlyphs(fontPath); m_atlasGenerator.GenerateAtlas(fontPath, s); diff --git a/openVulkanoCpp/Scene/Text/BitmapFontAtlasGenerator.cpp b/openVulkanoCpp/Scene/Text/BitmapFontAtlasGenerator.cpp index 9afc6ce..ed78093 100644 --- a/openVulkanoCpp/Scene/Text/BitmapFontAtlasGenerator.cpp +++ b/openVulkanoCpp/Scene/Text/BitmapFontAtlasGenerator.cpp @@ -11,21 +11,18 @@ namespace OpenVulkano::Scene { - void BitmapFontAtlasGenerator::GenerateAtlas(const std::string& fontFile, const std::set& charset, - const std::optional& pngOutput) + void BitmapFontAtlasGenerator::GenerateAtlas(const std::string& fontFile, const std::set& charset) { - GenerateAtlas(Utils::ReadFile(fontFile), charset, pngOutput); + GenerateAtlas(Utils::ReadFile(fontFile), charset); } - void BitmapFontAtlasGenerator::GenerateAtlas(const Array& fontData, const std::set& charset, - const std::optional& pngOutput) + void BitmapFontAtlasGenerator::GenerateAtlas(const Array& fontData, const std::set& charset) { - Generate({ reinterpret_cast(fontData.Data()), fontData.Size() }, charset, pngOutput); + Generate(fontData.AsBytes(), charset); } void BitmapFontAtlasGenerator::Generate(const std::span& fontData, - const std::set& inCs, - const std::optional& pngOutput) + const std::set& inCs) { const auto& [lib, face] = FontAtlasGeneratorBase::InitFreetype(fontData); @@ -64,7 +61,6 @@ namespace OpenVulkano::Scene FontAtlasType::BITMAP, m_subpixelLayout.GetTextureDataFormat()); FillGlyphsInfo(allGlyphs, face, scaleFactor); - if (pngOutput) m_atlasData->Save(*pngOutput); } std::pair, double> diff --git a/openVulkanoCpp/Scene/Text/BitmapFontAtlasGenerator.hpp b/openVulkanoCpp/Scene/Text/BitmapFontAtlasGenerator.hpp index 2b5eda3..a6030bd 100644 --- a/openVulkanoCpp/Scene/Text/BitmapFontAtlasGenerator.hpp +++ b/openVulkanoCpp/Scene/Text/BitmapFontAtlasGenerator.hpp @@ -42,12 +42,10 @@ namespace OpenVulkano::Scene , m_subpixelLayout(subpixelLayout.value_or(SubpixelLayout::UNKNOWN)) { } - [[deprecated]] void GenerateAtlas(const std::string& fontFile, const std::set& charset, - const std::optional& pngOutput = std::nullopt) override; - void GenerateAtlas(const Array& fontData, const std::set& charset, - const std::optional& pngOutput = std::nullopt) override; + [[deprecated]] void GenerateAtlas(const std::string& fontFile, const std::set& charset) override; + void GenerateAtlas(const Array& fontData, const std::set& charset) override; private: - void Generate(const std::span& fontData, const std::set& chset, const std::optional& pngOutput); + void Generate(const std::span& fontData, const std::set& chset); void FillGlyphsInfo(const std::vector& allGlyphs, const FtFaceRecPtr& face, double scaleFactor); void FillSubpixelData(const FT_Bitmap& bitmap, const GlyphForPacking& glyph); FT_Int32 GetGlyphRenderMode() const; diff --git a/openVulkanoCpp/Scene/Text/IFontAtlasGenerator.hpp b/openVulkanoCpp/Scene/Text/IFontAtlasGenerator.hpp index 61c85f1..4b5544e 100644 --- a/openVulkanoCpp/Scene/Text/IFontAtlasGenerator.hpp +++ b/openVulkanoCpp/Scene/Text/IFontAtlasGenerator.hpp @@ -20,10 +20,8 @@ namespace OpenVulkano::Scene { public: virtual ~IFontAtlasGenerator() = default; - [[deprecated]] virtual void GenerateAtlas(const std::string& fontFile, const std::set& charset, - const std::optional& pngOutput = std::nullopt) = 0; - virtual void GenerateAtlas(const Array& fontData, const std::set& charset, - const std::optional& pngOutput = std::nullopt) = 0; + [[deprecated]] virtual void GenerateAtlas(const std::string& fontFile, const std::set& charset) = 0; + virtual void GenerateAtlas(const Array& fontData, const std::set& charset) = 0; virtual const std::shared_ptr& GetAtlas() const = 0; }; } diff --git a/openVulkanoCpp/Scene/Text/SdfFontAtlasGenerator.cpp b/openVulkanoCpp/Scene/Text/SdfFontAtlasGenerator.cpp index 807dddb..0d81ba2 100644 --- a/openVulkanoCpp/Scene/Text/SdfFontAtlasGenerator.cpp +++ b/openVulkanoCpp/Scene/Text/SdfFontAtlasGenerator.cpp @@ -18,15 +18,9 @@ namespace OpenVulkano::Scene SdfFontAtlasGeneratorConfig SdfFontAtlasGeneratorConfig::msdfDefaultConfig = { 32, 1.0, 3 }; template - void SdfFontAtlasGeneratorGeneric::GenerateAtlas(const std::string& fontFile, const std::set& charset, - const std::optional& pngOutput) + void SdfFontAtlasGeneratorGeneric::GenerateAtlas(const std::string& fontFile, const std::set& inCs) { - msdfgen::FreetypeHandle* ft; - msdfgen::FontHandle* font; - InitFreetypeFromFile(ft, font, fontFile); - msdf_atlas::Charset s; - std::for_each(charset.begin(), charset.end(), [&](uint32_t unicode) { s.add(unicode); }); - Generate(ft, font, s, pngOutput); + GenerateAtlas(Utils::ReadFile(fontFile), inCs); } template SdfFontAtlasGeneratorGeneric::SdfFontAtlasGeneratorGeneric() : FontAtlasGeneratorBase(Channels) @@ -36,8 +30,7 @@ namespace OpenVulkano::Scene } template - void SdfFontAtlasGeneratorGeneric::GenerateAtlas(const Array& fontData, const std::set& inCs, - const std::optional& pngOutput) + void SdfFontAtlasGeneratorGeneric::GenerateAtlas(const Array& fontData, const std::set& inCs) { msdfgen::FreetypeHandle* ft; msdfgen::FontHandle* font; @@ -50,30 +43,26 @@ namespace OpenVulkano::Scene } const auto& charset = inCs.empty() ? fallback : inCs; std::for_each(charset.begin(), charset.end(), [&](uint32_t unicode) { s.add(unicode); }); - Generate(ft, font, s, pngOutput); + Generate(ft, font, s); } template - void SdfFontAtlasGeneratorGeneric::GenerateAtlas(const std::string& fontFile, - const msdf_atlas::Charset& charset, - const std::optional& pngOutput) + void SdfFontAtlasGeneratorGeneric::GenerateAtlas(const std::string& fontFile, const msdf_atlas::Charset& charset) { // TODO: dynamic atlas and add only those symbols which are not present yet in current atlas msdfgen::FreetypeHandle* ft; msdfgen::FontHandle* font; InitFreetypeFromFile(ft, font, fontFile); - Generate(ft, font, charset, pngOutput); + Generate(ft, font, charset); } template - void SdfFontAtlasGeneratorGeneric::GenerateAtlas(const msdfgen::byte* fontData, int length, - const msdf_atlas::Charset& charset, - const std::optional& pngOutput) + void SdfFontAtlasGeneratorGeneric::GenerateAtlas(const msdfgen::byte* fontData, int length, const msdf_atlas::Charset& charset) { msdfgen::FreetypeHandle* ft; msdfgen::FontHandle* font; InitFreetypeFromBuffer(ft, font, fontData, length); - Generate(ft, font, charset, pngOutput); + Generate(ft, font, charset); } template @@ -115,9 +104,7 @@ namespace OpenVulkano::Scene } template - void SdfFontAtlasGeneratorGeneric::Generate(msdfgen::FreetypeHandle* ft, msdfgen::FontHandle* font, - const msdf_atlas::Charset& chset, - const std::optional& pngOutput) + void SdfFontAtlasGeneratorGeneric::Generate(msdfgen::FreetypeHandle* ft, msdfgen::FontHandle* font, const msdf_atlas::Charset& chset) { std::vector glyphsGeometry; // FontGeometry is a helper class that loads a set of glyphs from a single font. @@ -212,10 +199,6 @@ namespace OpenVulkano::Scene SetGlyphData(info, { bearingX, bearingY }, { w, h }, glyphAtlasAABB, glyphBox.advance); } - if (pngOutput && !pngOutput->empty()) - { - m_atlasData->Save(*pngOutput); - } destroyFont(font); deinitializeFreetype(ft); } diff --git a/openVulkanoCpp/Scene/Text/SdfFontAtlasGenerator.hpp b/openVulkanoCpp/Scene/Text/SdfFontAtlasGenerator.hpp index 4f65b5a..1ed6bd2 100644 --- a/openVulkanoCpp/Scene/Text/SdfFontAtlasGenerator.hpp +++ b/openVulkanoCpp/Scene/Text/SdfFontAtlasGenerator.hpp @@ -42,24 +42,19 @@ namespace OpenVulkano::Scene using Config = SdfFontAtlasGeneratorConfig; static constexpr int channelsCount = (Channels == 1 ? 1 : 4); SdfFontAtlasGeneratorGeneric(); - [[deprecated]] void GenerateAtlas(const std::string& fontFile, const std::set& charset, - const std::optional& pngOutput = std::nullopt) override; - void GenerateAtlas(const Array& fontData, const std::set& charset, - const std::optional& pngOutput = std::nullopt) override; + [[deprecated]] void GenerateAtlas(const std::string& fontFile, const std::set& charset) override; + void GenerateAtlas(const Array& fontData, const std::set& charset) override; [[deprecated]] void GenerateAtlas(const std::string& fontFile, - const msdf_atlas::Charset& charset = msdf_atlas::Charset::ASCII, - const std::optional& pngOutput = std::nullopt); + const msdf_atlas::Charset& charset = msdf_atlas::Charset::ASCII); void GenerateAtlas(const msdfgen::byte* fontData, int length, - const msdf_atlas::Charset& charset = msdf_atlas::Charset::ASCII, - const std::optional& pngOutput = std::nullopt); + const msdf_atlas::Charset& charset = msdf_atlas::Charset::ASCII); void SetGeneratorConfig(const Config& config) { m_config = config; } Config& GetGeneratorConfig() { return m_config; } private: void InitFreetypeFromFile(msdfgen::FreetypeHandle*& ft, msdfgen::FontHandle*& font, const std::string& file); void InitFreetypeFromBuffer(msdfgen::FreetypeHandle*& ft, msdfgen::FontHandle*& font, const msdfgen::byte* fontData, int length); - void Generate(msdfgen::FreetypeHandle* ft, msdfgen::FontHandle* font, const msdf_atlas::Charset& chset, - const std::optional& pngOutput); + void Generate(msdfgen::FreetypeHandle* ft, msdfgen::FontHandle* font, const msdf_atlas::Charset& chset); private: Config m_config; };