From b90af0cb29d7047b3c815ccf2d2cc1d85ead6380 Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Mon, 1 Apr 2024 23:13:43 -0600 Subject: Bswapped textures and dlists --- src/factories/DisplayListFactory.cpp | 4 ++-- src/factories/TextureFactory.cpp | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/factories/DisplayListFactory.cpp b/src/factories/DisplayListFactory.cpp index b5d71dd..8d67392 100644 --- a/src/factories/DisplayListFactory.cpp +++ b/src/factories/DisplayListFactory.cpp @@ -303,8 +303,8 @@ std::optional> DListFactory::parse(std::vector> 24; 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> TextureFactory::parse(std::vector(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 temp; + for(int i = 0; i < result.size(); i+=2){ + temp.push_back(BSWAP16(*(uint16_t*) &result[i])); + } + result = std::vector((uint8_t*) temp.data(), (uint8_t*) temp.data() + temp.size() * sizeof(uint16_t)); + } else if(byteSize == sizeof(uint32_t)){ + std::vector temp; + for(int i = 0; i < result.size(); i+=4){ + temp.push_back(BSWAP32(*(uint32_t*) &result[i])); + } + result = std::vector((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); -- cgit v1.2.3