Add helper struct
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user