diff --git a/libultraship b/libultraship index e57d24b0..7ee3634d 160000 --- a/libultraship +++ b/libultraship @@ -1 +1 @@ -Subproject commit e57d24b00ae5964c8d956c961a48e30f24a1d3b0 +Subproject commit 7ee3634dd06059407baec07b705295c98ac2672d diff --git a/src/port/Engine.h b/src/port/Engine.h index 0a5998d3..9af6483e 100644 --- a/src/port/Engine.h +++ b/src/port/Engine.h @@ -1,9 +1,9 @@ #pragma once -#include "libultraship/src/Context.h" #ifdef __cplusplus #include #include +#include "libultraship/src/Context.h" #define SAMPLES_HIGH 544 #define SAMPLES_LOW 528 diff --git a/src/port/GBIMiddleware.cpp b/src/port/GBIMiddleware.cpp index ab8f0e0a..24f423fc 100644 --- a/src/port/GBIMiddleware.cpp +++ b/src/port/GBIMiddleware.cpp @@ -28,18 +28,24 @@ extern "C" void gSPVertex(Gfx* pkt, uintptr_t v, int n, int v0) { } extern "C" void gSPInvalidateTexCache(Gfx* pkt, uintptr_t texAddr) { - char* imgData = (char*)texAddr; + auto data = reinterpret_cast(texAddr); - if (texAddr != 0 && GameEngine_OTRSigCheck(imgData)) { - auto res = LUS::Context::GetInstance()->GetResourceManager()->LoadResource(imgData); + if (texAddr != 0 && GameEngine_OTRSigCheck(data)) { + const auto res = LUS::Context::GetInstance()->GetResourceManager()->LoadResource(data); + const auto type = static_cast(res->GetInitData()->Type); - if (res->GetInitData()->Type == LUS::ResourceType::DisplayList) - texAddr = (uintptr_t)&((std::static_pointer_cast(res))->Instructions[0]); - else if (res->GetInitData()->Type == LUS::ResourceType::Array) - texAddr = (uintptr_t)(std::static_pointer_cast(res))->Vertices.data(); - else { - texAddr = (uintptr_t) res->GetRawPointer(); + switch(type) { + case LUS::ResourceType::DisplayList: + texAddr = reinterpret_cast(&std::static_pointer_cast(res)->Instructions[0]); + break; + case LUS::ResourceType::Array: + texAddr = reinterpret_cast(std::static_pointer_cast(res)->Vertices.data()); + break; + default: + texAddr = reinterpret_cast(res->GetRawPointer()); + break; } } + __gSPInvalidateTexCache(pkt, texAddr); }