summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKiritoDv <kiritodev01@gmail.com>2024-04-01 23:13:43 -0600
committerKiritoDv <kiritodev01@gmail.com>2024-04-01 23:13:43 -0600
commitb90af0cb29d7047b3c815ccf2d2cc1d85ead6380 (patch)
treee970a15a35db28e494682c6a2a3c10bdb315d7be
parentc567193d17d7fb9b706d5ca2d000520def55f3f8 (diff)
Bswapped textures and dlists
-rw-r--r--src/factories/DisplayListFactory.cpp4
-rw-r--r--src/factories/TextureFactory.cpp18
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<std::shared_ptr<IParsedData>> DListFactory::parse(std::vector<uint
auto processing = true;
while (processing){
- auto w0 = reader.ReadUInt32();
- auto w1 = reader.ReadUInt32();
+ auto w0 = BSWAP32(reader.ReadUInt32());
+ auto w1 = BSWAP32(reader.ReadUInt32());
uint8_t opcode = w0 >> 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<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);