/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ #pragma once #include "IFontAtlasGenerator.hpp" #include "Math/AABB.hpp" #include "Extensions/FreetypeHelper.hpp" namespace OpenVulkano::Scene { class GlyphInfo; class FontAtlasGeneratorBase : public IFontAtlasGenerator { protected: int m_channelsCount; std::shared_ptr m_atlasData; public: FontAtlasGeneratorBase(const int channelsCount) : m_channelsCount(channelsCount) {} [[nodiscard]] const std::shared_ptr& GetAtlas() const final { return m_atlasData; } [[nodiscard]] int GetAtlasChannelsCount() const { return m_channelsCount; } static size_t LoadAllGlyphs(std::set& chars, const std::span& fontData) { auto [lib, face] = InitFreetype(fontData); return LoadAllGlyphs(chars, face); } static size_t LoadAllGlyphs(std::set& chars, const FtFaceRecPtr& face); protected: void SetGlyphData(GlyphInfo& info, Math::Vector2d bearing, Math::Vector2d size, const Math::AABB& aabb, double advance); [[nodiscard]] static std::string GetFreetypeErrorDescription(FT_Error error); [[nodiscard]] static std::pair InitFreetype(const std::span& data); }; }