J3DMtxBuffer start

This commit is contained in:
Jasper St. Pierre 2022-12-31 10:44:40 -08:00
parent a63552bc80
commit e66c902b30
6 changed files with 98 additions and 176 deletions

View File

@ -1,47 +0,0 @@
lbl_80327048:
/* 80327048 94 21 FF C0 */ stwu r1, -0x40(r1)
/* 8032704C 7C 08 02 A6 */ mflr r0
/* 80327050 90 01 00 44 */ stw r0, 0x44(r1)
/* 80327054 C0 05 00 00 */ lfs f0, 0(r5)
/* 80327058 C0 64 00 00 */ lfs f3, 0(r4)
/* 8032705C EC 00 00 F2 */ fmuls f0, f0, f3
/* 80327060 D0 01 00 08 */ stfs f0, 8(r1)
/* 80327064 C0 05 00 04 */ lfs f0, 4(r5)
/* 80327068 C0 44 00 04 */ lfs f2, 4(r4)
/* 8032706C EC 00 00 B2 */ fmuls f0, f0, f2
/* 80327070 D0 01 00 0C */ stfs f0, 0xc(r1)
/* 80327074 C0 05 00 08 */ lfs f0, 8(r5)
/* 80327078 C0 24 00 08 */ lfs f1, 8(r4)
/* 8032707C EC 00 00 72 */ fmuls f0, f0, f1
/* 80327080 D0 01 00 10 */ stfs f0, 0x10(r1)
/* 80327084 C0 05 00 0C */ lfs f0, 0xc(r5)
/* 80327088 D0 01 00 14 */ stfs f0, 0x14(r1)
/* 8032708C C0 05 00 10 */ lfs f0, 0x10(r5)
/* 80327090 EC 00 00 F2 */ fmuls f0, f0, f3
/* 80327094 D0 01 00 18 */ stfs f0, 0x18(r1)
/* 80327098 C0 05 00 14 */ lfs f0, 0x14(r5)
/* 8032709C EC 00 00 B2 */ fmuls f0, f0, f2
/* 803270A0 D0 01 00 1C */ stfs f0, 0x1c(r1)
/* 803270A4 C0 05 00 18 */ lfs f0, 0x18(r5)
/* 803270A8 EC 00 00 72 */ fmuls f0, f0, f1
/* 803270AC D0 01 00 20 */ stfs f0, 0x20(r1)
/* 803270B0 C0 05 00 1C */ lfs f0, 0x1c(r5)
/* 803270B4 D0 01 00 24 */ stfs f0, 0x24(r1)
/* 803270B8 C0 05 00 20 */ lfs f0, 0x20(r5)
/* 803270BC EC 00 00 F2 */ fmuls f0, f0, f3
/* 803270C0 D0 01 00 28 */ stfs f0, 0x28(r1)
/* 803270C4 C0 05 00 24 */ lfs f0, 0x24(r5)
/* 803270C8 EC 00 00 B2 */ fmuls f0, f0, f2
/* 803270CC D0 01 00 2C */ stfs f0, 0x2c(r1)
/* 803270D0 C0 05 00 28 */ lfs f0, 0x28(r5)
/* 803270D4 EC 00 00 72 */ fmuls f0, f0, f1
/* 803270D8 D0 01 00 30 */ stfs f0, 0x30(r1)
/* 803270DC C0 05 00 2C */ lfs f0, 0x2c(r5)
/* 803270E0 D0 01 00 34 */ stfs f0, 0x34(r1)
/* 803270E4 38 81 00 08 */ addi r4, r1, 8
/* 803270E8 7C C5 33 78 */ mr r5, r6
/* 803270EC 48 01 F3 F9 */ bl PSMTXConcat
/* 803270F0 80 01 00 44 */ lwz r0, 0x44(r1)
/* 803270F4 7C 08 03 A6 */ mtlr r0
/* 803270F8 38 21 00 40 */ addi r1, r1, 0x40
/* 803270FC 4E 80 00 20 */ blr

View File

@ -1,78 +0,0 @@
lbl_80326258:
/* 80326258 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 8032625C 7C 08 02 A6 */ mflr r0
/* 80326260 90 01 00 24 */ stw r0, 0x24(r1)
/* 80326264 39 61 00 20 */ addi r11, r1, 0x20
/* 80326268 48 03 BF 71 */ bl _savegpr_28
/* 8032626C 7C 7C 1B 78 */ mr r28, r3
/* 80326270 7C 9D 23 78 */ mr r29, r4
/* 80326274 7C BE 2B 78 */ mr r30, r5
/* 80326278 93 C3 00 2C */ stw r30, 0x2c(r3)
/* 8032627C 38 1D 00 10 */ addi r0, r29, 0x10
/* 80326280 90 03 00 00 */ stw r0, 0(r3)
/* 80326284 48 00 00 E1 */ bl createAnmMtx__12J3DMtxBufferFP12J3DModelData
/* 80326288 2C 03 00 00 */ cmpwi r3, 0
/* 8032628C 41 82 00 08 */ beq lbl_80326294
/* 80326290 48 00 00 BC */ b lbl_8032634C
lbl_80326294:
/* 80326294 7F 83 E3 78 */ mr r3, r28
/* 80326298 7F A4 EB 78 */ mr r4, r29
/* 8032629C 48 00 01 55 */ bl createWeightEnvelopeMtx__12J3DMtxBufferFP12J3DModelData
/* 803262A0 7C 7F 1B 79 */ or. r31, r3, r3
/* 803262A4 41 82 00 08 */ beq lbl_803262AC
/* 803262A8 48 00 00 A4 */ b lbl_8032634C
lbl_803262AC:
/* 803262AC 80 7D 00 08 */ lwz r3, 8(r29)
/* 803262B0 54 60 C7 FF */ rlwinm. r0, r3, 0x18, 0x1f, 0x1f
/* 803262B4 41 82 00 10 */ beq lbl_803262C4
/* 803262B8 7F 83 E3 78 */ mr r3, r28
/* 803262BC 48 00 01 D1 */ bl setNoUseDrawMtx__12J3DMtxBufferFv
/* 803262C0 48 00 00 44 */ b lbl_80326304
lbl_803262C4:
/* 803262C4 54 60 06 F6 */ rlwinm r0, r3, 0, 0x1b, 0x1b
/* 803262C8 2C 00 00 10 */ cmpwi r0, 0x10
/* 803262CC 41 82 00 14 */ beq lbl_803262E0
/* 803262D0 40 80 00 20 */ bge lbl_803262F0
/* 803262D4 2C 00 00 00 */ cmpwi r0, 0
/* 803262D8 41 82 00 18 */ beq lbl_803262F0
/* 803262DC 48 00 00 14 */ b lbl_803262F0
lbl_803262E0:
/* 803262E0 7F 83 E3 78 */ mr r3, r28
/* 803262E4 48 00 01 A9 */ bl setNoUseDrawMtx__12J3DMtxBufferFv
/* 803262E8 7C 7F 1B 78 */ mr r31, r3
/* 803262EC 48 00 00 18 */ b lbl_80326304
lbl_803262F0:
/* 803262F0 7F 83 E3 78 */ mr r3, r28
/* 803262F4 7F A4 EB 78 */ mr r4, r29
/* 803262F8 7F C5 F3 78 */ mr r5, r30
/* 803262FC 48 00 01 BD */ bl createDoubleDrawMtx__12J3DMtxBufferFP12J3DModelDataUl
/* 80326300 7C 7F 1B 78 */ mr r31, r3
lbl_80326304:
/* 80326304 2C 1F 00 00 */ cmpwi r31, 0
/* 80326308 41 82 00 0C */ beq lbl_80326314
/* 8032630C 7F E3 FB 78 */ mr r3, r31
/* 80326310 48 00 00 3C */ b lbl_8032634C
lbl_80326314:
/* 80326314 80 1D 00 08 */ lwz r0, 8(r29)
/* 80326318 54 00 06 F7 */ rlwinm. r0, r0, 0, 0x1b, 0x1b
/* 8032631C 41 82 00 10 */ beq lbl_8032632C
/* 80326320 38 00 00 00 */ li r0, 0
/* 80326324 B0 1D 00 0C */ sth r0, 0xc(r29)
/* 80326328 48 00 00 20 */ b lbl_80326348
lbl_8032632C:
/* 8032632C 7F 83 E3 78 */ mr r3, r28
/* 80326330 7F A4 EB 78 */ mr r4, r29
/* 80326334 7F C5 F3 78 */ mr r5, r30
/* 80326338 48 00 03 2D */ bl createBumpMtxArray__12J3DMtxBufferFP12J3DModelDataUl
/* 8032633C 7C 7F 1B 79 */ or. r31, r3, r3
/* 80326340 41 82 00 08 */ beq lbl_80326348
/* 80326344 48 00 00 08 */ b lbl_8032634C
lbl_80326348:
/* 80326348 7F E3 FB 78 */ mr r3, r31
lbl_8032634C:
/* 8032634C 39 61 00 20 */ addi r11, r1, 0x20
/* 80326350 48 03 BE D5 */ bl _restgpr_28
/* 80326354 80 01 00 24 */ lwz r0, 0x24(r1)
/* 80326358 7C 08 03 A6 */ mtlr r0
/* 8032635C 38 21 00 20 */ addi r1, r1, 0x20
/* 80326360 4E 80 00 20 */ blr

View File

@ -1,18 +0,0 @@
lbl_80326214:
/* 80326214 38 80 00 00 */ li r4, 0
/* 80326218 90 83 00 00 */ stw r4, 0(r3)
/* 8032621C 90 83 00 04 */ stw r4, 4(r3)
/* 80326220 90 83 00 08 */ stw r4, 8(r3)
/* 80326224 90 83 00 0C */ stw r4, 0xc(r3)
/* 80326228 90 83 00 10 */ stw r4, 0x10(r3)
/* 8032622C 90 83 00 14 */ stw r4, 0x14(r3)
/* 80326230 90 83 00 18 */ stw r4, 0x18(r3)
/* 80326234 90 83 00 1C */ stw r4, 0x1c(r3)
/* 80326238 90 83 00 20 */ stw r4, 0x20(r3)
/* 8032623C 90 83 00 24 */ stw r4, 0x24(r3)
/* 80326240 90 83 00 28 */ stw r4, 0x28(r3)
/* 80326244 38 00 00 01 */ li r0, 1
/* 80326248 90 03 00 2C */ stw r0, 0x2c(r3)
/* 8032624C 90 83 00 30 */ stw r4, 0x30(r3)
/* 80326250 90 83 00 34 */ stw r4, 0x34(r3)
/* 80326254 4E 80 00 20 */ blr

View File

@ -42,8 +42,10 @@ public:
void* getVtxPosArray() const { return mVertexData.getVtxPosArray(); }
void* getVtxNrmArray() const { return mVertexData.getVtxNrmArray(); }
GXColor* getVtxColorArray(u8 idx) const { return mVertexData.getVtxColorArray(idx); }
bool checkFlag(u32 flag) const { return !!(mFlags & flag); }
bool checkFlag(u32 flag) const { return (mFlags & flag) ? true : false; }
u32 getFlag() const { return mFlags; }
u16 checkBumpFlag() const { return mbHasBumpArray; }
void setBumpFlag(u32 flag) { mbHasBumpArray = flag; }
bool checkBBoardFlag() const { return mbHasBillboard == 1; }
bool isLocked() { return mMaterialTable.isLocked(); }
void entryTexMtxAnimator(J3DAnmTextureSRTKey* anm) { mMaterialTable.entryTexMtxAnimator(anm); }

View File

@ -14,11 +14,11 @@ public:
/* 80326214 */ void initialize();
/* 80326258 */ s32 create(J3DModelData*, u32);
/* 80326364 */ void createAnmMtx(J3DModelData*);
/* 803263F0 */ void createWeightEnvelopeMtx(J3DModelData*);
/* 8032648C */ void setNoUseDrawMtx();
/* 803264B8 */ void createDoubleDrawMtx(J3DModelData*, u32);
/* 80326664 */ void createBumpMtxArray(J3DModelData*, u32);
/* 80326364 */ s32 createAnmMtx(J3DModelData*);
/* 803263F0 */ s32 createWeightEnvelopeMtx(J3DModelData*);
/* 8032648C */ s32 setNoUseDrawMtx();
/* 803264B8 */ s32 createDoubleDrawMtx(J3DModelData*, u32);
/* 80326664 */ s32 createBumpMtxArray(J3DModelData*, u32);
/* 803268D4 */ void calcWeightEnvelopeMtx();
/* 80326ACC */ void calcDrawMtx(u32, Vec const&, f32 const (&)[3][4]);
/* 80326D3C */ void calcNrmMtx();

View File

@ -6,6 +6,7 @@
#include "JSystem/J3DGraphAnimator/J3DMtxBuffer.h"
#include "dol2asm.h"
#include "dolphin/types.h"
#include "mtx/mtx.h"
//
// Forward References:
@ -55,31 +56,82 @@ extern "C" void _restgpr_29();
//
/* 80326214-80326258 320B54 0044+00 0/0 1/1 0/0 .text initialize__12J3DMtxBufferFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DMtxBuffer::initialize() {
nofralloc
#include "asm/JSystem/J3DGraphAnimator/J3DMtxBuffer/initialize__12J3DMtxBufferFv.s"
void J3DMtxBuffer::initialize() {
mJointTree = NULL;
mScaleFlagArray = NULL;
mEnvScaleFlag = NULL;
mpAnmMtx = NULL;
mpWeightEnvMtx = NULL;
mpOldDrawMtxArr = NULL;
mpDrawMtxArr = NULL;
mpOldNrmMtxArr = NULL;
mpNrmMtxArr = NULL;
field_0x24 = NULL; // mpOldBumpMtxArr?
mpBumpMtxArr = NULL;
mFlags = 1;
mCurrentViewNo = 0;
mUserAnmMtx = NULL;
}
#pragma pop
/* 80326258-80326364 320B98 010C+00 0/0 1/1 0/0 .text create__12J3DMtxBufferFP12J3DModelDataUl */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm s32 J3DMtxBuffer::create(J3DModelData* param_0, u32 param_1) {
nofralloc
#include "asm/JSystem/J3DGraphAnimator/J3DMtxBuffer/create__12J3DMtxBufferFP12J3DModelDataUl.s"
enum {
J3DMdlDataFlag_ConcatView = 0x10,
J3DMdlDataFlag_NoAnimation = 0x100,
};
static inline u32 getMdlDataFlag_MtxLoadType(u32 flag) {
return flag & 0x10;
}
s32 J3DMtxBuffer::create(J3DModelData* p_modelData, u32 flag) {
s32 ret;
mFlags = flag;
mJointTree = &p_modelData->getJointTree();
ret = createAnmMtx(p_modelData);
if (ret != kJ3DError_Success)
return ret;
ret = createWeightEnvelopeMtx(p_modelData);
if (ret != kJ3DError_Success)
return ret;
if (p_modelData->checkFlag(J3DMdlDataFlag_NoAnimation)) {
setNoUseDrawMtx();
} else {
switch (getMdlDataFlag_MtxLoadType(p_modelData->getFlag())) {
case J3DMdlDataFlag_ConcatView:
ret = setNoUseDrawMtx();
break;
case 0:
default:
ret = createDoubleDrawMtx(p_modelData, flag);
break;
}
}
if (ret != kJ3DError_Success)
return ret;
if (p_modelData->getFlag() & J3DMdlDataFlag_ConcatView) {
p_modelData->setBumpFlag(0);
} else {
ret = createBumpMtxArray(p_modelData, flag);
if (ret != kJ3DError_Success)
return ret;
}
return ret;
}
#pragma pop
/* 80326364-803263F0 320CA4 008C+00 1/1 0/0 0/0 .text createAnmMtx__12J3DMtxBufferFP12J3DModelData
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DMtxBuffer::createAnmMtx(J3DModelData* param_0) {
asm s32 J3DMtxBuffer::createAnmMtx(J3DModelData* param_0) {
nofralloc
#include "asm/JSystem/J3DGraphAnimator/J3DMtxBuffer/createAnmMtx__12J3DMtxBufferFP12J3DModelData.s"
}
@ -90,7 +142,7 @@ asm void J3DMtxBuffer::createAnmMtx(J3DModelData* param_0) {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DMtxBuffer::createWeightEnvelopeMtx(J3DModelData* param_0) {
asm s32 J3DMtxBuffer::createWeightEnvelopeMtx(J3DModelData* param_0) {
nofralloc
#include "asm/JSystem/J3DGraphAnimator/J3DMtxBuffer/createWeightEnvelopeMtx__12J3DMtxBufferFP12J3DModelData.s"
}
@ -114,7 +166,7 @@ Mtx33* J3DMtxBuffer::sNoUseNrmMtxPtr = &J3DMtxBuffer::sNoUseNrmMtx;
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DMtxBuffer::setNoUseDrawMtx() {
asm s32 J3DMtxBuffer::setNoUseDrawMtx() {
nofralloc
#include "asm/JSystem/J3DGraphAnimator/J3DMtxBuffer/setNoUseDrawMtx__12J3DMtxBufferFv.s"
}
@ -125,7 +177,7 @@ asm void J3DMtxBuffer::setNoUseDrawMtx() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DMtxBuffer::createDoubleDrawMtx(J3DModelData* param_0, u32 param_1) {
asm s32 J3DMtxBuffer::createDoubleDrawMtx(J3DModelData* param_0, u32 param_1) {
nofralloc
#include "asm/JSystem/J3DGraphAnimator/J3DMtxBuffer/createDoubleDrawMtx__12J3DMtxBufferFP12J3DModelDataUl.s"
}
@ -136,7 +188,7 @@ asm void J3DMtxBuffer::createDoubleDrawMtx(J3DModelData* param_0, u32 param_1) {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DMtxBuffer::createBumpMtxArray(J3DModelData* param_0, u32 param_1) {
asm s32 J3DMtxBuffer::createBumpMtxArray(J3DModelData* param_0, u32 param_1) {
nofralloc
#include "asm/JSystem/J3DGraphAnimator/J3DMtxBuffer/createBumpMtxArray__12J3DMtxBufferFP12J3DModelDataUl.s"
}
@ -203,12 +255,23 @@ asm void J3DMtxBuffer::calcBBoardMtx() {
/* 80327048-80327100 321988 00B8+00 1/1 1/1 0/0 .text
* J3DCalcViewBaseMtx__FPA4_fRC3VecRA3_A4_CfPA4_f */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DCalcViewBaseMtx(f32 (*param_0)[4], Vec const& param_1, f32 const (&param_2)[3][4],
f32 (*param_3)[4]) {
nofralloc
#include "asm/JSystem/J3DGraphAnimator/J3DMtxBuffer/J3DCalcViewBaseMtx__FPA4_fRC3VecRA3_A4_CfPA4_f.s"
void J3DCalcViewBaseMtx(Mtx view, Vec const& scale, const Mtx& base, Mtx dst) {
Mtx m;
m[0][0] = base[0][0] * scale.x;
m[0][1] = base[0][1] * scale.y;
m[0][2] = base[0][2] * scale.z;
m[0][3] = base[0][3];
m[1][0] = base[1][0] * scale.x;
m[1][1] = base[1][1] * scale.y;
m[1][2] = base[1][2] * scale.z;
m[1][3] = base[1][3];
m[2][0] = base[2][0] * scale.x;
m[2][1] = base[2][1] * scale.y;
m[2][2] = base[2][2] * scale.z;
m[2][3] = base[2][3];
PSMTXConcat(view, m, dst);
}
#pragma pop