work on J3DShapeMtx (#2002)

* work on J3DShapeMtx

* update Progress.md
This commit is contained in:
Caroline Madsen
2023-12-12 23:42:38 -05:00
committed by GitHub
parent 6eb299f0c3
commit e7a6eb10b5
25 changed files with 485 additions and 1367 deletions
+408 -439
View File
@@ -6,6 +6,7 @@
#include "JSystem/J3DGraphBase/J3DShapeMtx.h"
#include "JSystem/J3DGraphAnimator/J3DModel.h"
#include "JSystem/J3DGraphBase/J3DGD.h"
#include "JSystem/J3DGraphBase/J3DMatBlock.h"
#include "dol2asm.h"
#include "dolphin/types.h"
@@ -155,146 +156,32 @@ void J3DShapeMtx::loadMtxIndx_PNCPU(int slot, u16 indx) const {
J3DFifoLoadNrmMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3);
}
/* ############################################################################################## */
/* 803CD990-803CD99C -00001 000C+00 1/1 0/0 0/0 .data @832 */
SECTION_DATA static void* lit_832[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)loadMtxIndx_PNGP__11J3DShapeMtxCFiUs,
};
/* 803CD99C-803CD9A8 -00001 000C+00 0/1 0/0 0/0 .data @833 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_833[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)loadMtxIndx_PCPU__11J3DShapeMtxCFiUs,
};
#pragma pop
/* 803CD9A8-803CD9B4 -00001 000C+00 0/1 0/0 0/0 .data @834 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_834[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)loadMtxIndx_NCPU__11J3DShapeMtxCFiUs,
};
#pragma pop
/* 803CD9B4-803CD9C0 -00001 000C+00 0/1 0/0 0/0 .data @835 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_835[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)loadMtxIndx_PNCPU__11J3DShapeMtxCFiUs,
};
#pragma pop
/* 803CD9C0-803CD9F0 02AAE0 0030+00 2/3 0/0 0/0 .data sMtxLoadPipeline__11J3DShapeMtx */
SECTION_DATA u8 J3DShapeMtx::sMtxLoadPipeline[48] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
J3DShapeMtx_LoadFunc J3DShapeMtx::sMtxLoadPipeline[4] = {
&loadMtxIndx_PNGP,
&loadMtxIndx_PCPU,
&loadMtxIndx_NCPU,
&loadMtxIndx_PNCPU,
};
/* 803CD9F0-803CD9FC -00001 000C+00 0/1 0/0 0/0 .data @836 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_836[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)loadMtxConcatView_PNGP__21J3DShapeMtxConcatViewCFiUs,
};
#pragma pop
/* 803CD9FC-803CDA08 -00001 000C+00 0/1 0/0 0/0 .data @837 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_837[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)loadMtxConcatView_PCPU__21J3DShapeMtxConcatViewCFiUs,
};
#pragma pop
/* 803CDA08-803CDA14 -00001 000C+00 0/1 0/0 0/0 .data @838 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_838[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)loadMtxConcatView_NCPU__21J3DShapeMtxConcatViewCFiUs,
};
#pragma pop
/* 803CDA14-803CDA20 -00001 000C+00 0/1 0/0 0/0 .data @839 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_839[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)loadMtxConcatView_PNCPU__21J3DShapeMtxConcatViewCFiUs,
};
#pragma pop
/* 803CDA20-803CDA50 02AB40 0030+00 2/3 0/0 0/0 .data sMtxLoadPipeline__21J3DShapeMtxConcatView */
SECTION_DATA u8 J3DShapeMtxConcatView::sMtxLoadPipeline[48] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
J3DShapeMtxConcatView_LoadFunc J3DShapeMtxConcatView::sMtxLoadPipeline[4] = {
&loadMtxConcatView_PNGP,
&loadMtxConcatView_PCPU,
&loadMtxConcatView_NCPU,
&loadMtxConcatView_PNCPU,
};
/* 803CDA50-803CDA5C -00001 000C+00 0/1 0/0 0/0 .data @840 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_840[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)loadMtxConcatView_PNGP_LOD__21J3DShapeMtxConcatViewCFiUs,
};
#pragma pop
/* 803CDA5C-803CDA68 -00001 000C+00 0/1 0/0 0/0 .data @841 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_841[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)loadMtxConcatView_PCPU__21J3DShapeMtxConcatViewCFiUs,
};
#pragma pop
/* 803CDA68-803CDA74 -00001 000C+00 0/1 0/0 0/0 .data @842 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_842[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)loadMtxConcatView_NCPU__21J3DShapeMtxConcatViewCFiUs,
};
#pragma pop
/* 803CDA74-803CDA80 -00001 000C+00 0/1 0/0 0/0 .data @843 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_843[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)loadMtxConcatView_PNCPU__21J3DShapeMtxConcatViewCFiUs,
};
#pragma pop
/* 803CDA80-803CDAB0 02ABA0 0030+00 1/2 0/0 0/0 .data sMtxLoadLODPipeline__21J3DShapeMtxConcatView
*/
SECTION_DATA u8 J3DShapeMtxConcatView::sMtxLoadLODPipeline[48] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
J3DShapeMtxConcatView_LoadFunc J3DShapeMtxConcatView::sMtxLoadLODPipeline[4] = {
&loadMtxConcatView_PNGP_LOD,
&loadMtxConcatView_PCPU,
&loadMtxConcatView_NCPU,
&loadMtxConcatView_PNCPU,
};
#ifndef NONMATCHING
/* 803CDAB0-803CDAE0 02ABD0 0030+00 1/1 0/0 0/0 .data qMtx$895 */
SECTION_DATA static u8 qMtx[48] = {
0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -340,6 +227,7 @@ SECTION_DATA static void* lit_1034[12] = {
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x224),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x190),
};
#endif
/* 804515A8-804515AC 000AA8 0004+00 4/4 2/2 0/0 .sbss sCurrentPipeline__11J3DShapeMtx */
u32 J3DShapeMtx::sCurrentPipeline;
@@ -352,17 +240,16 @@ u8* J3DShapeMtx::sCurrentScaleFlag;
/* 804515B0-804515B4 -00001 0004+00 5/5 3/3 0/0 .sbss None */
/* 804515B0 0001+00 data_804515B0 None */
/* 804515B1 0003+00 data_804515B1 None */
u8 struct_804515B0;
u8 struct_804515B1;
u8 struct_804515B2;
u8 struct_804515B3;
extern u8 struct_804515B0; // temporary
u8 J3DShapeMtx::sNBTFlag;
u8 J3DShapeMtx::sLODFlag;
/* 804515B4-804515B8 000AB4 0004+00 4/4 1/1 0/0 .sbss sTexMtxLoadType__11J3DShapeMtx */
u32 J3DShapeMtx::sTexMtxLoadType;
/* 804515B8-804515C0 000AB8 0008+00 2/2 0/0 0/0 .sbss sMtxPtrTbl__21J3DShapeMtxConcatView
*/
u8 J3DShapeMtxConcatView::sMtxPtrTbl[8];
MtxP J3DShapeMtxConcatView::sMtxPtrTbl[2];
/* 804515C0-804515C4 000AC0 0004+00 6/6 2/2 0/0 .sbss sTexGenBlock__17J3DDifferedTexMtx
*/
@@ -380,6 +267,208 @@ SECTION_SDATA2 static u8 lit_1032[4] = {
};
/* 8031322C-80313828 30DB6C 05FC+00 7/5 0/0 0/0 .text loadExecute__17J3DDifferedTexMtxFPA4_Cf */
#ifdef NONMATCHING
void J3DDifferedTexMtx::loadExecute(f32 const (*param_0)[4]) {
// regalloc
static Mtx qMtx = {
{0.5f, 0.0f, 0.5f, 0.0f},
{0.0f, -0.5f, 0.5f, 0.0f},
{0.0f, 0.0f, 1.0f, 0.0f},
};
static Mtx qMtx2 = {
{0.5f, 0.0f, 0.0f, 0.5f},
{0.0f, -0.5f, 0.0f, 0.5f},
{0.0f, 0.0f, 1.0f, 0.0f}
};
J3DTexCoord* tex_coord;
J3DTexMtx* tex_mtx;
Mtx* mtx;
Mtx44* eff_mtx;
Mtx tmp2;
Mtx44 tmp1, tmp0;
J3DTexMtxInfo* tex_mtx_info;
J3DTexGenBlock* tex_gen_block = sTexGenBlock;
J3DTexMtxObj* tex_mtx_obj = sTexMtxObj;
u16 tex_mtx_num = tex_mtx_obj->getNumTexMtx();
if ((j3dSys.checkFlag(J3DSysFlag_PostTexMtx))) {
for (u16 i = 0; i < (u16)tex_mtx_num; i++) {
tex_coord = tex_gen_block->getTexCoord(i);
int tex_gen_type = tex_coord->getTexGenType();
if (tex_gen_type == 1 || tex_gen_type == 0) {
tex_mtx = tex_gen_block->getTexMtx(i);
u8 tex_gen_src = tex_coord->getTexGenSrc();
u32 unk;
switch (tex_gen_src & 0x3f) {
case 3:
case 9:
mtx = &tex_mtx_obj->getMtx(i);
break;
case 1:
case 6:
case 7:
mtx = &tex_mtx_obj->getMtx(i);
break;
case 2:
case 8:
PSMTXInverse(j3dSys.mViewMtx, tmp2);
PSMTXConcat(tex_mtx_obj->getMtx(i), tmp2, tmp2);
mtx = &tmp2;
break;
case 5:
tex_mtx_info = &tex_mtx->getTexMtxInfo();
unk = (tex_gen_src & 0x80) >> 7;
if (unk == 0) {
J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
} else if (unk == 1) {
J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
}
eff_mtx = &tex_mtx_obj->getEffectMtx(i);
J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
PSMTXInverse(j3dSys.mViewMtx, tmp1);
PSMTXConcat(tmp2, tmp1, tmp2);
tmp2[2][3] = 0.0f;
tmp2[1][3] = 0.0f;
tmp2[0][3] = 0.0f;
mtx = &tmp2;
break;
case 10:
tex_mtx_info = &tex_mtx->getTexMtxInfo();
unk = (tex_gen_src & 0x80) >> 7;
if (unk == 0) {
J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
} else if (unk == 1) {
J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
}
PSMTXConcat(tmp0, qMtx2, tmp0);
eff_mtx = &tex_mtx_obj->getEffectMtx(i);
J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
PSMTXInverse(j3dSys.mViewMtx, tmp1);
PSMTXConcat(tmp2, tmp1, tmp2);
tmp2[2][3] = 0.0f;
tmp2[1][3] = 0.0f;
tmp2[0][3] = 0.0f;
mtx = &tmp2;
break;
case 11:
tex_mtx_info = &tex_mtx->getTexMtxInfo();
unk = (tex_gen_src & 0x80) >> 7;
if (unk == 0) {
J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
} else if (unk == 1) {
J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
}
PSMTXConcat(tmp0, qMtx, tmp0);
eff_mtx = &tex_mtx_obj->getEffectMtx(i);
J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
PSMTXInverse(j3dSys.mViewMtx, tmp1);
PSMTXConcat(tmp2, tmp1, tmp2);
tmp2[2][3] = 0.0f;
tmp2[1][3] = 0.0f;
tmp2[0][3] = 0.0f;
mtx = &tmp2;
break;
default:
mtx = &tex_mtx_obj->getMtx(i);
break;
}
GXLoadTexMtxImm(*mtx, i * 3 + 0x40, GX_MTX3x4);
}
}
} else {
for (u16 i = 0; i < (u16)tex_mtx_num; i++) {
tex_coord = tex_gen_block->getTexCoord(i);
int tex_gen_type = tex_coord->getTexGenType();
if (tex_gen_type == 1 || tex_gen_type == 0) {
tex_mtx = tex_gen_block->getTexMtx(i);
u8 tex_gen_src = tex_coord->getTexGenSrc();
u32 unk;
switch (tex_gen_src & 0x3f) {
case 3:
case 9:
PSMTXConcat(tex_mtx_obj->getMtx(i), param_0, tmp2);
mtx = &tmp2;
break;
case 1:
case 6:
case 7:
PSMTXCopy(param_0, tmp1);
tmp1[2][3] = 0.0f;
tmp1[1][3] = 0.0f;
tmp1[0][3] = 0.0f;
PSMTXConcat(tex_mtx_obj->getMtx(i), tmp1, tmp2);
mtx = &tmp2;
break;
case 2:
case 8:
mtx = &tex_mtx_obj->getMtx(i);
break;
case 5:
tex_mtx_info = &tex_mtx->getTexMtxInfo();
unk = (tex_gen_src & 0x80) >> 7;
if (unk == 0) {
J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
} else if (unk == 1) {
J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
}
eff_mtx = &tex_mtx_obj->getEffectMtx(i);
J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
PSMTXInverse(j3dSys.mViewMtx, tmp1);
PSMTXConcat(tmp2, tmp1, tmp2);
PSMTXConcat(tmp2, param_0, tmp2);
tmp2[2][3] = 0.0f;
tmp2[1][3] = 0.0f;
tmp2[0][3] = 0.0f;
mtx = &tmp2;
break;
case 10:
tex_mtx_info = &tex_mtx->getTexMtxInfo();
unk = (tex_gen_src & 0x80) >> 7;
if (unk == 0) {
J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
} else if (unk == 1) {
J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
}
PSMTXConcat(tmp0, qMtx2, tmp0);
eff_mtx = &tex_mtx_obj->getEffectMtx(i);
J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
PSMTXInverse(j3dSys.mViewMtx, tmp1);
PSMTXConcat(tmp2, tmp1, tmp2);
PSMTXConcat(tmp2, param_0, tmp2);
tmp2[2][3] = 0.0f;
tmp2[1][3] = 0.0f;
tmp2[0][3] = 0.0f;
mtx = &tmp2;
break;
case 11:
tex_mtx_info = &tex_mtx->getTexMtxInfo();
unk = (tex_gen_src & 0x80) >> 7;
if (unk == 0) {
J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
} else if (unk == 1) {
J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
}
PSMTXConcat(tmp0, qMtx, tmp0);
eff_mtx = &tex_mtx_obj->getEffectMtx(i);
J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
PSMTXInverse(j3dSys.mViewMtx, tmp1);
PSMTXConcat(tmp2, tmp1, tmp2);
PSMTXConcat(tmp2, param_0, tmp2);
tmp2[2][3] = 0.0f;
tmp2[1][3] = 0.0f;
tmp2[0][3] = 0.0f;
mtx = &tmp2;
break;
default:
mtx = &tex_mtx_obj->getMtx(i);
break;
}
GXLoadTexMtxImm(*mtx, i * 3 + 0x1e,
(GXTexMtxType)tex_mtx->getTexMtxInfo().mProjection);
}
}
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -388,6 +477,7 @@ asm void J3DDifferedTexMtx::loadExecute(f32 const (*param_0)[4]) {
#include "asm/JSystem/J3DGraphBase/J3DShapeMtx/loadExecute__17J3DDifferedTexMtxFPA4_Cf.s"
}
#pragma pop
#endif
/* 80313828-803138C8 30E168 00A0+00 1/0 0/0 0/0 .text
* loadMtxConcatView_PNGP__21J3DShapeMtxConcatViewCFiUs */
@@ -447,113 +537,221 @@ void J3DShapeMtxConcatView::loadMtxConcatView_PNGP_LOD(int slot, u16 drw) const
}
/* 80313B94-80313BF0 30E4D4 005C+00 1/0 0/0 0/0 .text load__11J3DShapeMtxCFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DShapeMtx::load() const {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShapeMtx/load__11J3DShapeMtxCFv.s"
void J3DShapeMtx::load() const {
J3DShapeMtx_LoadFunc func = sMtxLoadPipeline[sCurrentPipeline];
(this->*func)(0, mUseMtxIndex);
}
#pragma pop
/* 80313BF0-80313C54 30E530 0064+00 5/0 0/0 0/0 .text
* calcNBTScale__11J3DShapeMtxFRC3VecPA3_A3_fPA3_A3_f */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DShapeMtx::calcNBTScale(Vec const& param_0, f32 (*param_1)[3][3], f32 (*param_2)[3][3]) {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShapeMtx/calcNBTScale__11J3DShapeMtxFRC3VecPA3_A3_fPA3_A3_f.s"
void J3DShapeMtx::calcNBTScale(Vec const& param_0, Mtx33* param_1, Mtx33* param_2) {
J3DPSMtx33Copy(param_1[mUseMtxIndex], param_2[mUseMtxIndex]);
J3DScaleNrmMtx33(param_2[mUseMtxIndex], param_0);
}
#pragma pop
/* 80313C54-80313D28 30E594 00D4+00 1/0 0/0 0/0 .text load__21J3DShapeMtxConcatViewCFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DShapeMtxConcatView::load() const {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShapeMtx/load__21J3DShapeMtxConcatViewCFv.s"
void J3DShapeMtxConcatView::load() const {
sMtxPtrTbl[0] = j3dSys.getModel()->getMtxBuffer()->getUserAnmMtx(0);
sMtxPtrTbl[1] = j3dSys.getModel()->getMtxBuffer()->getWeightAnmMtx(0);
J3DShapeMtxConcatView_LoadFunc func = sMtxLoadPipeline[sCurrentPipeline];
u32 draw_mtx_flag = j3dSys.getModel()->getModelData()->getDrawMtxFlag(mUseMtxIndex);
j3dSys.setModelDrawMtx((Mtx*)sMtxPtrTbl[draw_mtx_flag]);
u16 draw_mtx_index = j3dSys.getModel()->getModelData()->getDrawMtxIndex(mUseMtxIndex);
(this->*func)(0, draw_mtx_index);
}
#pragma pop
/* 80313D28-80313E4C 30E668 0124+00 3/0 0/0 0/0 .text
* loadNrmMtx__21J3DShapeMtxConcatViewCFiUsPA4_f */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DShapeMtxConcatView::loadNrmMtx(int param_0, u16 param_1, f32 (*param_2)[4]) const {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShapeMtx/loadNrmMtx__21J3DShapeMtxConcatViewCFiUsPA4_f.s"
void J3DShapeMtxConcatView::loadNrmMtx(int param_0, u16 param_1, MtxP param_2) const {
if (sCurrentScaleFlag[param_1] == 1) {
if (sTexMtxLoadType == 0x2000) {
J3DFifoLoadNrmMtxToTexMtx(param_2, 0x1e);
}
if (!sNBTFlag) {
J3DFifoLoadNrmMtxImm(param_2, 0);
} else {
Mtx33 mtx;
Vec* scale = j3dSys.getNBTScale();
J3DPSMtx33CopyFrom34(param_2, mtx);
J3DScaleNrmMtx33(mtx, *scale);
J3DFifoLoadNrmMtxImm3x3(mtx, 0);
}
} else {
Mtx33 mtx;
J3DPSCalcInverseTranspose(param_2, mtx);
if (sTexMtxLoadType == 0x2000) {
J3DFifoLoadNrmMtxToTexMtx3x3(mtx, 0x1e);
}
if (!sNBTFlag) {
J3DFifoLoadNrmMtxImm3x3(mtx, 0);
} else {
Vec* scale = j3dSys.getNBTScale();
J3DScaleNrmMtx33(mtx, *scale);
J3DFifoLoadNrmMtxImm3x3(mtx, 0);
}
}
}
#pragma pop
/* 80313E4C-80313EEC 30E78C 00A0+00 1/0 0/0 0/0 .text load__16J3DShapeMtxMultiCFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DShapeMtxMulti::load() const {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShapeMtx/load__16J3DShapeMtxMultiCFv.s"
void J3DShapeMtxMulti::load() const {
J3DShapeMtx_LoadFunc func = sMtxLoadPipeline[sCurrentPipeline];
int use_mtx_num = mUseMtxNum;
for (int i = 0; i < use_mtx_num; i++) {
u16 use_mtx_index = mUseMtxIndexTable[i];
if (use_mtx_index != 0xffff) {
(this->*func)(i, use_mtx_index);
}
}
}
#pragma pop
/* 80313EEC-80313FA4 30E82C 00B8+00 1/0 0/0 0/0 .text
* calcNBTScale__16J3DShapeMtxMultiFRC3VecPA3_A3_fPA3_A3_f */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DShapeMtxMulti::calcNBTScale(Vec const& param_0, f32 (*param_1)[3][3],
f32 (*param_2)[3][3]) {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShapeMtx/calcNBTScale__16J3DShapeMtxMultiFRC3VecPA3_A3_fPA3_A3_f.s"
void J3DShapeMtxMulti::calcNBTScale(Vec const& param_0, Mtx33* param_1, Mtx33* param_2) {
int use_mtx_num = mUseMtxNum;
for (int i = 0; i < use_mtx_num; i++) {
u16 use_mtx_index = mUseMtxIndexTable[i];
if (use_mtx_index != 0xffff) {
J3DPSMtx33Copy(param_1[use_mtx_index], param_2[use_mtx_index]);
J3DScaleNrmMtx33(param_2[mUseMtxIndexTable[i]], param_0);
}
}
}
#pragma pop
/* 80313FA4-8031419C 30E8E4 01F8+00 1/0 0/0 0/0 .text load__26J3DShapeMtxMultiConcatViewCFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DShapeMtxMultiConcatView::load() const {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShapeMtx/load__26J3DShapeMtxMultiConcatViewCFv.s"
void J3DShapeMtxMultiConcatView::load() const {
sMtxPtrTbl[0] = j3dSys.getModel()->getMtxBuffer()->getUserAnmMtx(0);
sMtxPtrTbl[1] = j3dSys.getModel()->getMtxBuffer()->getWeightAnmMtx(0);
if (!sLODFlag) {
J3DShapeMtxConcatView_LoadFunc func = sMtxLoadPipeline[sCurrentPipeline];
int use_mtx_num = mUseMtxNum;
for (int i = 0; i < use_mtx_num; i++) {
u16 use_mtx_index = mUseMtxIndexTable[i];
if (use_mtx_index != 0xffff) {
u16 draw_mtx_index =
j3dSys.getModel()->getModelData()->getDrawMtxIndex(use_mtx_index);
u8 draw_mtx_flag = j3dSys.getModel()->getModelData()->getDrawMtxFlag(use_mtx_index);
j3dSys.setModelDrawMtx((Mtx*)sMtxPtrTbl[draw_mtx_flag]);
(this->*func)(i, draw_mtx_index);
}
}
} else {
u16* important_mtx_indices = j3dSys.getModel()->getModelData()->getWEvlpImportantMtxIndex();
j3dSys.setModelDrawMtx((Mtx*)sMtxPtrTbl[0]);
int use_mtx_num = mUseMtxNum;
for (int i = 0; i < use_mtx_num; i++) {
u32 current_pipeline = sCurrentPipeline;
J3DShapeMtxConcatView_LoadFunc func = sMtxLoadLODPipeline[current_pipeline];
u16 use_mtx_index = mUseMtxIndexTable[i];
if (use_mtx_index != 0xffff) {
u16 important_mtx_index = important_mtx_indices[use_mtx_index];
if (important_mtx_index != sMtxLoadCache[i]) {
u8 draw_mtx_flag =
j3dSys.getModel()->getModelData()->getDrawMtxFlag(use_mtx_index);
if (draw_mtx_flag == 0) {
func = sMtxLoadPipeline[current_pipeline];
}
(this->*func)(i, important_mtx_index);
sMtxLoadCache[i] = important_mtx_index;
}
}
}
}
}
#pragma pop
/* 8031419C-803142D4 30EADC 0138+00 1/0 0/0 0/0 .text
* loadNrmMtx__26J3DShapeMtxMultiConcatViewCFiUsPA4_f */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DShapeMtxMultiConcatView::loadNrmMtx(int param_0, u16 param_1, f32 (*param_2)[4]) const {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShapeMtx/loadNrmMtx__26J3DShapeMtxMultiConcatViewCFiUsPA4_f.s"
void J3DShapeMtxMultiConcatView::loadNrmMtx(int param_0, u16 param_1, MtxP param_2) const {
Mtx33 mtx1, mtx2;
if (sCurrentScaleFlag[param_1] == 1) {
if (sTexMtxLoadType == 0x2000) {
J3DFifoLoadNrmMtxToTexMtx(param_2, param_0 * 3 + 0x1e);
}
if (!sNBTFlag) {
J3DFifoLoadNrmMtxImm(param_2, param_0 * 3);
} else {
Vec* nbt_scale = j3dSys.getNBTScale();
J3DPSMtx33CopyFrom34(param_2, mtx1);
J3DScaleNrmMtx33(mtx1, *nbt_scale);
J3DFifoLoadNrmMtxImm3x3(mtx1, 0);
}
} else {
J3DPSCalcInverseTranspose(param_2, mtx2);
if (sTexMtxLoadType == 0x2000) {
J3DFifoLoadNrmMtxToTexMtx3x3(mtx2, param_0 * 3 + 0x1e);
}
if (!sNBTFlag) {
J3DFifoLoadNrmMtxImm3x3(mtx2, param_0 * 3);
} else {
Vec* nbt_scale = j3dSys.getNBTScale();
J3DScaleNrmMtx33(mtx2, *nbt_scale);
J3DFifoLoadNrmMtxImm3x3(mtx2, param_0 * 3);
}
}
}
#pragma pop
/* ############################################################################################## */
/* 8045639C-804563A0 00499C 0004+00 1/1 0/0 0/0 .sdata2 @1423 */
SECTION_SDATA2 static f32 lit_1423 = 1.0f;
/* 803142D4-803143E4 30EC14 0110+00 1/0 0/0 0/0 .text load__27J3DShapeMtxBBoardConcatViewCFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DShapeMtxBBoardConcatView::load() const {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShapeMtx/load__27J3DShapeMtxBBoardConcatViewCFv.s"
void J3DShapeMtxBBoardConcatView::load() const {
Mtx mtx;
u16 draw_mtx_index = j3dSys.getModel()->getModelData()->getDrawMtxIndex(mUseMtxIndex);
u8 draw_mtx_flag = j3dSys.getModel()->getModelData()->getDrawMtxFlag(mUseMtxIndex);
if (draw_mtx_flag == 0) {
MtxP user_anm_mtx = j3dSys.getModel()->getMtxBuffer()->getUserAnmMtx(draw_mtx_index);
PSMTXConcat(j3dSys.getViewMtx(), user_anm_mtx, mtx);
} else {
MtxP weight_anm_mtx = j3dSys.getModel()->getMtxBuffer()->getWeightAnmMtx(draw_mtx_index);
PSMTXConcat(j3dSys.getViewMtx(), weight_anm_mtx, mtx);
}
J3DCalcBBoardMtx(mtx);
J3DFifoLoadPosMtxImm(mtx, 0);
mtx[0][0] = 1.0f / mtx[0][0];
mtx[1][1] = 1.0f / mtx[1][1];
mtx[2][2] = 1.0f / mtx[2][2];
mtx[0][3] = FLOAT_LABEL(lit_1032); // 0.0f;
mtx[1][3] = FLOAT_LABEL(lit_1032); // 0.0f;
mtx[2][3] = FLOAT_LABEL(lit_1032); // 0.0f;
if (!sNBTFlag) {
J3DFifoLoadNrmMtxImm(mtx, 0);
} else {
Vec* nbt_scale = j3dSys.getNBTScale();
J3DScaleNrmMtx(mtx, *nbt_scale);
J3DFifoLoadNrmMtxImm(mtx, 0);
}
}
#pragma pop
/* 803143E4-80314520 30ED24 013C+00 1/0 0/0 0/0 .text load__28J3DShapeMtxYBBoardConcatViewCFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DShapeMtxYBBoardConcatView::load() const {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShapeMtx/load__28J3DShapeMtxYBBoardConcatViewCFv.s"
void J3DShapeMtxYBBoardConcatView::load() const {
Mtx mtx1;
Mtx33 mtx2;
u16 draw_mtx_index = j3dSys.getModel()->getModelData()->getDrawMtxIndex(mUseMtxIndex);
u8 draw_mtx_flag = j3dSys.getModel()->getModelData()->getDrawMtxFlag(mUseMtxIndex);
if (draw_mtx_flag == 0) {
MtxP user_anm_mtx = j3dSys.getModel()->getMtxBuffer()->getUserAnmMtx(draw_mtx_index);
PSMTXConcat(j3dSys.getViewMtx(), user_anm_mtx, mtx1);
} else {
MtxP weight_anm_mtx = j3dSys.getModel()->getMtxBuffer()->getWeightAnmMtx(draw_mtx_index);
PSMTXConcat(j3dSys.getViewMtx(), weight_anm_mtx, mtx1);
}
J3DCalcYBBoardMtx(mtx1);
J3DFifoLoadPosMtxImm(mtx1, 0);
if (sCurrentScaleFlag[mUseMtxIndex] == 1) {
if (!sNBTFlag) {
J3DFifoLoadNrmMtxImm(mtx1, 0);
} else {
Vec* nbt_scale = j3dSys.getNBTScale();
J3DScaleNrmMtx(mtx1, *nbt_scale);
J3DFifoLoadNrmMtxImm(mtx1, 0);
}
} else {
J3DPSCalcInverseTranspose(mtx1, mtx2);
if (!sNBTFlag) {
J3DFifoLoadNrmMtxImm3x3(mtx2, 0);
} else {
Vec* nbt_scale = j3dSys.getNBTScale();
J3DScaleNrmMtx33(mtx2, *nbt_scale);
J3DFifoLoadNrmMtxImm3x3(mtx2, 0);
}
}
}
#pragma pop
/* ############################################################################################## */
/* 803CDB70-803CDB84 02AC90 0014+00 0/0 0/0 0/0 .data mtxCache$1263 */
@@ -564,232 +762,3 @@ SECTION_DATA static u8 mtxCache[20] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
};
#pragma pop
/* 803CDB84-803CDBAC 02ACA4 0028+00 1/1 1/1 0/0 .data __vt__28J3DShapeMtxYBBoardConcatView */
SECTION_DATA extern void* __vt__28J3DShapeMtxYBBoardConcatView[10] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__28J3DShapeMtxYBBoardConcatViewFv,
(void*)getType__28J3DShapeMtxYBBoardConcatViewCFv,
(void*)getUseMtxNum__11J3DShapeMtxCFv,
(void*)getUseMtxIndex__11J3DShapeMtxCFUs,
(void*)load__28J3DShapeMtxYBBoardConcatViewCFv,
(void*)calcNBTScale__11J3DShapeMtxFRC3VecPA3_A3_fPA3_A3_f,
(void*)loadNrmMtx__21J3DShapeMtxConcatViewCFiUs,
(void*)loadNrmMtx__21J3DShapeMtxConcatViewCFiUsPA4_f,
};
/* 803CDBAC-803CDBD4 02ACCC 0028+00 1/1 1/1 0/0 .data __vt__27J3DShapeMtxBBoardConcatView
*/
SECTION_DATA extern void* __vt__27J3DShapeMtxBBoardConcatView[10] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__27J3DShapeMtxBBoardConcatViewFv,
(void*)getType__27J3DShapeMtxBBoardConcatViewCFv,
(void*)getUseMtxNum__11J3DShapeMtxCFv,
(void*)getUseMtxIndex__11J3DShapeMtxCFUs,
(void*)load__27J3DShapeMtxBBoardConcatViewCFv,
(void*)calcNBTScale__11J3DShapeMtxFRC3VecPA3_A3_fPA3_A3_f,
(void*)loadNrmMtx__21J3DShapeMtxConcatViewCFiUs,
(void*)loadNrmMtx__21J3DShapeMtxConcatViewCFiUsPA4_f,
};
/* 803CDBD4-803CDBFC 02ACF4 0028+00 1/1 1/1 0/0 .data __vt__26J3DShapeMtxMultiConcatView
*/
SECTION_DATA extern void* __vt__26J3DShapeMtxMultiConcatView[10] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__26J3DShapeMtxMultiConcatViewFv,
(void*)getType__26J3DShapeMtxMultiConcatViewCFv,
(void*)getUseMtxNum__26J3DShapeMtxMultiConcatViewCFv,
(void*)getUseMtxIndex__26J3DShapeMtxMultiConcatViewCFUs,
(void*)load__26J3DShapeMtxMultiConcatViewCFv,
(void*)calcNBTScale__11J3DShapeMtxFRC3VecPA3_A3_fPA3_A3_f,
(void*)loadNrmMtx__26J3DShapeMtxMultiConcatViewCFiUs,
(void*)loadNrmMtx__26J3DShapeMtxMultiConcatViewCFiUsPA4_f,
};
/* 803CDBFC-803CDC1C 02AD1C 0020+00 1/1 1/1 0/0 .data __vt__16J3DShapeMtxMulti */
SECTION_DATA extern void* __vt__16J3DShapeMtxMulti[8] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__16J3DShapeMtxMultiFv,
(void*)getType__16J3DShapeMtxMultiCFv,
(void*)getUseMtxNum__16J3DShapeMtxMultiCFv,
(void*)getUseMtxIndex__16J3DShapeMtxMultiCFUs,
(void*)load__16J3DShapeMtxMultiCFv,
(void*)calcNBTScale__16J3DShapeMtxMultiFRC3VecPA3_A3_fPA3_A3_f,
};
/* 803CDC1C-803CDC44 02AD3C 0028+00 4/4 1/1 0/0 .data __vt__21J3DShapeMtxConcatView */
SECTION_DATA extern void* __vt__21J3DShapeMtxConcatView[10] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__21J3DShapeMtxConcatViewFv,
(void*)getType__21J3DShapeMtxConcatViewCFv,
(void*)getUseMtxNum__11J3DShapeMtxCFv,
(void*)getUseMtxIndex__11J3DShapeMtxCFUs,
(void*)load__21J3DShapeMtxConcatViewCFv,
(void*)calcNBTScale__11J3DShapeMtxFRC3VecPA3_A3_fPA3_A3_f,
(void*)loadNrmMtx__21J3DShapeMtxConcatViewCFiUs,
(void*)loadNrmMtx__21J3DShapeMtxConcatViewCFiUsPA4_f,
};
/* 803CDC44-803CDC68 02AD64 0020+04 6/6 1/1 0/0 .data __vt__11J3DShapeMtx */
SECTION_DATA extern void* __vt__11J3DShapeMtx[8 + 1 /* padding */] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__11J3DShapeMtxFv,
(void*)getType__11J3DShapeMtxCFv,
(void*)getUseMtxNum__11J3DShapeMtxCFv,
(void*)getUseMtxIndex__11J3DShapeMtxCFUs,
(void*)load__11J3DShapeMtxCFv,
(void*)calcNBTScale__11J3DShapeMtxFRC3VecPA3_A3_fPA3_A3_f,
/* padding */
NULL,
};
/* 80314520-8031458C 30EE60 006C+00 1/0 0/0 0/0 .text __dt__28J3DShapeMtxYBBoardConcatViewFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
extern "C" asm void __dt__28J3DShapeMtxYBBoardConcatViewFv() {
// asm J3DShapeMtxYBBoardConcatView::~J3DShapeMtxYBBoardConcatView() {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShapeMtx/__dt__28J3DShapeMtxYBBoardConcatViewFv.s"
}
#pragma pop
/* 8031458C-80314598 30EECC 000C+00 1/0 0/0 0/0 .text getType__28J3DShapeMtxYBBoardConcatViewCFv
*/
u32 J3DShapeMtxYBBoardConcatView::getType() const {
return 'SMYB';
}
/* 80314598-8031459C 30EED8 0004+00 3/0 0/0 0/0 .text loadNrmMtx__21J3DShapeMtxConcatViewCFiUs */
void J3DShapeMtxConcatView::loadNrmMtx(int param_0, u16 param_1) const {
/* empty function */
}
/* 8031459C-803145A4 30EEDC 0008+00 4/0 0/0 0/0 .text getUseMtxIndex__11J3DShapeMtxCFUs
*/
u32 J3DShapeMtx::getUseMtxIndex(u16 param_0) const {
return mUseMtxIndex;
}
/* 803145A4-80314610 30EEE4 006C+00 1/0 0/0 0/0 .text __dt__27J3DShapeMtxBBoardConcatViewFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
extern "C" asm void __dt__27J3DShapeMtxBBoardConcatViewFv() {
// asm J3DShapeMtxBBoardConcatView::~J3DShapeMtxBBoardConcatView() {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShapeMtx/__dt__27J3DShapeMtxBBoardConcatViewFv.s"
}
#pragma pop
/* 80314610-8031461C 30EF50 000C+00 1/0 0/0 0/0 .text getType__27J3DShapeMtxBBoardConcatViewCFv */
u32 J3DShapeMtxBBoardConcatView::getType() const {
return 'SMBB';
}
/* 8031461C-80314688 30EF5C 006C+00 1/0 0/0 0/0 .text __dt__26J3DShapeMtxMultiConcatViewFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
extern "C" asm void __dt__26J3DShapeMtxMultiConcatViewFv() {
// asm J3DShapeMtxMultiConcatView::~J3DShapeMtxMultiConcatView() {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShapeMtx/__dt__26J3DShapeMtxMultiConcatViewFv.s"
}
#pragma pop
/* 80314688-80314694 30EFC8 000C+00 1/0 0/0 0/0 .text getType__26J3DShapeMtxMultiConcatViewCFv */
u32 J3DShapeMtxMultiConcatView::getType() const {
return 'SMMC';
}
/* 80314694-8031469C 30EFD4 0008+00 1/0 0/0 0/0 .text
* getUseMtxNum__26J3DShapeMtxMultiConcatViewCFv */
u32 J3DShapeMtxMultiConcatView::getUseMtxNum() const {
return mUseMtxNum;
}
/* 8031469C-803146AC 30EFDC 0010+00 1/0 0/0 0/0 .text
* getUseMtxIndex__26J3DShapeMtxMultiConcatViewCFUs */
u32 J3DShapeMtxMultiConcatView::getUseMtxIndex(u16 no) const {
return mUseMtxIndexTable[no];
}
/* 803146AC-803146B0 30EFEC 0004+00 1/0 0/0 0/0 .text
* loadNrmMtx__26J3DShapeMtxMultiConcatViewCFiUs */
void J3DShapeMtxMultiConcatView::loadNrmMtx(int param_0, u16 param_1) const {
/* empty function */
}
/* 803146B0-8031470C 30EFF0 005C+00 1/0 0/0 0/0 .text __dt__16J3DShapeMtxMultiFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
extern "C" asm void __dt__16J3DShapeMtxMultiFv() {
// asm J3DShapeMtxMulti::~J3DShapeMtxMulti() {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShapeMtx/__dt__16J3DShapeMtxMultiFv.s"
}
#pragma pop
/* 8031470C-80314718 30F04C 000C+00 1/0 0/0 0/0 .text getType__16J3DShapeMtxMultiCFv */
u32 J3DShapeMtxMulti::getType() const {
return 'SMML';
}
/* 80314718-80314720 30F058 0008+00 1/0 0/0 0/0 .text getUseMtxNum__16J3DShapeMtxMultiCFv
*/
u32 J3DShapeMtxMulti::getUseMtxNum() const {
return mUseMtxNum;
}
/* 80314720-80314730 30F060 0010+00 1/0 0/0 0/0 .text getUseMtxIndex__16J3DShapeMtxMultiCFUs */
u32 J3DShapeMtxMulti::getUseMtxIndex(u16 no) const {
return mUseMtxIndexTable[no];
}
/* 80314730-8031478C 30F070 005C+00 1/0 0/0 0/0 .text __dt__21J3DShapeMtxConcatViewFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
extern "C" asm void __dt__21J3DShapeMtxConcatViewFv() {
// asm J3DShapeMtxConcatView::~J3DShapeMtxConcatView() {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShapeMtx/__dt__21J3DShapeMtxConcatViewFv.s"
}
#pragma pop
/* 8031478C-80314798 30F0CC 000C+00 1/0 0/0 0/0 .text getType__21J3DShapeMtxConcatViewCFv
*/
u32 J3DShapeMtxConcatView::getType() const {
return 'SMCV';
}
/* 80314798-803147E0 30F0D8 0048+00 1/0 0/0 0/0 .text __dt__11J3DShapeMtxFv */
J3DShapeMtx::~J3DShapeMtx() {}
/* 803147E0-803147EC 30F120 000C+00 1/0 0/0 0/0 .text getType__11J3DShapeMtxCFv */
u32 J3DShapeMtx::getType() const {
return 'SMTX';
}
/* 803147EC-80314924 30F12C 0138+00 0/0 1/0 0/0 .text __sinit_J3DShapeMtx_cpp */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void __sinit_J3DShapeMtx_cpp() {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShapeMtx/__sinit_J3DShapeMtx_cpp.s"
}
#pragma pop
#pragma push
#pragma force_active on
REGISTER_CTORS(0x803147EC, __sinit_J3DShapeMtx_cpp);
#pragma pop