diff options
| author | KiritoDv <kiritodev01@gmail.com> | 2024-04-01 23:13:43 -0600 |
|---|---|---|
| committer | KiritoDv <kiritodev01@gmail.com> | 2024-04-01 23:13:43 -0600 |
| commit | b90af0cb29d7047b3c815ccf2d2cc1d85ead6380 (patch) | |
| tree | e970a15a35db28e494682c6a2a3c10bdb315d7be /src/factories/TextureFactory.cpp | |
| parent | c567193d17d7fb9b706d5ca2d000520def55f3f8 (diff) | |
Bswapped textures and dlists
Diffstat (limited to 'src/factories/TextureFactory.cpp')
| -rw-r--r-- | src/factories/TextureFactory.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/factories/TextureFactory.cpp b/src/factories/TextureFactory.cpp index a293bfc..0b70618 100644 --- a/src/factories/TextureFactory.cpp +++ b/src/factories/TextureFactory.cpp @@ -316,6 +316,24 @@ std::optional<std::shared_ptr<IParsedData>> TextureFactory::parse(std::vector<ui result = alloc_ia8_text_from_i1(reinterpret_cast<uint16_t*>(segment.data), 8, 16); } else { result = std::vector(segment.data, segment.data + segment.size); + + size_t byteSize = std::max(1, (int) (fmt.depth / 8)); + + if(byteSize == sizeof(uint16_t)){ + std::vector<uint16_t> temp; + for(int i = 0; i < result.size(); i+=2){ + temp.push_back(BSWAP16(*(uint16_t*) &result[i])); + } + result = std::vector<uint8_t>((uint8_t*) temp.data(), (uint8_t*) temp.data() + temp.size() * sizeof(uint16_t)); + } else if(byteSize == sizeof(uint32_t)){ + std::vector<uint16_t> temp; + for(int i = 0; i < result.size(); i+=4){ + temp.push_back(BSWAP32(*(uint32_t*) &result[i])); + } + result = std::vector<uint8_t>((uint8_t*) temp.data(), (uint8_t*) temp.data() + temp.size() * sizeof(uint32_t)); + } else { + result = std::vector(segment.data, segment.data + segment.size); + } } SPDLOG_INFO("Texture: {}", format); |
