Splashpack fixes, rendering from splaspack now works

This commit is contained in:
2025-03-23 00:04:20 +01:00
parent 29cbd54254
commit 3c6989c291
5 changed files with 44 additions and 37 deletions

View File

@@ -7,33 +7,43 @@
namespace psxsplash {
eastl::vector<psxsplash::GameObject*> LoadSplashpack(uint8_t *data) {
psyqo::Kernel::assert(data != nullptr, "Splashpack loading data pointer is null");
eastl::vector<psxsplash::GameObject *> LoadSplashpack(uint8_t *data) {
psyqo::Kernel::assert(data != nullptr,
"Splashpack loading data pointer is null");
psxsplash::SPLASHPACKFileHeader *header =
reinterpret_cast<psxsplash::SPLASHPACKFileHeader *>(data);
psyqo::Kernel::assert(memcmp(header->magic, "SP", 2) == 0, "Splashpack has incorrect magic");
psyqo::Kernel::assert(memcmp(header->magic, "SP", 2) == 0,
"Splashpack has incorrect magic");
eastl::vector<psxsplash::GameObject*> gameObjects;
eastl::vector<psxsplash::GameObject *> gameObjects;
gameObjects.reserve(header->gameObjectCount);
uint8_t* curentPointer = data + sizeof(psxsplash::SPLASHPACKFileHeader);
uint8_t *curentPointer = data + sizeof(psxsplash::SPLASHPACKFileHeader);
for(uint16_t i = 0; i < header->gameObjectCount; i++) {
psxsplash::GameObject* go = reinterpret_cast<psxsplash::GameObject*>(curentPointer);
go->polygons = reinterpret_cast<psxsplash::Tri*>(data + go->polygonsOffset);
for (uint16_t i = 0; i < header->gameObjectCount; i++) {
psxsplash::GameObject *go =
reinterpret_cast<psxsplash::GameObject *>(curentPointer);
go->polygons =
reinterpret_cast<psxsplash::Tri *>(data + go->polygonsOffset);
gameObjects.push_back(go);
curentPointer += sizeof(psxsplash::GameObject);
}
for(uint16_t i = 0; i < header->textureAtlasCount; i++) {
psxsplash::SPLASHPACKTextureAtlas* atlas = reinterpret_cast<psxsplash::SPLASHPACKTextureAtlas *>(curentPointer);
uint8_t* offsetData = data + atlas->polygonsOffset; // Ensure correct byte offset
uint16_t* castedData = reinterpret_cast<uint16_t*>(offsetData); // Safe cast
psxsplash::Renderer::getInstance().vramUpload(castedData, atlas->x, atlas->y, atlas->width, atlas->height);
for (uint16_t i = 0; i < header->textureAtlasCount; i++) {
psxsplash::SPLASHPACKTextureAtlas *atlas =
reinterpret_cast<psxsplash::SPLASHPACKTextureAtlas *>(
curentPointer);
uint8_t *offsetData =
data + atlas->polygonsOffset; // Ensure correct byte offset
uint16_t *castedData =
reinterpret_cast<uint16_t *>(offsetData); // Safe cast
psxsplash::Renderer::getInstance().vramUpload(
castedData, atlas->x, atlas->y, atlas->width, atlas->height);
curentPointer += sizeof(psxsplash::SPLASHPACKTextureAtlas);
}
return gameObjects;
}
}
} // namespace psxsplash