diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2025-09-04 07:56:59 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-04 17:56:59 +0300 |
| commit | b45a089e15d79821b07be020db628e01a49b1fd2 (patch) | |
| tree | 948057548cc19b19d644bd4f300ca6434e6bff11 /src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp | |
| parent | ee8b843996f4d888903f8c125b95ec1af376877e (diff) | |
some J3D/misc cleanup (#2628)
* some j3d cleanup
* begin using uintptr_t
* j3dgraphbase cleanup
* j3dgraphanimator cleanup
Diffstat (limited to 'src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp')
| -rw-r--r-- | src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp | 119 |
1 files changed, 62 insertions, 57 deletions
diff --git a/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp b/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp index ab4bdc7937..f1382d196d 100644 --- a/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp @@ -1,13 +1,7 @@ -// -// Generated By: dol2asm -// Translation Unit: J3DMtxBuffer -// - #include "JSystem/J3DGraphAnimator/J3DMtxBuffer.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "JSystem/J3DGraphLoader/J3DModelLoader.h" #include "JSystem/JKernel/JKRHeap.h" -#include "JSystem/JUtility/JUTAssert.h" /* 804371C0-804371F0 063EE0 0030+00 1/0 0/0 0/0 .bss sNoUseDrawMtx__12J3DMtxBuffer */ Mtx J3DMtxBuffer::sNoUseDrawMtx; @@ -43,7 +37,7 @@ void J3DMtxBuffer::initialize() { mpNrmMtxArr[1] = NULL; mpBumpMtxArr[0] = NULL; mpBumpMtxArr[1] = NULL; - mFlags = 1; + mMtxNum = 1; mCurrentViewNo = 0; mpUserAnmMtx = NULL; } @@ -54,33 +48,33 @@ enum { J3DMdlDataFlag_NoAnimation = 0x100, }; -s32 J3DMtxBuffer::create(J3DModelData* p_modelData, u32 flag) { - J3D_ASSERT(76, p_modelData, "Error : null pointer."); - J3D_ASSERT(77, flag, "Error : non-zero argument is specified 0."); +s32 J3DMtxBuffer::create(J3DModelData* pModelData, u32 mtxNum) { + J3D_ASSERT_NULLPTR(76, pModelData != NULL); + J3D_ASSERT_NONZEROARG(77, mtxNum != 0); - s32 ret = 0; - mFlags = flag; - mJointTree = &p_modelData->getJointTree(); + s32 ret = kJ3DError_Success; + mMtxNum = mtxNum; + mJointTree = &pModelData->getJointTree(); - ret = createAnmMtx(p_modelData); + ret = createAnmMtx(pModelData); if (ret != kJ3DError_Success) return ret; - ret = createWeightEnvelopeMtx(p_modelData); + ret = createWeightEnvelopeMtx(pModelData); if (ret != kJ3DError_Success) return ret; - if (p_modelData->checkFlag(J3DMdlDataFlag_NoAnimation)) { + if (pModelData->checkFlag(J3DMdlDataFlag_NoAnimation)) { setNoUseDrawMtx(); } else { - u32 loadType = getMdlDataFlag_MtxLoadType(p_modelData->getFlag()); + u32 loadType = getMdlDataFlag_MtxLoadType(pModelData->getFlag()); switch (loadType) { case J3DMdlDataFlag_ConcatView: ret = setNoUseDrawMtx(); break; case 0: default: - ret = createDoubleDrawMtx(p_modelData, flag); + ret = createDoubleDrawMtx(pModelData, mtxNum); break; } } @@ -88,10 +82,10 @@ s32 J3DMtxBuffer::create(J3DModelData* p_modelData, u32 flag) { if (ret != kJ3DError_Success) return ret; - if (p_modelData->getFlag() & J3DMdlDataFlag_ConcatView) { - p_modelData->setBumpFlag(0); + if (pModelData->getFlag() & J3DMdlDataFlag_ConcatView) { + pModelData->setBumpFlag(0); } else { - ret = createBumpMtxArray(p_modelData, flag); + ret = createBumpMtxArray(pModelData, mtxNum); if (ret != kJ3DError_Success) return ret; @@ -102,10 +96,10 @@ s32 J3DMtxBuffer::create(J3DModelData* p_modelData, u32 flag) { /* 80326364-803263F0 320CA4 008C+00 1/1 0/0 0/0 .text createAnmMtx__12J3DMtxBufferFP12J3DModelData */ - J3DError J3DMtxBuffer::createAnmMtx(J3DModelData* p_modelData) { - if (p_modelData->getJointNum() != 0) { - mpScaleFlagArr = new u8[p_modelData->getJointNum()]; - mpAnmMtx = new Mtx[p_modelData->getJointNum()]; +J3DError J3DMtxBuffer::createAnmMtx(J3DModelData* pModelData) { + if (pModelData->getJointNum() != 0) { + mpScaleFlagArr = new u8[pModelData->getJointNum()]; + mpAnmMtx = new Mtx[pModelData->getJointNum()]; mpUserAnmMtx = mpAnmMtx; } @@ -115,20 +109,21 @@ s32 J3DMtxBuffer::create(J3DModelData* p_modelData, u32 flag) { if (mpAnmMtx == NULL) { return kJ3DError_Alloc; } + return kJ3DError_Success; } /* 803263F0-8032648C 320D30 009C+00 1/1 0/0 0/0 .text * createWeightEnvelopeMtx__12J3DMtxBufferFP12J3DModelData */ -s32 J3DMtxBuffer::createWeightEnvelopeMtx(J3DModelData* p_modelData) { - if (p_modelData->getWEvlpMtxNum() != 0) { - mpEvlpScaleFlagArr = new u8[p_modelData->getWEvlpMtxNum()]; - mpWeightEvlpMtx = new Mtx[p_modelData->getWEvlpMtxNum()]; +s32 J3DMtxBuffer::createWeightEnvelopeMtx(J3DModelData* pModelData) { + if (pModelData->getWEvlpMtxNum() != 0) { + mpEvlpScaleFlagArr = new u8[pModelData->getWEvlpMtxNum()]; + mpWeightEvlpMtx = new Mtx[pModelData->getWEvlpMtxNum()]; } - if (p_modelData->getWEvlpMtxNum() != 0 && mpEvlpScaleFlagArr == NULL) + if (pModelData->getWEvlpMtxNum() != 0 && mpEvlpScaleFlagArr == NULL) return kJ3DError_Alloc; - if (p_modelData->getWEvlpMtxNum() != 0 && mpWeightEvlpMtx == NULL) + if (pModelData->getWEvlpMtxNum() != 0 && mpWeightEvlpMtx == NULL) return kJ3DError_Alloc; return kJ3DError_Success; @@ -145,16 +140,16 @@ s32 J3DMtxBuffer::setNoUseDrawMtx() { /* 803264B8-80326664 320DF8 01AC+00 1/1 0/0 0/0 .text * createDoubleDrawMtx__12J3DMtxBufferFP12J3DModelDataUl */ -s32 J3DMtxBuffer::createDoubleDrawMtx(J3DModelData* p_modelData, u32 num) { - if (num != 0) { +s32 J3DMtxBuffer::createDoubleDrawMtx(J3DModelData* pModelData, u32 mtxNum) { + if (mtxNum != 0) { for (s32 i = 0; i < 2; i++) { - mpDrawMtxArr[i] = new Mtx*[num]; - mpNrmMtxArr[i] = new Mtx33*[num]; + mpDrawMtxArr[i] = new Mtx*[mtxNum]; + mpNrmMtxArr[i] = new Mtx33*[mtxNum]; mpBumpMtxArr[i] = NULL; } } - if (num != 0) { + if (mtxNum != 0) { for (s32 i = 0; i < 2; i++) { if (mpDrawMtxArr[i] == NULL) return kJ3DError_Alloc; @@ -164,17 +159,17 @@ s32 J3DMtxBuffer::createDoubleDrawMtx(J3DModelData* p_modelData, u32 num) { } for (s32 i = 0; i < 2; i++) { - for (u32 j = 0; j < num; j++) { - if (p_modelData->getDrawMtxNum() != 0) { - mpDrawMtxArr[i][j] = new (0x20) Mtx[p_modelData->getDrawMtxNum()]; - mpNrmMtxArr[i][j] = new (0x20) Mtx33[p_modelData->getDrawMtxNum()]; + for (u32 j = 0; j < mtxNum; j++) { + if (pModelData->getDrawMtxNum() != 0) { + mpDrawMtxArr[i][j] = new (0x20) Mtx[pModelData->getDrawMtxNum()]; + mpNrmMtxArr[i][j] = new (0x20) Mtx33[pModelData->getDrawMtxNum()]; } } } for (s32 i = 0; i < 2; i++) { - for (u32 j = 0; j < num; j++) { - if (p_modelData->getDrawMtxNum() != 0) { + for (u32 j = 0; j < mtxNum; j++) { + if (pModelData->getDrawMtxNum() != 0) { if (mpDrawMtxArr[i][j] == NULL) return kJ3DError_Alloc; if (mpNrmMtxArr[i][j] == NULL) @@ -188,8 +183,9 @@ s32 J3DMtxBuffer::createDoubleDrawMtx(J3DModelData* p_modelData, u32 num) { /* 80326664-803268D4 320FA4 0270+00 1/1 0/0 0/0 .text * createBumpMtxArray__12J3DMtxBufferFP12J3DModelDataUl */ -s32 J3DMtxBuffer::createBumpMtxArray(J3DModelData* i_modelData, u32 param_1) { - J3D_ASSERT(295, i_modelData, "Error : null pointer."); +s32 J3DMtxBuffer::createBumpMtxArray(J3DModelData* i_modelData, u32 mtxNum) { + J3D_ASSERT_NULLPTR(295, i_modelData != NULL); + if (i_modelData->getModelDataType() == 0) { u16 bumpMtxNum = 0; u16 materialCount = 0; @@ -202,7 +198,7 @@ s32 J3DMtxBuffer::createBumpMtxArray(J3DModelData* i_modelData, u32 param_1) { } } - if (bumpMtxNum != 0 && param_1 != 0) { + if (bumpMtxNum != 0 && mtxNum != 0) { for (int i = 0; i < 2; i++) { mpBumpMtxArr[i] = new Mtx33**[(u16)materialCount]; if (mpBumpMtxArr[i] == NULL) { @@ -217,7 +213,7 @@ s32 J3DMtxBuffer::createBumpMtxArray(J3DModelData* i_modelData, u32 param_1) { for (u16 j = 0; j < materialNum; j++) { J3DMaterial* material = i_modelData->getMaterialNodePointer(j); if (material->getNBTScale()->mbHasScale == true) { - mpBumpMtxArr[i][offset] = new Mtx33*[param_1]; + mpBumpMtxArr[i][offset] = new Mtx33*[mtxNum]; if (mpBumpMtxArr[i][offset] == NULL) { return kJ3DError_Alloc; } @@ -233,7 +229,7 @@ s32 J3DMtxBuffer::createBumpMtxArray(J3DModelData* i_modelData, u32 param_1) { for (u16 j = 0; j < materialNum; j++) { J3DMaterial* material = i_modelData->getMaterialNodePointer((u16)j); if (material->getNBTScale()->mbHasScale == true) { - for (int k = 0; k < param_1; k++) { + for (int k = 0; k < mtxNum; k++) { mpBumpMtxArr[i][offset][k] = new (0x20) Mtx33[i_modelData->getDrawMtxNum()]; if (mpBumpMtxArr[i][offset][k] == NULL) { return kJ3DError_Alloc; @@ -273,10 +269,12 @@ void J3DMtxBuffer::calcWeightEnvelopeMtx() { f32* weights; u8* pScale; Mtx mtx; + i = -1; max = mJointTree->getWEvlpMtxNum(); indices = mJointTree->getWEvlpMixMtxIndex() - 1; weights = mJointTree->getWEvlpMixWeight() - 1; + while (++i < max) { pScale = &mpEvlpScaleFlagArr[i]; *pScale = 1; @@ -284,6 +282,7 @@ void J3DMtxBuffer::calcWeightEnvelopeMtx() { weightAnmMtx[0][0] = weightAnmMtx[0][1] = weightAnmMtx[0][2] = weightAnmMtx[0][3] = weightAnmMtx[1][0] = weightAnmMtx[1][1] = weightAnmMtx[1][2] = weightAnmMtx[1][3] = weightAnmMtx[2][0] = weightAnmMtx[2][1] = weightAnmMtx[2][2] = weightAnmMtx[2][3] = 0.0f; + j = 0; mixNum = mJointTree->getWEvlpMixMtxNum(i); do { @@ -291,6 +290,7 @@ void J3DMtxBuffer::calcWeightEnvelopeMtx() { worldMtx = &mpAnmMtx[idx]; invMtx = &mJointTree->getInvJointMtx((u16)idx); MTXConcat(*worldMtx, *invMtx, mtx); + weight = *++weights; weightAnmMtx[0][0] += mtx[0][0] * weight; weightAnmMtx[0][1] += mtx[0][1] * weight; @@ -304,6 +304,7 @@ void J3DMtxBuffer::calcWeightEnvelopeMtx() { weightAnmMtx[2][1] += mtx[2][1] * weight; weightAnmMtx[2][2] += mtx[2][2] * weight; weightAnmMtx[2][3] += mtx[2][3] * weight; + *pScale &= mpScaleFlagArr[idx]; } while (++j < mixNum); } @@ -311,12 +312,17 @@ void J3DMtxBuffer::calcWeightEnvelopeMtx() { /* 80326ACC-80326D3C 32140C 0270+00 0/0 1/1 0/0 .text * calcDrawMtx__12J3DMtxBufferFUlRC3VecRA3_A4_Cf */ -void J3DMtxBuffer::calcDrawMtx(u32 param_0, Vec const& param_1, Mtx const& param_2) { +void J3DMtxBuffer::calcDrawMtx(u32 mdlFlag, Vec const& param_1, Mtx const& param_2) { + Mtx* sp24, *sp20; + int sp1C = 0; + sp20 = mpAnmMtx; + sp24 = mpWeightEvlpMtx; + MtxP viewMtx; Mtx viewBaseMtx; u16 fullWgtNum; - switch (param_0) { + switch (mdlFlag) { case 0: viewMtx = j3dSys.getViewMtx(); fullWgtNum = mJointTree->getDrawFullWgtMtxNum(); @@ -327,8 +333,7 @@ void J3DMtxBuffer::calcDrawMtx(u32 param_0, Vec const& param_1, Mtx const& param J3DPSMtxArrayConcat(viewMtx, *mpWeightEvlpMtx, *getDrawMtx(fullWgtNum), mJointTree->getWEvlpMtxNum()); } - break; - + return; case 1: fullWgtNum = mJointTree->getDrawFullWgtMtxNum(); for (u16 i = 0; i < fullWgtNum; i++) { @@ -339,7 +344,6 @@ void J3DMtxBuffer::calcDrawMtx(u32 param_0, Vec const& param_1, Mtx const& param MTXCopy(getWeightAnmMtx(i), *getDrawMtx(mJointTree->getDrawFullWgtMtxNum() + i)); } break; - case 2: J3DCalcViewBaseMtx(j3dSys.getViewMtx(), param_1, param_2, viewBaseMtx); fullWgtNum = mJointTree->getDrawFullWgtMtxNum(); @@ -351,25 +355,25 @@ void J3DMtxBuffer::calcDrawMtx(u32 param_0, Vec const& param_1, Mtx const& param *getDrawMtx(mJointTree->getDrawFullWgtMtxNum()), mJointTree->getWEvlpMtxNum()); } - break; + return; + default: + JUT_ASSERT_MSG(778, 0, "Error : model flag is invalid.") } } -extern void J3DPSCalcInverseTranspose(Mtx p1, Mtx33 p2); - /* 80326D3C-80326EF0 32167C 01B4+00 0/0 1/1 0/0 .text calcNrmMtx__12J3DMtxBufferFv */ void J3DMtxBuffer::calcNrmMtx() { u16 drawMtxNum = mJointTree->getDrawMtxNum(); for (u16 i = 0; i < drawMtxNum; i++) { if (mJointTree->getDrawMtxFlag(i) == 0) { if (getScaleFlag(mJointTree->getDrawMtxIndex(i)) == 1) { - setNrmMtx(i, getDrawMtx(i)); + setNrmMtx(i, *getDrawMtx(i)); } else { J3DPSCalcInverseTranspose(*getDrawMtx(i), *getNrmMtx(i)); } } else { if (getEnvScaleFlag(mJointTree->getDrawMtxIndex(i)) == 1) { - setNrmMtx(i, getDrawMtx(i)); + setNrmMtx(i, *getDrawMtx(i)); } else { J3DPSCalcInverseTranspose(*getDrawMtx(i), *getNrmMtx(i)); } @@ -386,6 +390,7 @@ void J3DMtxBuffer::calcBBoardMtx() { if (mJointTree->getJointNodePointer(index)->getMtxType() == 1) { MtxP drawMtx = *getDrawMtx(i); J3DCalcBBoardMtx(drawMtx); + Mtx33* nrmMtx = getNrmMtx(i); (*nrmMtx)[0][0] = 1.0f / drawMtx[0][0]; (*nrmMtx)[0][1] = 0.0f; |
