From f0c70f855a892ca7dc21cee4b4037dad983adb8f Mon Sep 17 00:00:00 2001 From: Lywx Date: Wed, 20 Mar 2024 21:17:11 -0600 Subject: Auto pad and overlap detection (#47) * Fully implemented pad and overlap detection * Cleaned code, fixed pad generation and added alignment * Added debug size on pads --- src/factories/TextureFactory.cpp | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) (limited to 'src/factories/TextureFactory.cpp') diff --git a/src/factories/TextureFactory.cpp b/src/factories/TextureFactory.cpp index 9202b94..cdaef37 100644 --- a/src/factories/TextureFactory.cpp +++ b/src/factories/TextureFactory.cpp @@ -79,14 +79,14 @@ std::vector alloc_ia8_text_from_i1(uint16_t *in, int16_t width, int16_t return result; } -void TextureHeaderExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement) { +ExportResult TextureHeaderExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement) { const auto symbol = GetSafeNode(node, "symbol", entryName); const auto offset = GetSafeNode(node, "offset"); auto data = std::static_pointer_cast(raw)->mBuffer; if(Companion::Instance->IsOTRMode()){ write << "static const char " << symbol << "[] = \"__OTR__" << (*replacement) << "\";\n\n"; - return; + return std::nullopt; } const auto searchTable = Companion::Instance->SearchTable(offset); @@ -95,16 +95,17 @@ void TextureHeaderExporter::Export(std::ostream &write, std::shared_ptr(node, "ctype", "u8") << " " << name << "[][" << data.size() << "];\n"; } else { write << "extern " << GetSafeNode(node, "ctype", "u8") << " " << symbol << "[];\n"; } + return std::nullopt; } -void TextureCodeExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement) { +ExportResult TextureCodeExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement) { auto texture = std::static_pointer_cast(raw); auto data = texture->mBuffer; auto offset = GetSafeNode(node, "offset"); @@ -169,27 +170,21 @@ void TextureCodeExporter::Export(std::ostream &write, std::shared_ptr(node, "ctype", "static const u8") << " " << symbol << "[] = {\n"; write << tab << "#include \"" << Companion::Instance->GetOutputPath() + "/" << *replacement << ".inc.c\"\n"; write << "};\n"; + const auto sz = data.size(); if (Companion::Instance->IsDebug()) { - const auto sz = data.size(); - write << "// size: 0x" << std::hex << std::uppercase << sz << "\n"; - if (IS_SEGMENTED(offset)) { - offset = SEGMENT_OFFSET(offset); - } - write << "// 0x" << std::hex << std::uppercase << (offset + sz) << "\n"; } - - write << "\n"; } + return (IS_SEGMENTED(offset) ? SEGMENT_OFFSET(offset) : offset) + data.size(); } -void TextureBinaryExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement) { +ExportResult TextureBinaryExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement) { auto writer = LUS::BinaryWriter(); auto texture = std::static_pointer_cast(raw); auto data = texture->mBuffer; @@ -203,9 +198,10 @@ void TextureBinaryExporter::Export(std::ostream &write, std::shared_ptr data, std::string&entryName, YAML::Node&node, std::string* replacement) { +ExportResult TextureModdingExporter::Export(std::ostream&write, std::shared_ptr data, std::string&entryName, YAML::Node&node, std::string* replacement) { auto texture = std::static_pointer_cast(data); auto format = texture->mFormat; uint8_t* raw = new uint8_t[CalculateTextureSize(format.type, texture->mWidth, texture->mHeight) * 2]; @@ -258,6 +254,7 @@ void TextureModdingExporter::Export(std::ostream&write, std::shared_ptr(raw), size); + return std::nullopt; } -- cgit v1.2.3