From d3a591a1fffb002c96778452fc818dfd37b49328 Mon Sep 17 00:00:00 2001 From: XProger Date: Wed, 22 Dec 2021 15:37:11 +0300 Subject: [PATCH] #370 use byte offset to PLUT instead of index --- src/platform/3do/faceAddMeshQuads.s | 3 +-- src/platform/3do/faceAddMeshTriangles.s | 5 ++--- src/platform/3do/faceAddRoomQuads.s | 5 ++--- src/platform/3do/faceAddRoomTriangles.s | 5 ++--- src/platform/3do/render_cel.cpp | 2 +- src/platform/gba/packer/main.cpp | 13 +++++++------ 6 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/platform/3do/faceAddMeshQuads.s b/src/platform/3do/faceAddMeshQuads.s index 7fd3607..d90a679 100644 --- a/src/platform/3do/faceAddMeshQuads.s +++ b/src/platform/3do/faceAddMeshQuads.s @@ -197,8 +197,7 @@ skip cmp fPolys, fLast ; plutPtr = plutOffset + (tex->shift >> 16) * sizeof(PLUT) ldr plutOffset, [sp, #SP_PALETTE] - mov plutPtr, shift, lsr #16 - add plutPtr, plutOffset, plutPtr, lsl #5 + add plutPtr, plutOffset, shift, lsr #16 ldmia vp2, {vx2, vy2} sub vx2, vx2, vx0 diff --git a/src/platform/3do/faceAddMeshTriangles.s b/src/platform/3do/faceAddMeshTriangles.s index 8b5d6f7..2c6c123 100644 --- a/src/platform/3do/faceAddMeshTriangles.s +++ b/src/platform/3do/faceAddMeshTriangles.s @@ -186,9 +186,8 @@ skip cmp fPolys, fLast stmia face!, {flags, nextPtr} ldmia tex, {dataPtr, shift} - ; plutPtr = plutOffset + (tex->shift >> 16) * sizeof(PLUT) - mov plutPtr, shift, lsr #16 - add plutPtr, plutOffset, plutPtr, lsl #5 + ; plutPtr = plutOffset + (tex->shift >> 16) + add plutPtr, plutOffset, shift, lsr #16 and ws, shift, #0xFF mov hs, shift, lsr #8 diff --git a/src/platform/3do/faceAddRoomQuads.s b/src/platform/3do/faceAddRoomQuads.s index 907934a..96c76d3 100644 --- a/src/platform/3do/faceAddRoomQuads.s +++ b/src/platform/3do/faceAddRoomQuads.s @@ -210,10 +210,9 @@ skip cmp fPolys, fLast stmia face!, {flags, nextPtr} ldmia tex, {dataPtr, shift} - ; plutPtr = plutOffset + (tex->shift >> 16) * sizeof(PLUT) + ; plutPtr = plutOffset + (tex->shift >> 16) ldr plutOffset, [sp, #SP_PALETTE] - mov plutPtr, shift, lsr #16 - add plutPtr, plutOffset, plutPtr, lsl #5 + add plutPtr, plutOffset, shift, lsr #16 ldmia vp2, {vx2, vy2} sub vx2, vx2, vx0 diff --git a/src/platform/3do/faceAddRoomTriangles.s b/src/platform/3do/faceAddRoomTriangles.s index 352a7f2..9442332 100644 --- a/src/platform/3do/faceAddRoomTriangles.s +++ b/src/platform/3do/faceAddRoomTriangles.s @@ -202,9 +202,8 @@ skip cmp fPolys, fLast stmia face!, {flags, nextPtr} ldmia tex, {dataPtr, shift} - ; plutPtr = plutOffset + (tex->shift >> 16) * sizeof(PLUT) - mov plutPtr, shift, lsr #16 - add plutPtr, plutOffset, plutPtr, lsl #5 + ; plutPtr = plutOffset + (tex->shift >> 16) + add plutPtr, plutOffset, shift, lsr #16 and ws, shift, #0xFF mov hs, shift, lsr #8 diff --git a/src/platform/3do/render_cel.cpp b/src/platform/3do/render_cel.cpp index da6bb4c..b4da6db 100644 --- a/src/platform/3do/render_cel.cpp +++ b/src/platform/3do/render_cel.cpp @@ -208,7 +208,7 @@ X_INLINE void ccbSetTexture(uint32 flags, Face* face, const Texture* texture) (flags >> (8 + FACE_MIP_SHIFT + FACE_MIP_SHIFT) << 5); // set CCB_BGND (0x20 == 1 << 5) face->ccb_SourcePtr = (CelData*)texture->data; - face->ccb_PLUTPtr = gPalette + (texture->shift >> 16) * 16; + face->ccb_PLUTPtr = (uint8*)gPalette + (texture->shift >> 16); } X_INLINE void ccbSetColor(uint32 flags, Face* face) diff --git a/src/platform/gba/packer/main.cpp b/src/platform/gba/packer/main.cpp index fc1f305..d6e7030 100644 --- a/src/platform/gba/packer/main.cpp +++ b/src/platform/gba/packer/main.cpp @@ -3005,6 +3005,11 @@ struct LevelPC } // 3DO ======================================================================== + struct PLUT { + uint16 colors[16]; + } PLUTs[MAX_TEXTURES]; + int32 plutsCount; + struct Texture3DO { int32 data; int32 plut; @@ -3024,7 +3029,8 @@ struct LevelPC void write(FileStream &f) const { - uint32 shift = wShift | (hShift << 8) | (plut << 16); + ASSERT(plut * sizeof(PLUT) < 0xFFFF); + uint32 shift = wShift | (hShift << 8) | ((plut * sizeof(PLUT)) << 16); f.write(data); f.write(shift); } @@ -3041,11 +3047,6 @@ struct LevelPC int32 spritesBaseIndex; - struct PLUT { - uint16 colors[16]; - } PLUTs[MAX_TEXTURES]; - int32 plutsCount; - uint32 nextPow2(uint32 x) { x--; x |= x >> 1;