Add helper struct

This commit is contained in:
Georg Hagen
2025-01-11 13:40:34 +01:00
parent be5a37fd9f
commit 006968fb4c

View File

@@ -26,6 +26,16 @@ namespace OpenVulkano::Scene
uint8_t version = 1;
[[maybe_unused]] uint16_t reserved = 0;
};
#pragma pack(push, 1)
struct EndOfFileHeader
{
uint64_t metadataSize;
FontAtlasFileFlags flags;
};
#pragma pack(pop)
static_assert(sizeof(EndOfFileHeader) == 12);
}
FontAtlas::FontAtlas(const std::filesystem::path& path)
@@ -97,21 +107,18 @@ namespace OpenVulkano::Scene
}
}
void FontAtlas::Load(const std::span<char> data)
{
if (data.size() < 28) { Logger::DATA->warn("Font atlas file is invalid!"); return; };
FontAtlasFileFlags flags;
std::memcpy(&flags, data.data() + data.size() - sizeof(flags), sizeof(flags));
size_t headerSize = sizeof(FontAtlasFileFlags) + sizeof(uint64_t);
uint64_t metadataSize = *reinterpret_cast<uint64_t*>(data.data() + data.size() - headerSize);
char* metadata = data.data() + data.size() - headerSize - metadataSize;
if (data.size() < sizeof(EndOfFileHeader) + sizeof(Metadata)) { Logger::DATA->warn("Font atlas file is invalid!"); return; };
EndOfFileHeader eofHeader;
std::memcpy(&eofHeader, data.data() + data.size() - sizeof(EndOfFileHeader), sizeof(EndOfFileHeader));
if (flags.packed == 0) throw std::runtime_error("No longer support loading of unpacked font atlas!");
LoadImage({ data.data(), data.size() - headerSize - metadataSize });
if (eofHeader.flags.packed == 0) throw std::runtime_error("No longer support loading of unpacked font atlas!");
LoadImage(data);
std::span metadataSpan(metadata, metadataSize);
if (flags.version == 0) LoadLegacy(metadataSpan);
char* metadata = data.data() + data.size() - sizeof(EndOfFileHeader) - eofHeader.metadataSize;
const std::span metadataSpan(metadata, eofHeader.metadataSize);
if (eofHeader.flags.version == 0) LoadLegacy(metadataSpan);
else LoadNew(metadataSpan);
if (GetAtlasType() >= FontAtlasType::BITMAP) m_texture.m_samplerConfig = &SamplerConfig::NEAREST;
}