mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-06-23 07:19:53 -04:00
some J3D/misc cleanup (#2628)
* some j3d cleanup * begin using uintptr_t * j3dgraphbase cleanup * j3dgraphanimator cleanup
This commit is contained in:
@@ -1,14 +1,7 @@
|
||||
//
|
||||
// Generated By: dol2asm
|
||||
// Translation Unit: J3DSkinDeform
|
||||
//
|
||||
|
||||
#include "JSystem/J3DGraphAnimator/J3DSkinDeform.h"
|
||||
#include "JSystem/J3DGraphAnimator/J3DModel.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/os.h"
|
||||
#include "string.h"
|
||||
#include <string.h>
|
||||
|
||||
/* 8032C6E4-8032C704 327024 0020+00 1/1 0/0 0/0 .text __ct__12J3DSkinNListFv */
|
||||
J3DSkinNList::J3DSkinNList() {
|
||||
@@ -78,8 +71,6 @@ void J3DSkinNList::calcSkin_VtxNrmF32(f32 (*param_0)[4], void* param_1, void* pa
|
||||
}
|
||||
}
|
||||
|
||||
/* ############################################################################################## */
|
||||
|
||||
/* 8032C96C-8032C9B0 3272AC 0044+00 0/0 0/0 2/2 .text __ct__13J3DSkinDeformFv */
|
||||
J3DSkinDeform::J3DSkinDeform() {
|
||||
mPosData = NULL;
|
||||
@@ -94,7 +85,6 @@ J3DSkinDeform::J3DSkinDeform() {
|
||||
mSkinNList = NULL;
|
||||
}
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80437218-80438218 063F38 1000+00 1/1 0/0 0/0 .bss sWorkArea_WEvlpMixMtx__13J3DSkinDeform */
|
||||
u16* J3DSkinDeform::sWorkArea_WEvlpMixMtx[1024];
|
||||
|
||||
@@ -103,32 +93,34 @@ f32* J3DSkinDeform::sWorkArea_WEvlpMixWeight[1024];
|
||||
|
||||
/* 8032C9B0-8032CF44 3272F0 0594+00 0/0 1/1 0/0 .text
|
||||
* initSkinInfo__13J3DSkinDeformFP12J3DModelData */
|
||||
void J3DSkinDeform::initSkinInfo(J3DModelData* param_0) {
|
||||
J3D_ASSERT(322, param_0, "Error : null pointer.");
|
||||
int vtxNum = param_0->getVtxNum();
|
||||
int wevlpMtxNum = param_0->getWEvlpMtxNum();
|
||||
u16* wevlpMtxIndex = param_0->getWEvlpMixMtxIndex();
|
||||
f32* wevlpMixWeights = param_0->getWEvlpMixWeight();
|
||||
void J3DSkinDeform::initSkinInfo(J3DModelData* pModelData) {
|
||||
J3D_ASSERT_NULLPTR(322, pModelData != NULL);
|
||||
|
||||
int vtxNum = pModelData->getVtxNum();
|
||||
int wevlpMtxNum = pModelData->getWEvlpMtxNum();
|
||||
u16* wevlpMtxIndex = pModelData->getWEvlpMixMtxIndex();
|
||||
f32* wevlpMixWeights = pModelData->getWEvlpMixWeight();
|
||||
int currentOffset = 0;
|
||||
|
||||
for (int i = 0; i < wevlpMtxNum; i++) {
|
||||
sWorkArea_WEvlpMixMtx[i] = wevlpMtxIndex + currentOffset;
|
||||
sWorkArea_WEvlpMixWeight[i] = wevlpMixWeights + currentOffset;
|
||||
currentOffset += param_0->getWEvlpMixMtxNum(i);
|
||||
currentOffset += pModelData->getWEvlpMixMtxNum(i);
|
||||
}
|
||||
|
||||
if (param_0->getJointNum() != 0) {
|
||||
mSkinNList = new J3DSkinNList[param_0->getJointNum()];
|
||||
if (pModelData->getJointNum() != 0) {
|
||||
mSkinNList = new J3DSkinNList[pModelData->getJointNum()];
|
||||
}
|
||||
|
||||
for (int i = 0; i < param_0->getVtxNum(); i++) {
|
||||
for (int i = 0; i < pModelData->getVtxNum(); i++) {
|
||||
u16 uVar8 = mPosData[i];
|
||||
if (uVar8 != 0xffff) {
|
||||
if (param_0->getDrawMtxFlag(uVar8) == 0) {
|
||||
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
|
||||
if (!pModelData->getDrawMtxFlag(uVar8)) {
|
||||
u16 drawMtxIndex = pModelData->getDrawMtxIndex(uVar8);
|
||||
mSkinNList[drawMtxIndex].field_0x10++;
|
||||
} else {
|
||||
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
|
||||
int wevlpMtxNum = param_0->getWEvlpMixMtxNum(drawMtxIndex);
|
||||
u16 drawMtxIndex = pModelData->getDrawMtxIndex(uVar8);
|
||||
int wevlpMtxNum = pModelData->getWEvlpMixMtxNum(drawMtxIndex);
|
||||
u16* indices = sWorkArea_WEvlpMixMtx[drawMtxIndex];
|
||||
for (int j = 0; j < wevlpMtxNum; j++) {
|
||||
mSkinNList[indices[j]].field_0x10++;
|
||||
@@ -136,15 +128,16 @@ void J3DSkinDeform::initSkinInfo(J3DModelData* param_0) {
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < param_0->getNrmNum(); i++) {
|
||||
|
||||
for (int i = 0; i < pModelData->getNrmNum(); i++) {
|
||||
u16 uVar8 = mNrmData[i];
|
||||
if (uVar8 != 0xffff) {
|
||||
if (param_0->getDrawMtxFlag(uVar8) == 0) {
|
||||
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
|
||||
if (!pModelData->getDrawMtxFlag(uVar8)) {
|
||||
u16 drawMtxIndex = pModelData->getDrawMtxIndex(uVar8);
|
||||
mSkinNList[drawMtxIndex].field_0x12++;
|
||||
} else {
|
||||
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
|
||||
int wevlpMtxNum = param_0->getWEvlpMixMtxNum(drawMtxIndex);
|
||||
u16 drawMtxIndex = pModelData->getDrawMtxIndex(uVar8);
|
||||
int wevlpMtxNum = pModelData->getWEvlpMixMtxNum(drawMtxIndex);
|
||||
u16* indices = sWorkArea_WEvlpMixMtx[drawMtxIndex];
|
||||
for (int j = 0; j < wevlpMtxNum; j++) {
|
||||
mSkinNList[indices[j]].field_0x12++;
|
||||
@@ -152,7 +145,8 @@ void J3DSkinDeform::initSkinInfo(J3DModelData* param_0) {
|
||||
}
|
||||
}
|
||||
}
|
||||
for (u16 i = 0; i < param_0->getJointNum(); i++) {
|
||||
|
||||
for (u16 i = 0; i < pModelData->getJointNum(); i++) {
|
||||
if (mSkinNList[i].field_0x10) {
|
||||
mSkinNList[i].field_0x0 = new u16[mSkinNList[i].field_0x10];
|
||||
mSkinNList[i].field_0x8 = new f32[mSkinNList[i].field_0x10];
|
||||
@@ -164,17 +158,18 @@ void J3DSkinDeform::initSkinInfo(J3DModelData* param_0) {
|
||||
mSkinNList[i].field_0x12 = 0;
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < param_0->getVtxNum(); i++) {
|
||||
|
||||
for (int i = 0; i < pModelData->getVtxNum(); i++) {
|
||||
u16 uVar8 = mPosData[i];
|
||||
if (uVar8 != 0xffff) {
|
||||
if (param_0->getDrawMtxFlag(uVar8) == 0) {
|
||||
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
|
||||
if (!pModelData->getDrawMtxFlag(uVar8)) {
|
||||
u16 drawMtxIndex = pModelData->getDrawMtxIndex(uVar8);
|
||||
int uVar9 = mSkinNList[drawMtxIndex].field_0x10++;
|
||||
mSkinNList[drawMtxIndex].field_0x0[uVar9] = i;
|
||||
mSkinNList[drawMtxIndex].field_0x8[uVar9] = 1.0f;
|
||||
} else {
|
||||
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
|
||||
int wevlpMtxNum = param_0->getWEvlpMixMtxNum(drawMtxIndex);
|
||||
u16 drawMtxIndex = pModelData->getDrawMtxIndex(uVar8);
|
||||
int wevlpMtxNum = pModelData->getWEvlpMixMtxNum(drawMtxIndex);
|
||||
u16* indices = sWorkArea_WEvlpMixMtx[drawMtxIndex];
|
||||
f32* weights = sWorkArea_WEvlpMixWeight[drawMtxIndex];
|
||||
for (int j = 0; j < wevlpMtxNum; j++) {
|
||||
@@ -185,17 +180,18 @@ void J3DSkinDeform::initSkinInfo(J3DModelData* param_0) {
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < param_0->getNrmNum(); i++) {
|
||||
|
||||
for (int i = 0; i < pModelData->getNrmNum(); i++) {
|
||||
u16 uVar8 = mNrmData[i];
|
||||
if (uVar8 != 0xffff) {
|
||||
if (param_0->getDrawMtxFlag(uVar8) == 0) {
|
||||
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
|
||||
if (!pModelData->getDrawMtxFlag(uVar8)) {
|
||||
u16 drawMtxIndex = pModelData->getDrawMtxIndex(uVar8);
|
||||
int uVar9 = mSkinNList[drawMtxIndex].field_0x12++;
|
||||
mSkinNList[drawMtxIndex].field_0x4[uVar9] = i;
|
||||
mSkinNList[drawMtxIndex].field_0xc[uVar9] = 1.0f;
|
||||
} else {
|
||||
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
|
||||
int wevlpMtxNum = param_0->getWEvlpMixMtxNum(drawMtxIndex);
|
||||
u16 drawMtxIndex = pModelData->getDrawMtxIndex(uVar8);
|
||||
int wevlpMtxNum = pModelData->getWEvlpMixMtxNum(drawMtxIndex);
|
||||
u16* indices = sWorkArea_WEvlpMixMtx[drawMtxIndex];
|
||||
f32* weights = sWorkArea_WEvlpMixWeight[drawMtxIndex];
|
||||
for (int j = 0; j < wevlpMtxNum; j++) {
|
||||
@@ -210,128 +206,133 @@ void J3DSkinDeform::initSkinInfo(J3DModelData* param_0) {
|
||||
|
||||
/* 80439218-80439A20 065F38 0800+08 1/1 0/0 0/0 .bss sWorkArea_MtxReg__13J3DSkinDeform
|
||||
*/
|
||||
u16 J3DSkinDeform::sWorkArea_MtxReg[1024 + 4 /* padding */];
|
||||
u16 J3DSkinDeform::sWorkArea_MtxReg[1024];
|
||||
|
||||
/* 8032CF44-8032D378 327884 0434+00 0/0 1/1 0/0 .text
|
||||
* initMtxIndexArray__13J3DSkinDeformFP12J3DModelData */
|
||||
// NONMATCHING - local_58 issue
|
||||
int J3DSkinDeform::initMtxIndexArray(J3DModelData* param_0) {
|
||||
J3D_ASSERT(507, param_0, "Error : null pointer.");
|
||||
// NONMATCHING - matches debug, not retail
|
||||
int J3DSkinDeform::initMtxIndexArray(J3DModelData* pModelData) {
|
||||
J3D_ASSERT_NULLPTR(507, pModelData != NULL);
|
||||
if (mPosData != NULL && mNrmData != NULL) {
|
||||
return 0;
|
||||
return kJ3DError_Success;
|
||||
}
|
||||
|
||||
mPosData = new u16[param_0->getVtxNum()];
|
||||
mPosData = new u16[pModelData->getVtxNum()];
|
||||
if (mPosData == NULL) {
|
||||
return 4;
|
||||
return kJ3DError_Alloc;
|
||||
}
|
||||
|
||||
for (int i = 0; i < param_0->getVtxNum(); i++) {
|
||||
for (int i = 0; i < pModelData->getVtxNum(); i++) {
|
||||
mPosData[i] = 0xffff;
|
||||
}
|
||||
|
||||
if (param_0->getNrmNum()) {
|
||||
mNrmData = new u16[param_0->getNrmNum()];
|
||||
if (pModelData->getNrmNum()) {
|
||||
mNrmData = new u16[pModelData->getNrmNum()];
|
||||
if (mNrmData == NULL) {
|
||||
return 4;
|
||||
return kJ3DError_Alloc;
|
||||
}
|
||||
for (int i = 0; i < param_0->getNrmNum(); i++) {
|
||||
for (int i = 0; i < pModelData->getNrmNum(); i++) {
|
||||
mNrmData[i] = 0;
|
||||
}
|
||||
} else {
|
||||
mNrmData = NULL;
|
||||
}
|
||||
|
||||
mPosMtx = new Mtx[param_0->getJointNum()];
|
||||
mNrmMtx = new (32) Mtx33[param_0->getDrawMtxNum()];
|
||||
mPosMtx = new Mtx[pModelData->getJointNum()];
|
||||
mNrmMtx = new (32) Mtx33[pModelData->getDrawMtxNum()];
|
||||
if (mPosMtx == NULL) {
|
||||
return 4;
|
||||
return kJ3DError_Alloc;
|
||||
}
|
||||
if (mNrmMtx == NULL) {
|
||||
return 4;
|
||||
return kJ3DError_Alloc;
|
||||
}
|
||||
|
||||
for (u16 local_6c = 0; local_6c < param_0->getShapeNum(); local_6c++) {
|
||||
u32 local_28[4] = {0,1,1,2};
|
||||
int r26 = -1;
|
||||
int r25 = -1;
|
||||
int r24 = -1;
|
||||
int stack_3c = -1;
|
||||
for (u16 i = 0; i < pModelData->getShapeNum(); i++) {
|
||||
u32 kSize[4] = {0, 1, 1, 2};
|
||||
int pnmtx_num = -1;
|
||||
int vtx_num = -1;
|
||||
int nrm_num = -1;
|
||||
int tex_num = -1;
|
||||
int r23 = 0;
|
||||
for (GXVtxDescList* local_4c = param_0->getShapeNodePointer(local_6c)->getVtxDesc(); local_4c->attr != 0xff; local_4c++) {
|
||||
switch (local_4c->attr) {
|
||||
for (GXVtxDescList* vtxDesc = pModelData->getShapeNodePointer(i)->getVtxDesc(); vtxDesc->attr != 0xff; vtxDesc++) {
|
||||
switch (vtxDesc->attr) {
|
||||
case GX_VA_PNMTXIDX:
|
||||
r26 = r23;
|
||||
pnmtx_num = r23;
|
||||
break;
|
||||
case GX_VA_POS:
|
||||
r25 = r23;
|
||||
if (local_4c->type != GX_INDEX16) {
|
||||
vtx_num = r23;
|
||||
if (vtxDesc->type != GX_INDEX16) {
|
||||
OSReport(" Invlid Data : CPU Pipeline process GX_INDEX16 Data Only\n");
|
||||
return 6;
|
||||
}
|
||||
break;
|
||||
case GX_VA_NRM:
|
||||
r24 = r23;
|
||||
if (local_4c->type != GX_INDEX16) {
|
||||
nrm_num = r23;
|
||||
if (vtxDesc->type != GX_INDEX16) {
|
||||
OSReport(" Invlid Data : CPU Pipeline process GX_INDEX16 Data Only\n");
|
||||
return 6;
|
||||
}
|
||||
break;
|
||||
case GX_VA_TEX0:
|
||||
stack_3c = r23;
|
||||
if (local_4c->type != GX_INDEX16) {
|
||||
tex_num = r23;
|
||||
if (vtxDesc->type != GX_INDEX16) {
|
||||
OSReport(" Invlid Data : CPU Pipeline process GX_INDEX16 Data Only\n");
|
||||
return 6;
|
||||
}
|
||||
break;
|
||||
}
|
||||
r23 += local_28[(int)local_4c->type];
|
||||
r23 += kSize[(int)vtxDesc->type];
|
||||
}
|
||||
for (u16 local_6e = 0; local_6e < param_0->getShapeNodePointer(local_6c)->getMtxGroupNum(); local_6e++) {
|
||||
J3DShapeMtx* piVar8 = param_0->getShapeNodePointer(local_6c)->getShapeMtx(local_6e);
|
||||
u8* pcVar10 = param_0->getShapeNodePointer(local_6c)->getShapeDraw(local_6e)->getDisplayList();
|
||||
u8* local_58 = pcVar10;
|
||||
|
||||
for (u16 j = 0; j < (u16)pModelData->getShapeNodePointer(i)->getMtxGroupNum(); j++) {
|
||||
J3DShapeMtx* pShapeMtx = pModelData->getShapeNodePointer(i)->getShapeMtx(j);
|
||||
u8* pDList = pModelData->getShapeNodePointer(i)->getShapeDraw(j)->getDisplayList();
|
||||
u8* pDListPos = pDList;
|
||||
int uVar13;
|
||||
for (;
|
||||
(int)local_58 - (int)pcVar10 < param_0->getShapeNodePointer(local_6c)->getShapeDraw(local_6e)->getDisplayListSize();
|
||||
local_58 += r23 * uVar13) {
|
||||
u8 uVar1 = *local_58;
|
||||
local_58++;
|
||||
if (uVar1 != 0xA0 && uVar1 != 0x98) {
|
||||
(int)pDListPos - (int)pDList < pModelData->getShapeNodePointer(i)->getShapeDraw(j)->getDisplayListSize();
|
||||
pDListPos += r23 * uVar13)
|
||||
{
|
||||
u8 command = *pDListPos;
|
||||
pDListPos++;
|
||||
if (command != GX_TRIANGLEFAN && command != GX_TRIANGLESTRIP) {
|
||||
break;
|
||||
}
|
||||
|
||||
uVar13 = *(u16*)local_58;
|
||||
local_58 += 2;
|
||||
uVar13 = *(u16*)pDListPos;
|
||||
pDListPos += 2;
|
||||
for (int local_60 = 0; local_60 < uVar13; local_60++) {
|
||||
u8* iVar5 = local_58 + r23 * local_60;
|
||||
u8 bVar3 = *(iVar5 + r26) / 3U;
|
||||
u16 uVar1 = *(u16*)(iVar5 + r25);
|
||||
u16 uVar2 = *(u16*)(iVar5 + r24);
|
||||
u16 uVar3 = *(u16*)(iVar5 + stack_3c);
|
||||
u16 local_76 = piVar8->getUseMtxIndex(bVar3);
|
||||
u8* iVar5 = pDListPos + r23 * local_60;
|
||||
u8 bVar3 = *(iVar5 + pnmtx_num) / 3U;
|
||||
u16 vtx_idx = *(u16*)(iVar5 + vtx_num);
|
||||
u16 nrm_idx = *(u16*)(iVar5 + nrm_num);
|
||||
u16 uVar3 = *(u16*)(iVar5 + tex_num);
|
||||
u16 local_76 = pShapeMtx->getUseMtxIndex(bVar3);
|
||||
if (local_76 == 0xffff) {
|
||||
local_76 = sWorkArea_MtxReg[bVar3];
|
||||
} else if (r26 != -1) {
|
||||
} else if (pnmtx_num != -1) {
|
||||
sWorkArea_MtxReg[bVar3] = local_76;
|
||||
}
|
||||
J3D_ASSERT(673, local_76 < param_0->getDrawMtxNum(), "Error : range over.");
|
||||
J3D_ASSERT(674, uVar1 < param_0->getVtxNum(), "Error : range over.");
|
||||
mPosData[uVar1] = local_76;
|
||||
if (r24 != -1) {
|
||||
J3D_ASSERT(680, uVar2 < param_0->getNrmNum(), "Error : range over.");
|
||||
mNrmData[uVar2] = local_76;
|
||||
|
||||
J3D_ASSERT_RANGE(673, local_76 < pModelData->getDrawMtxNum());
|
||||
J3D_ASSERT_RANGE(674, vtx_idx < pModelData->getVtxNum());
|
||||
mPosData[vtx_idx] = local_76;
|
||||
|
||||
if (nrm_num != -1) {
|
||||
J3D_ASSERT_RANGE(680, nrm_idx < pModelData->getNrmNum());
|
||||
mNrmData[nrm_idx] = local_76;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (r24 == -1) {
|
||||
param_0->getShapeNodePointer(local_6c)->onFlag(0x100);
|
||||
param_0->getShapeNodePointer(local_6c)->offFlag(8);
|
||||
|
||||
if (nrm_num == -1) {
|
||||
pModelData->getShapeNodePointer(i)->onFlag(J3DShpFlag_EnableLod);
|
||||
pModelData->getShapeNodePointer(i)->offFlag(J3DShpFlag_SkinNrmCpu);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < param_0->getVtxNum(); i++) {
|
||||
for (int i = 0; i < pModelData->getVtxNum(); i++) {
|
||||
if (mPosData[i] == 0xffff) {
|
||||
field_0x18 = 0x0;
|
||||
mPosData[i] = 0;
|
||||
@@ -340,36 +341,38 @@ int J3DSkinDeform::initMtxIndexArray(J3DModelData* param_0) {
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
return kJ3DError_Success;
|
||||
}
|
||||
|
||||
/* 8032D378-8032D5C4 327CB8 024C+00 0/0 1/1 0/0 .text
|
||||
* changeFastSkinDL__13J3DSkinDeformFP12J3DModelData */
|
||||
// NONMATCHING - regalloc, display list access issues
|
||||
void J3DSkinDeform::changeFastSkinDL(J3DModelData* param_0) {
|
||||
J3D_ASSERT(740, param_0, "Error : null pointer.");
|
||||
for (u16 i = 0; i < param_0->getShapeNum(); i++) {
|
||||
u32 local_28[4] = {0,1,1,2};
|
||||
void J3DSkinDeform::changeFastSkinDL(J3DModelData* pModelData) {
|
||||
J3D_ASSERT_NULLPTR(740, pModelData != NULL);
|
||||
for (u16 i = 0; i < pModelData->getShapeNum(); i++) {
|
||||
u32 kSize[4] = {0,1,1,2};
|
||||
int local_30 = -1;
|
||||
int local_34 = 0;
|
||||
J3DShape* pShapeNode = param_0->getShapeNodePointer(i);
|
||||
for (GXVtxDescList* local_3c = pShapeNode->getVtxDesc(); local_3c->attr != GX_VA_NULL; local_3c++) {
|
||||
if (local_3c->attr == GX_VA_PNMTXIDX) {
|
||||
J3DShape* pShapeNode = pModelData->getShapeNodePointer(i);
|
||||
for (GXVtxDescList* vtxDesc = pShapeNode->getVtxDesc(); vtxDesc->attr != GX_VA_NULL; vtxDesc++) {
|
||||
if (vtxDesc->attr == GX_VA_PNMTXIDX) {
|
||||
local_30 = local_34;
|
||||
}
|
||||
local_34 += local_28[local_3c->type];
|
||||
local_34 += kSize[vtxDesc->type];
|
||||
}
|
||||
|
||||
if (local_30 != -1) {
|
||||
for (u16 j = 0; j < pShapeNode->getMtxGroupNum(); j++) {
|
||||
u8* puVar5 = pShapeNode->getShapeDraw(j)->getDisplayList();
|
||||
u8* local_44 = puVar5;
|
||||
u8* puVar10 = puVar5;
|
||||
while (local_44 - puVar5 < pShapeNode->getShapeDraw(j)->getDisplayListSize()) {
|
||||
u8 cVar1 = *local_44;
|
||||
for (u16 j = 0; j < (u16)pShapeNode->getMtxGroupNum(); j++) {
|
||||
u8* pDList = pShapeNode->getShapeDraw(j)->getDisplayList();
|
||||
u8* local_44 = pDList;
|
||||
u8* puVar10 = pDList;
|
||||
while (local_44 - pDList < pShapeNode->getShapeDraw(j)->getDisplayListSize()) {
|
||||
u8 command = *local_44;
|
||||
local_44++;
|
||||
*puVar10++ = cVar1;
|
||||
if ((cVar1 != 0xA0) && (cVar1 != 0x98))
|
||||
*puVar10++ = command;
|
||||
if (command != GX_TRIANGLEFAN && command != GX_TRIANGLESTRIP)
|
||||
break;
|
||||
|
||||
int uVar9 = *(u16*)local_44;
|
||||
local_44 += 2;
|
||||
*(u16*)puVar10 = uVar9;
|
||||
@@ -381,19 +384,20 @@ void J3DSkinDeform::changeFastSkinDL(J3DModelData* param_0) {
|
||||
}
|
||||
local_44 += local_34 * uVar9;
|
||||
}
|
||||
int pcVar2 = ((int)puVar10 - (int)puVar5 + 0x1f) & ~0x1f;
|
||||
while ((int)puVar10 - (int)puVar5 < pShapeNode->getShapeDraw(j)->getDisplayListSize()) {
|
||||
|
||||
int dlistSize = ((int)puVar10 - (int)pDList + 0x1f) & ~0x1f;
|
||||
while ((int)puVar10 - (int)pDList < pShapeNode->getShapeDraw(j)->getDisplayListSize()) {
|
||||
*puVar10++ = 0;
|
||||
}
|
||||
pShapeNode->getShapeDraw(j)->setDisplayListSize(pcVar2);
|
||||
DCStoreRange(puVar5, pShapeNode->getShapeDraw(j)->getDisplayListSize());
|
||||
|
||||
pShapeNode->getShapeDraw(j)->setDisplayListSize(dlistSize);
|
||||
DCStoreRange(pDList, pShapeNode->getShapeDraw(j)->getDisplayListSize());
|
||||
}
|
||||
}
|
||||
}
|
||||
;
|
||||
;
|
||||
for (u16 i = 0; i < param_0->getShapeNum(); i++) {
|
||||
J3DShape* pShape = param_0->getShapeNodePointer(i);
|
||||
|
||||
for (u16 i = 0; i < pModelData->getShapeNum(); i++) {
|
||||
J3DShape* pShape = pModelData->getShapeNodePointer(i);
|
||||
GXVtxDescList* local_5c = pShape->getVtxDesc();
|
||||
GXVtxDescList* local_60 = local_5c;
|
||||
for (; local_5c->attr != GX_VA_NULL; local_5c++) {
|
||||
@@ -411,21 +415,21 @@ void J3DSkinDeform::changeFastSkinDL(J3DModelData* param_0) {
|
||||
|
||||
/* 8032D5C4-8032D738 327F04 0174+00 1/1 0/0 0/0 .text calcNrmMtx__13J3DSkinDeformFP12J3DMtxBuffer
|
||||
*/
|
||||
void J3DSkinDeform::calcNrmMtx(J3DMtxBuffer* param_0) {
|
||||
J3DJointTree* jointTree = param_0->getJointTree();
|
||||
void J3DSkinDeform::calcNrmMtx(J3DMtxBuffer* pMtxBuffer) {
|
||||
J3DJointTree* jointTree = pMtxBuffer->getJointTree();
|
||||
u16 drawMtxNum = jointTree->getDrawMtxNum();
|
||||
for (u16 i = 0; i < drawMtxNum; i++) {
|
||||
if (jointTree->getDrawMtxFlag(i) == 0) {
|
||||
if (param_0->getScaleFlag(jointTree->getDrawMtxIndex(i)) == 1) {
|
||||
setNrmMtx(i, param_0->getAnmMtx(jointTree->getDrawMtxIndex(i)));
|
||||
if (pMtxBuffer->getScaleFlag(jointTree->getDrawMtxIndex(i)) == 1) {
|
||||
setNrmMtx(i, pMtxBuffer->getAnmMtx(jointTree->getDrawMtxIndex(i)));
|
||||
} else {
|
||||
J3DPSCalcInverseTranspose(param_0->getAnmMtx(jointTree->getDrawMtxIndex(i)), getNrmMtx(i));
|
||||
J3DPSCalcInverseTranspose(pMtxBuffer->getAnmMtx(jointTree->getDrawMtxIndex(i)), getNrmMtx(i));
|
||||
}
|
||||
} else {
|
||||
if (param_0->getEnvScaleFlag(jointTree->getDrawMtxIndex(i)) == 1) {
|
||||
setNrmMtx(i, param_0->getWeightAnmMtx(jointTree->getDrawMtxIndex(i)));
|
||||
if (pMtxBuffer->getEnvScaleFlag(jointTree->getDrawMtxIndex(i)) == 1) {
|
||||
setNrmMtx(i, pMtxBuffer->getWeightAnmMtx(jointTree->getDrawMtxIndex(i)));
|
||||
} else {
|
||||
J3DPSCalcInverseTranspose(param_0->getWeightAnmMtx(jointTree->getDrawMtxIndex(i)), getNrmMtx(i));
|
||||
J3DPSCalcInverseTranspose(pMtxBuffer->getWeightAnmMtx(jointTree->getDrawMtxIndex(i)), getNrmMtx(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -433,41 +437,46 @@ void J3DSkinDeform::calcNrmMtx(J3DMtxBuffer* param_0) {
|
||||
|
||||
/* 8032D738-8032D87C 328078 0144+00 0/0 1/1 0/0 .text
|
||||
* transformVtxPosNrm__13J3DSkinDeformFP12J3DModelData */
|
||||
void J3DSkinDeform::transformVtxPosNrm(J3DModelData* param_0) {
|
||||
if (param_0->getWEvlpMtxNum() != 0 && field_0x19 == 0) {
|
||||
int vtmNum = param_0->getVtxNum();
|
||||
int nrmNum = param_0->getNrmNum();
|
||||
void J3DSkinDeform::transformVtxPosNrm(J3DModelData* pModelData) {
|
||||
if (pModelData->getWEvlpMtxNum() != 0 && field_0x19 == 0) {
|
||||
int vtmNum = pModelData->getVtxNum();
|
||||
int nrmNum = pModelData->getNrmNum();
|
||||
|
||||
for (int i = 0; i < vtmNum; i++) {
|
||||
u16 posIndex = mPosData[i];
|
||||
if (param_0->getDrawMtxFlag(posIndex) == 0) {
|
||||
u16 drawMtxIndex = param_0->getDrawMtxIndex(posIndex);
|
||||
Vec* pos = ((Vec*)param_0->getVtxPosArray()) + i;
|
||||
if (pModelData->getDrawMtxFlag(posIndex) == 0) {
|
||||
u16 drawMtxIndex = pModelData->getDrawMtxIndex(posIndex);
|
||||
Vec* pos = ((Vec*)pModelData->getVtxPosArray()) + i;
|
||||
Mtx invMtx;
|
||||
MTXInverse(param_0->getInvJointMtx(drawMtxIndex), invMtx);
|
||||
MTXInverse(pModelData->getInvJointMtx(drawMtxIndex), invMtx);
|
||||
MTXMultVec(invMtx, pos, pos);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < nrmNum; i++) {
|
||||
u16 nrmIndex = mNrmData[i];
|
||||
if (param_0->getDrawMtxFlag(nrmIndex) == 0) {
|
||||
u16 drawMtxIndex = param_0->getDrawMtxIndex(nrmIndex);
|
||||
Vec* nrm = ((Vec*)param_0->getVtxNrmArray()) + i;
|
||||
if (pModelData->getDrawMtxFlag(nrmIndex) == 0) {
|
||||
u16 drawMtxIndex = pModelData->getDrawMtxIndex(nrmIndex);
|
||||
Vec* nrm = ((Vec*)pModelData->getVtxNrmArray()) + i;
|
||||
Mtx invMtx;
|
||||
MTXInverse(param_0->getInvJointMtx(drawMtxIndex), invMtx);
|
||||
MTXInverse(pModelData->getInvJointMtx(drawMtxIndex), invMtx);
|
||||
MTXMultVecSR(invMtx, nrm, nrm);
|
||||
}
|
||||
}
|
||||
|
||||
field_0x19 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* 8032D87C-8032D8F4 3281BC 0078+00 1/1 0/0 0/0 .text
|
||||
* calcAnmInvJointMtx__13J3DSkinDeformFP12J3DMtxBuffer */
|
||||
void J3DSkinDeform::calcAnmInvJointMtx(J3DMtxBuffer* param_0) {
|
||||
if (param_0->getJointTree()->getWEvlpMtxNum() != 0) {
|
||||
u16 jointNum = param_0->getJointTree()->getJointNum();
|
||||
Mtx* anmMtx = (Mtx*)param_0->getAnmMtx(0);
|
||||
Mtx* invJointMtx = ¶m_0->getJointTree()->getInvJointMtx(0);
|
||||
void J3DSkinDeform::calcAnmInvJointMtx(J3DMtxBuffer* pMtxBuffer) {
|
||||
J3D_ASSERT_NULLPTR(978, pMtxBuffer != NULL);
|
||||
|
||||
if (pMtxBuffer->getJointTree()->getWEvlpMtxNum() != 0) {
|
||||
int jointNum = pMtxBuffer->getJointTree()->getJointNum();
|
||||
Mtx* anmMtx = (Mtx*)pMtxBuffer->getAnmMtx(0);
|
||||
Mtx* invJointMtx = &pMtxBuffer->getJointTree()->getInvJointMtx(0);
|
||||
Mtx* posMtx = mPosMtx;
|
||||
for (int i = 0; i < jointNum; i++) {
|
||||
MTXConcat(anmMtx[i], invJointMtx[i], posMtx[i]);
|
||||
@@ -477,177 +486,208 @@ void J3DSkinDeform::calcAnmInvJointMtx(J3DMtxBuffer* param_0) {
|
||||
|
||||
/* 8032D8F4-8032DA1C 328234 0128+00 1/1 0/0 0/0 .text
|
||||
* deformFastVtxPos_F32__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer */
|
||||
void J3DSkinDeform::deformFastVtxPos_F32(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) const {
|
||||
param_0->swapTransformedVtxPos();
|
||||
J3DJointTree* jointTree = param_1->getJointTree();
|
||||
u32 vtxNum = param_0->getVertexData()->getVtxNum();
|
||||
void* currentVtxPos = param_0->getCurrentVtxPos();
|
||||
void* transformedVtxPos = param_0->getTransformedVtxPos(0);
|
||||
J3DFillZero32B(transformedVtxPos, (vtxNum * sizeof(Vec) + 0x1f) & ~0x1f);
|
||||
void J3DSkinDeform::deformFastVtxPos_F32(J3DVertexBuffer* pVtxBuffer, J3DMtxBuffer* pMtxBuffer) const {
|
||||
pVtxBuffer->swapTransformedVtxPos();
|
||||
J3DJointTree* jointTree = pMtxBuffer->getJointTree();
|
||||
u32 vtxNum = pVtxBuffer->getVertexData()->getVtxNum();
|
||||
int sp14 = jointTree->getDrawMtxNum();
|
||||
void* currentVtxPos = pVtxBuffer->getCurrentVtxPos();
|
||||
void* transformedVtxPos = pVtxBuffer->getTransformedVtxPos(0);
|
||||
|
||||
J3DFillZero32B(transformedVtxPos, OSRoundUp32B(vtxNum * sizeof(Vec)));
|
||||
|
||||
if (jointTree->getWEvlpMtxNum() != 0) {
|
||||
u16 jointNum = jointTree->getJointNum();
|
||||
for (u16 i = 0; i < jointNum; i++) {
|
||||
mSkinNList[i].calcSkin_VtxPosF32(mPosMtx[i], currentVtxPos, transformedVtxPos);
|
||||
J3DSkinNList* skinList = mSkinNList + i;
|
||||
skinList->calcSkin_VtxPosF32(mPosMtx[i], currentVtxPos, transformedVtxPos);
|
||||
}
|
||||
} else {
|
||||
u16 jointNum = jointTree->getJointNum();
|
||||
for (u16 i = 0; i < jointNum; i++) {
|
||||
J3DSkinNList* skinList = mSkinNList + i;
|
||||
skinList->calcSkin_VtxPosF32(param_1->getAnmMtx(i), currentVtxPos, transformedVtxPos);
|
||||
skinList->calcSkin_VtxPosF32(pMtxBuffer->getAnmMtx(i), currentVtxPos, transformedVtxPos);
|
||||
}
|
||||
}
|
||||
DCStoreRange(param_0->getTransformedVtxPos(0), param_0->getVertexData()->getVtxNum() * sizeof(Vec));
|
||||
param_0->setCurrentVtxPos(transformedVtxPos);
|
||||
}
|
||||
|
||||
/* ############################################################################################## */
|
||||
DCStoreRange(pVtxBuffer->getTransformedVtxPos(0), pVtxBuffer->getVertexData()->getVtxNum() * sizeof(Vec));
|
||||
pVtxBuffer->setCurrentVtxPos(transformedVtxPos);
|
||||
}
|
||||
|
||||
/* 8032DA1C-8032DB50 32835C 0134+00 1/1 0/0 0/0 .text
|
||||
* deformFastVtxNrm_F32__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer */
|
||||
void J3DSkinDeform::deformFastVtxNrm_F32(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) const {
|
||||
param_0->swapTransformedVtxNrm();
|
||||
J3DJointTree* jointTree = param_1->getJointTree();
|
||||
int nrmNum = param_0->getVertexData()->getNrmNum();
|
||||
void* currentVtxNrm = param_0->getCurrentVtxNrm();
|
||||
void* transformedVtxNrm = param_0->getTransformedVtxNrm(0);
|
||||
void J3DSkinDeform::deformFastVtxNrm_F32(J3DVertexBuffer* pVtxBuffer, J3DMtxBuffer* pMtxBuffer) const {
|
||||
pVtxBuffer->swapTransformedVtxNrm();
|
||||
J3DJointTree* jointTree = pMtxBuffer->getJointTree();
|
||||
int nrmNum = pVtxBuffer->getVertexData()->getNrmNum();
|
||||
int sp18 = jointTree->getDrawMtxNum();
|
||||
void* currentVtxNrm = pVtxBuffer->getCurrentVtxNrm();
|
||||
void* transformedVtxNrm = pVtxBuffer->getTransformedVtxNrm(0);
|
||||
|
||||
for (int i = 0; i < nrmNum; i++) {
|
||||
((Vec*)transformedVtxNrm)[i].x = 0.0f;
|
||||
((Vec*)transformedVtxNrm)[i].y = 0.0f;
|
||||
((Vec*)transformedVtxNrm)[i].z = 0.0f;
|
||||
((f32*)transformedVtxNrm)[(i * 3) + 0] = 0.0f;
|
||||
((f32*)transformedVtxNrm)[(i * 3) + 1] = 0.0f;
|
||||
((f32*)transformedVtxNrm)[(i * 3) + 2] = 0.0f;
|
||||
}
|
||||
|
||||
if (jointTree->getWEvlpMtxNum() != 0) {
|
||||
u16 jointNum = jointTree->getJointNum();
|
||||
for (u16 i = 0; i < jointNum; i++) {
|
||||
mSkinNList[i].calcSkin_VtxNrmF32(mPosMtx[i], currentVtxNrm, transformedVtxNrm);
|
||||
J3DSkinNList* skinList = mSkinNList + i;
|
||||
skinList->calcSkin_VtxNrmF32(mPosMtx[i], currentVtxNrm, transformedVtxNrm);
|
||||
}
|
||||
} else {
|
||||
u16 jointNum = jointTree->getJointNum();
|
||||
for (u16 i = 0; i < jointNum; i++) {
|
||||
J3DSkinNList* skinList = mSkinNList + i;
|
||||
skinList->calcSkin_VtxNrmF32(param_1->getAnmMtx(i), currentVtxNrm, transformedVtxNrm);
|
||||
skinList->calcSkin_VtxNrmF32(pMtxBuffer->getAnmMtx(i), currentVtxNrm, transformedVtxNrm);
|
||||
}
|
||||
}
|
||||
DCStoreRange(param_0->getTransformedVtxNrm(0), param_0->getVertexData()->getNrmNum() * sizeof(Vec));
|
||||
param_0->setCurrentVtxNrm(transformedVtxNrm);
|
||||
|
||||
DCStoreRange(pVtxBuffer->getTransformedVtxNrm(0), pVtxBuffer->getVertexData()->getNrmNum() * sizeof(Vec));
|
||||
pVtxBuffer->setCurrentVtxNrm(transformedVtxNrm);
|
||||
}
|
||||
|
||||
/* 8032DB50-8032DC74 328490 0124+00 1/1 0/0 0/0 .text
|
||||
* deformVtxPos_F32__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer */
|
||||
// NONMATCHING - J3DPSMulMtxVec regalloc
|
||||
void J3DSkinDeform::deformVtxPos_F32(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) const {
|
||||
void J3DSkinDeform::deformVtxPos_F32(J3DVertexBuffer* pVtxBuffer, J3DMtxBuffer* pMtxBuffer) const {
|
||||
Mtx* anmMtx = NULL;
|
||||
Mtx* anmMtxs[2];
|
||||
anmMtxs[0] = (Mtx*)param_1->getAnmMtx(0);
|
||||
anmMtxs[1] = (Mtx*)param_1->getWeightAnmMtx(0);
|
||||
param_0->swapTransformedVtxPos();
|
||||
J3DJointTree* jointTree = param_1->getJointTree();
|
||||
int vtxNum = param_0->getVertexData()->getVtxNum();
|
||||
void* currentVtxPos = param_0->getCurrentVtxPos();
|
||||
void* transformedVtxPos = param_0->getTransformedVtxPos(0);
|
||||
anmMtxs[0] = (Mtx*)pMtxBuffer->getAnmMtx(0);
|
||||
anmMtxs[1] = (Mtx*)pMtxBuffer->getWeightAnmMtx(0);
|
||||
pVtxBuffer->swapTransformedVtxPos();
|
||||
|
||||
J3DJointTree* jointTree = pMtxBuffer->getJointTree();
|
||||
int vtxNum = pVtxBuffer->getVertexData()->getVtxNum();
|
||||
int sp8 = jointTree->getDrawMtxNum();
|
||||
void* currentVtxPos = pVtxBuffer->getCurrentVtxPos();
|
||||
void* transformedVtxPos = pVtxBuffer->getTransformedVtxPos(0);
|
||||
|
||||
for (int i = 0; i < vtxNum; i++) {
|
||||
Mtx* anmMtx = anmMtxs[jointTree->getDrawMtxFlag(mPosData[i])];
|
||||
J3DPSMulMtxVec(anmMtx[jointTree->getDrawMtxIndex(mPosData[i])], ((Vec*)currentVtxPos) + i, ((Vec*)transformedVtxPos) + i);
|
||||
anmMtx = anmMtxs[jointTree->getDrawMtxFlag(mPosData[i])];
|
||||
J3DPSMulMtxVec(anmMtx[jointTree->getDrawMtxIndex(mPosData[i])], (Vec*)(((f32*)currentVtxPos) + (i * 3)), (Vec*)(((f32*)transformedVtxPos) + (i * 3)));
|
||||
}
|
||||
DCStoreRange(param_0->getTransformedVtxPos(0), param_0->getVertexData()->getVtxNum() * sizeof(Vec));
|
||||
param_0->setCurrentVtxPos(transformedVtxPos);
|
||||
|
||||
DCStoreRange(pVtxBuffer->getTransformedVtxPos(0), pVtxBuffer->getVertexData()->getVtxNum() * sizeof(Vec));
|
||||
pVtxBuffer->setCurrentVtxPos(transformedVtxPos);
|
||||
}
|
||||
|
||||
/* 8032DC74-8032DDB8 3285B4 0144+00 1/1 0/0 0/0 .text
|
||||
* deformVtxPos_S16__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer */
|
||||
// NONMATCHING - J3DPSMulMtxVec regalloc
|
||||
void J3DSkinDeform::deformVtxPos_S16(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) const {
|
||||
void J3DSkinDeform::deformVtxPos_S16(J3DVertexBuffer* pVtxBuffer, J3DMtxBuffer* pMtxBuffer) const {
|
||||
Mtx* anmMtx = NULL;
|
||||
Mtx* anmMtxs[2];
|
||||
anmMtxs[0] = (Mtx*)param_1->getAnmMtx(0);
|
||||
anmMtxs[1] = (Mtx*)param_1->getWeightAnmMtx(0);
|
||||
u8 vtxPosFrac = param_0->getVertexData()->getVtxPosFrac();
|
||||
anmMtxs[0] = (Mtx*)pMtxBuffer->getAnmMtx(0);
|
||||
anmMtxs[1] = (Mtx*)pMtxBuffer->getWeightAnmMtx(0);
|
||||
int vtxPosFrac = pVtxBuffer->getVertexData()->getVtxPosFrac();
|
||||
J3DGQRSetup7(vtxPosFrac, 7, vtxPosFrac, 7);
|
||||
param_0->swapTransformedVtxPos();
|
||||
J3DJointTree* jointTree = param_1->getJointTree();
|
||||
int vtxNum = param_0->getVertexData()->getVtxNum();
|
||||
void* currentVtxPos = param_0->getCurrentVtxPos();
|
||||
void* transformedVtxPos = param_0->getTransformedVtxPos(0);
|
||||
pVtxBuffer->swapTransformedVtxPos();
|
||||
|
||||
J3DJointTree* jointTree = pMtxBuffer->getJointTree();
|
||||
int vtxNum = pVtxBuffer->getVertexData()->getVtxNum();
|
||||
int sp8 = jointTree->getDrawMtxNum();
|
||||
void* currentVtxPos = pVtxBuffer->getCurrentVtxPos();
|
||||
void* transformedVtxPos = pVtxBuffer->getTransformedVtxPos(0);
|
||||
|
||||
for (int i = 0; i < vtxNum; i++) {
|
||||
Mtx* anmMtx = anmMtxs[jointTree->getDrawMtxFlag(mPosData[i])];
|
||||
J3DPSMulMtxVec(anmMtx[jointTree->getDrawMtxIndex(mPosData[i])], ((S16Vec*)currentVtxPos) + i, ((S16Vec*)transformedVtxPos) + i);
|
||||
anmMtx = anmMtxs[jointTree->getDrawMtxFlag(mPosData[i])];
|
||||
J3DPSMulMtxVec(anmMtx[jointTree->getDrawMtxIndex(mPosData[i])], (S16Vec*)(((s16*)currentVtxPos) + (i * 3)), (S16Vec*)(((s16*)transformedVtxPos) + (i * 3)));
|
||||
}
|
||||
DCStoreRange(param_0->getTransformedVtxPos(0), param_0->getVertexData()->getVtxNum() * sizeof(S16Vec));
|
||||
param_0->setCurrentVtxPos(transformedVtxPos);
|
||||
|
||||
DCStoreRange(pVtxBuffer->getTransformedVtxPos(0), pVtxBuffer->getVertexData()->getVtxNum() * sizeof(S16Vec));
|
||||
pVtxBuffer->setCurrentVtxPos(transformedVtxPos);
|
||||
}
|
||||
|
||||
/* 8032DDB8-8032DEBC 3286F8 0104+00 1/1 0/0 0/0 .text
|
||||
* deformVtxNrm_F32__13J3DSkinDeformCFP15J3DVertexBuffer */
|
||||
// NONMATCHING - J3DPSMulMtxVec regalloc
|
||||
void J3DSkinDeform::deformVtxNrm_F32(J3DVertexBuffer* param_0) const {
|
||||
param_0->swapTransformedVtxNrm();
|
||||
int nrmNum = param_0->getVertexData()->getNrmNum();
|
||||
void* currentVtxNrm = param_0->getCurrentVtxNrm();
|
||||
void* transformedVtxNrm = param_0->getTransformedVtxNrm(0);
|
||||
void J3DSkinDeform::deformVtxNrm_F32(J3DVertexBuffer* pVtxBuffer) const {
|
||||
pVtxBuffer->swapTransformedVtxNrm();
|
||||
int nrmNum = pVtxBuffer->getVertexData()->getNrmNum();
|
||||
void* currentVtxNrm = pVtxBuffer->getCurrentVtxNrm();
|
||||
void* transformedVtxNrm = pVtxBuffer->getTransformedVtxNrm(0);
|
||||
|
||||
for (int i = 0; i < nrmNum; i++) {
|
||||
J3DPSMulMtxVec(mNrmMtx[mNrmData[i]], (Vec*)((u8*)currentVtxNrm + i * 3 * 4), (Vec*)((u8*)transformedVtxNrm + i * 3 * 4));
|
||||
}
|
||||
DCStoreRange(param_0->getTransformedVtxNrm(0), param_0->getVertexData()->getNrmNum() * sizeof(Vec));
|
||||
param_0->setCurrentVtxNrm(transformedVtxNrm);
|
||||
|
||||
DCStoreRange(pVtxBuffer->getTransformedVtxNrm(0), pVtxBuffer->getVertexData()->getNrmNum() * sizeof(Vec));
|
||||
pVtxBuffer->setCurrentVtxNrm(transformedVtxNrm);
|
||||
}
|
||||
|
||||
/* 8032DEBC-8032DFDC 3287FC 0120+00 1/1 0/0 0/0 .text
|
||||
* deformVtxNrm_S16__13J3DSkinDeformCFP15J3DVertexBuffer */
|
||||
// NONMATCHING - J3DPSMulMtxVec regalloc
|
||||
void J3DSkinDeform::deformVtxNrm_S16(J3DVertexBuffer* param_0) const {
|
||||
u8 vtxNrmFrac = param_0->getVertexData()->getVtxNrmFrac();
|
||||
void J3DSkinDeform::deformVtxNrm_S16(J3DVertexBuffer* pVtxBuffer) const {
|
||||
int vtxNrmFrac = pVtxBuffer->getVertexData()->getVtxNrmFrac();
|
||||
J3DGQRSetup7(vtxNrmFrac, 7, vtxNrmFrac, 7);
|
||||
param_0->swapTransformedVtxNrm();
|
||||
int nrmNum = param_0->getVertexData()->getNrmNum();
|
||||
void* currentVtxNrm = param_0->getCurrentVtxNrm();
|
||||
void* transformedVtxNrm = param_0->getTransformedVtxNrm(0);
|
||||
pVtxBuffer->swapTransformedVtxNrm();
|
||||
|
||||
int nrmNum = pVtxBuffer->getVertexData()->getNrmNum();
|
||||
void* currentVtxNrm = pVtxBuffer->getCurrentVtxNrm();
|
||||
void* transformedVtxNrm = pVtxBuffer->getTransformedVtxNrm(0);
|
||||
|
||||
for (int i = 0; i < nrmNum; i++) {
|
||||
J3DPSMulMtxVec(mNrmMtx[mNrmData[i]], ((S16Vec*)currentVtxNrm) + i, ((S16Vec*)transformedVtxNrm) + i);
|
||||
J3DPSMulMtxVec(mNrmMtx[mNrmData[i]], (S16Vec*)(((s16*)currentVtxNrm) + (i * 3)), (S16Vec*)(((s16*)transformedVtxNrm) + (i * 3)));
|
||||
}
|
||||
DCStoreRange(param_0->getTransformedVtxNrm(0), param_0->getVertexData()->getNrmNum() * sizeof(S16Vec));
|
||||
param_0->setCurrentVtxNrm(transformedVtxNrm);
|
||||
|
||||
DCStoreRange(pVtxBuffer->getTransformedVtxNrm(0), pVtxBuffer->getVertexData()->getNrmNum() * sizeof(S16Vec));
|
||||
pVtxBuffer->setCurrentVtxNrm(transformedVtxNrm);
|
||||
}
|
||||
|
||||
/* 8032DFDC-8032E064 32891C 0088+00 0/0 1/1 0/0 .text deform__13J3DSkinDeformFP8J3DModel
|
||||
*/
|
||||
void J3DSkinDeform::deform(J3DModel* param_0) {
|
||||
if (param_0->checkFlag(4)) {
|
||||
void J3DSkinDeform::deform(J3DModel* pModel) {
|
||||
J3D_ASSERT_NULLPTR(1270, pModel != NULL);
|
||||
|
||||
if (pModel->checkFlag(J3DMdlFlag_SkinPosCpu)) {
|
||||
onFlag(2);
|
||||
} else {
|
||||
offFlag(2);
|
||||
}
|
||||
|
||||
if (param_0->checkFlag(8)) {
|
||||
if (pModel->checkFlag(J3DMdlFlag_SkinNrmCpu)) {
|
||||
onFlag(1);
|
||||
} else {
|
||||
offFlag(1);
|
||||
}
|
||||
deform(param_0->getVertexBuffer(), param_0->getMtxBuffer());
|
||||
|
||||
deform(pModel->getVertexBuffer(), pModel->getMtxBuffer());
|
||||
}
|
||||
|
||||
/* 8032E064-8032E180 3289A4 011C+00 1/0 0/0 0/0 .text
|
||||
* deform__13J3DSkinDeformFP15J3DVertexBufferP12J3DMtxBuffer */
|
||||
void J3DSkinDeform::deform(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) {
|
||||
if (param_1->getJointTree()->checkFlag(0x100)) {
|
||||
calcAnmInvJointMtx(param_1);
|
||||
void J3DSkinDeform::deform(J3DVertexBuffer* pVtxBuffer, J3DMtxBuffer* pMtxBuffer) {
|
||||
J3D_ASSERT_NULLPTR(1299, pVtxBuffer != NULL);
|
||||
J3D_ASSERT_NULLPTR(1300, pMtxBuffer != NULL);
|
||||
|
||||
if (pMtxBuffer->getJointTree()->checkFlag(0x100)) {
|
||||
calcAnmInvJointMtx(pMtxBuffer);
|
||||
}
|
||||
|
||||
if (checkFlag(2) != 0) {
|
||||
if (param_1->getJointTree()->checkFlag(0x100)) {
|
||||
deformFastVtxPos_F32(param_0, param_1);
|
||||
if (pMtxBuffer->getJointTree()->checkFlag(0x100)) {
|
||||
deformFastVtxPos_F32(pVtxBuffer, pMtxBuffer);
|
||||
} else {
|
||||
if (param_0->getVertexData()->getVtxPosType() == 4) {
|
||||
deformVtxPos_F32(param_0, param_1);
|
||||
if (pVtxBuffer->getVertexData()->getVtxPosType() == 4) {
|
||||
deformVtxPos_F32(pVtxBuffer, pMtxBuffer);
|
||||
} else {
|
||||
deformVtxPos_S16(param_0, param_1);
|
||||
deformVtxPos_S16(pVtxBuffer, pMtxBuffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (checkFlag(1) != 0) {
|
||||
if (param_1->getJointTree()->checkFlag(0x100)) {
|
||||
deformFastVtxNrm_F32(param_0, param_1);
|
||||
|
||||
if (checkFlag(1)) {
|
||||
if (pMtxBuffer->getJointTree()->checkFlag(0x100)) {
|
||||
deformFastVtxNrm_F32(pVtxBuffer, pMtxBuffer);
|
||||
} else {
|
||||
calcNrmMtx(param_1);
|
||||
if (param_0->getVertexData()->getVtxNrmType() == 4) {
|
||||
deformVtxNrm_F32(param_0);
|
||||
calcNrmMtx(pMtxBuffer);
|
||||
if (pVtxBuffer->getVertexData()->getVtxNrmType() == 4) {
|
||||
deformVtxNrm_F32(pVtxBuffer);
|
||||
} else {
|
||||
deformVtxNrm_S16(param_0);
|
||||
deformVtxNrm_S16(pVtxBuffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -655,11 +695,10 @@ void J3DSkinDeform::deform(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) {
|
||||
|
||||
/* 8032E180-8032E1B0 328AC0 0030+00 0/0 1/1 0/0 .text calc__15J3DVtxColorCalcFP8J3DModel
|
||||
*/
|
||||
void J3DVtxColorCalc::calc(J3DModel* param_0) {
|
||||
calc(param_0->getVertexBuffer());
|
||||
void J3DVtxColorCalc::calc(J3DModel* pModel) {
|
||||
J3D_ASSERT_NULLPTR(1351, pModel != NULL);
|
||||
calc(pModel->getVertexBuffer());
|
||||
}
|
||||
|
||||
/* 8032E1B0-8032E1F8 328AF0 0048+00 1/0 0/0 0/0 .text __dt__13J3DSkinDeformFv */
|
||||
J3DSkinDeform::~J3DSkinDeform() {}
|
||||
|
||||
/* 803A2028-803A2028 02E688 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
||||
|
||||
Reference in New Issue
Block a user