From 7c93abed9a0fd82de1b5b05abf27e60d245c3509 Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Wed, 31 Jan 2024 11:17:29 -0600 Subject: Added auto texture size calculation --- src/utils/Decompressor.cpp | 6 +++--- src/utils/Decompressor.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src/utils') diff --git a/src/utils/Decompressor.cpp b/src/utils/Decompressor.cpp index 7de4338..a53177b 100644 --- a/src/utils/Decompressor.cpp +++ b/src/utils/Decompressor.cpp @@ -35,7 +35,7 @@ DataChunk* Decompressor::Decode(const std::vector& buffer, const uint32 } } -DecompressedData Decompressor::AutoDecode(YAML::Node& node, std::vector& buffer) { +DecompressedData Decompressor::AutoDecode(YAML::Node& node, std::vector& buffer, std::optional manualSize) { if(!node["offset"]){ throw std::runtime_error("Failed to find offset"); } @@ -45,7 +45,7 @@ DecompressedData Decompressor::AutoDecode(YAML::Node& node, std::vector if(node["mio0"]){ const auto mio0 = node["mio0"].as(); auto decoded = Decode(buffer, offset, CompressionType::MIO0); - auto size = node["size"] ? node["size"].as() : decoded->size - mio0; + auto size = node["size"] ? node["size"].as() : manualSize.value_or(decoded->size - mio0); return { .root = decoded, @@ -63,7 +63,7 @@ DecompressedData Decompressor::AutoDecode(YAML::Node& node, std::vector return { .root = nullptr, - .segment = { buffer.data() + offset, node["size"] ? node["size"].as() : buffer.size() - offset } + .segment = { buffer.data() + offset, node["size"] ? node["size"].as() : manualSize.value_or(buffer.size() - offset) } }; } diff --git a/src/utils/Decompressor.h b/src/utils/Decompressor.h index 1bd5c05..4e3c298 100644 --- a/src/utils/Decompressor.h +++ b/src/utils/Decompressor.h @@ -26,7 +26,7 @@ struct DecompressedData { class Decompressor { public: static DataChunk* Decode(const std::vector& buffer, uint32_t offset, CompressionType type); - static DecompressedData AutoDecode(YAML::Node& node, std::vector& buffer); + static DecompressedData AutoDecode(YAML::Node& node, std::vector& buffer, std::optional size = std::nullopt); static uint32_t TranslateAddr(uint32_t addr); static bool IsSegmented(uint32_t addr); static bool IsCompressed(YAML::Node& node); -- cgit v1.2.3