summaryrefslogtreecommitdiff
path: root/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2025-09-04 07:56:59 -0700
committerGitHub <noreply@github.com>2025-09-04 17:56:59 +0300
commitb45a089e15d79821b07be020db628e01a49b1fd2 (patch)
tree948057548cc19b19d644bd4f300ca6434e6bff11 /src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp
parentee8b843996f4d888903f8c125b95ec1af376877e (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.cpp119
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;