J3DCluster almost matching

This commit is contained in:
LagoLunatic
2025-12-29 14:09:54 -05:00
parent a7421f5f66
commit 10a6460011
6 changed files with 226 additions and 215 deletions
+11
View File
@@ -0,0 +1,11 @@
#ifndef J3DASSERT_H
#define J3DASSERT_H
#include "JSystem/JUtility/JUTAssert.h"
#define J3D_ASSERT_NULLPTR(LINE, COND)
#define J3D_ASSERT_RANGE(LINE, COND)
#define J3D_ASSERT_NONZEROARG(LINE, COND)
#define J3D_ASSERT_ALLOCMEM(LINE, COND)
#endif /* J3DASSERT_H */
+90 -143
View File
@@ -41,173 +41,120 @@ void J3DMtxProjConcat(Mtx, Mtx, Mtx);
void J3DPSMtx33Copy(Mtx3P src, Mtx3P dst);
void J3DPSMtx33CopyFrom34(MtxP src, Mtx3P dst);
// regalloc issues
inline void J3DPSMulMtxVec(register MtxP mtx, register Vec* vec, register Vec* dst) {
register f32 fr12;
register f32 fr11;
register f32 fr10;
register f32 fr9;
register f32 fr8;
register f32 fr6;
register f32 fr5;
register f32 fr4;
register f32 fr3;
register f32 fr2;
register f32 fr1;
register f32 fr0;
#ifdef __MWERKS__
asm {
psq_l fr0, 0(vec), 0, 0
psq_l fr2, 0(mtx), 0, 0
psq_l fr1, 8(vec), 1, 0
ps_mul fr4, fr2, fr0
psq_l fr3, 8(mtx), 0, 0
ps_madd fr5, fr3, fr1, fr4
psq_l fr8, 16(mtx), 0, 0
ps_sum0 fr6, fr5, fr6, fr5
psq_l fr9, 24(mtx), 0, 0
ps_mul fr10, fr8, fr0
psq_st fr6, 0(dst), 1, 0
ps_madd fr11, fr9, fr1, fr10
psq_l fr2, 32(mtx), 0, 0
ps_sum0 fr12, fr11, fr12, fr11
psq_l fr3, 40(mtx), 0, 0
ps_mul fr4, fr2, fr0
psq_st fr12, 4(dst), 1, 0
ps_madd fr5, fr3, fr1, fr4
ps_sum0 fr6, fr5, fr6, fr5
psq_st fr6, 8(dst), 1, 0
psq_l f0, 0(vec), 0, 0
psq_l f2, 0(mtx), 0, 0
psq_l f1, 8(vec), 1, 0
ps_mul f4, f2, f0
psq_l f3, 8(mtx), 0, 0
ps_madd f5, f3, f1, f4
psq_l f8, 16(mtx), 0, 0
ps_sum0 f6, f5, f6, f5
psq_l f9, 24(mtx), 0, 0
ps_mul f10, f8, f0
psq_st f6, 0(dst), 1, 0
ps_madd f11, f9, f1, f10
psq_l f2, 32(mtx), 0, 0
ps_sum0 f12, f11, f12, f11
psq_l f3, 40(mtx), 0, 0
ps_mul f4, f2, f0
psq_st f12, 4(dst), 1, 0
ps_madd f5, f3, f1, f4
ps_sum0 f6, f5, f6, f5
psq_st f6, 8(dst), 1, 0
}
#endif
}
// regalloc issues
inline void J3DPSMulMtxVec(register MtxP mtx, register SVec* vec, register SVec* dst) {
register f32 fr12;
register f32 fr11;
register f32 fr10;
register f32 fr9;
register f32 fr8;
register f32 fr6;
register f32 fra6;
register f32 fr5;
register f32 fra5;
register f32 fra4;
register f32 fr4;
register f32 fr3;
register f32 fr2;
register f32 fra2;
register f32 fr01;
register f32 fr00;
inline void J3DPSMulMtxVec(register MtxP mtx, register S16Vec* vec, register S16Vec* dst) {
#ifdef __MWERKS__
asm {
psq_l fr00, 0(vec), 0, 7
psq_l fr2, 0(mtx), 0, 0
psq_l fr01, 4(vec), 1, 7
ps_mul fr4, fr2, fr00
psq_l fr3, 8(mtx), 0, 0
ps_madd fr5, fr3, fr01, fr4
psq_l fr8, 16(mtx), 0, 0
ps_sum0 fr6, fr5, fr6, fr5
psq_l fr9, 24(mtx), 0, 0
ps_mul fr10, fr8, fr00
psq_st fr6, 0(dst), 1, 7
ps_madd fr11, fr9, fr01, fr10
psq_l fra2, 32(mtx), 0, 0
ps_sum0 fr12, fr11, fr12, fr11
psq_l fr3, 40(mtx), 0, 0
ps_mul fra4, fra2, fr00
psq_st fr12, 2(dst), 1, 7
ps_madd fra5, fr3, fr01, fra4
ps_sum0 fra6, fra5, fra6, fra5
psq_st fra6, 4(dst), 1, 7
psq_l f0, 0(vec), 0, 7
psq_l f2, 0(mtx), 0, 0
psq_l f1, 4(vec), 1, 7
ps_mul f4, f2, f0
psq_l f3, 8(mtx), 0, 0
ps_madd f5, f3, f1, f4
psq_l f8, 16(mtx), 0, 0
ps_sum0 f6, f5, f6, f5
psq_l f9, 24(mtx), 0, 0
ps_mul f10, f8, f0
psq_st f6, 0(dst), 1, 7
ps_madd f11, f9, f1, f10
psq_l f2, 32(mtx), 0, 0
ps_sum0 f12, f11, f12, f11
psq_l f3, 40(mtx), 0, 0
ps_mul f4, f2, f0
psq_st f12, 2(dst), 1, 7
ps_madd f5, f3, f1, f4
ps_sum0 f6, f5, f6, f5
psq_st f6, 4(dst), 1, 7
}
#endif
}
// regalloc issues
inline void J3DPSMulMtxVec(register Mtx3P mtx, register Vec* vec, register Vec* dst) {
register f32* punit;
register f32 unit;
register f32 fr12;
register f32 fr11;
register f32 fr10;
register f32 fr9;
register f32 fr8;
register f32 fr6;
register f32 fr5;
register f32 fr4;
register f32 fr3;
register f32 fr2;
register f32 fr01;
register f32 fr00;
#ifdef __MWERKS__
asm {
lis punit, PSMulUnit01@ha
psq_l fr00, 0(vec), 0, 0
addi punit, punit, PSMulUnit01@l
psq_l fr2, 0(mtx), 0, 0
psq_l unit, 0(punit), 0, 0
psq_l fr01, 8(vec), 1, 0
ps_add fr01, unit, fr01
psq_l fr3, 8(mtx), 1, 0
ps_mul fr4, fr2, fr00
psq_l fr8, 12(mtx), 0, 0
ps_madd fr5, fr3, fr01, fr4
ps_sum0 fr6, fr5, fr6, fr5
psq_l fr9, 20(mtx), 1, 0
ps_mul fr10, fr8, fr00
psq_st fr6, 0(dst), 1, 0
ps_madd fr11, fr9, fr01, fr10
psq_l fr2, 24(mtx), 0, 0
ps_sum0 fr12, fr11, fr12, fr11
psq_l fr3, 32(mtx), 1, 0
ps_mul fr4, fr2, fr00
psq_st fr12, 4(dst), 1, 0
ps_madd fr5, fr3, fr01, fr4
ps_sum0 fr6, fr5, fr6, fr5
psq_st fr6, 8(dst), 1, 0
lis r6, PSMulUnit01@ha
psq_l f0, 0(vec), 0, 0
addi r6, r6, PSMulUnit01@l
psq_l f2, 0(mtx), 0, 0
psq_l f13, 0(r6), 0, 0
psq_l f1, 8(vec), 1, 0
ps_add f1, f13, f1
psq_l f3, 8(mtx), 1, 0
ps_mul f4, f2, f0
psq_l f8, 12(mtx), 0, 0
ps_madd f5, f3, f1, f4
ps_sum0 f6, f5, f6, f5
psq_l f9, 20(mtx), 1, 0
ps_mul f10, f8, f0
psq_st f6, 0(dst), 1, 0
ps_madd f11, f9, f1, f10
psq_l f2, 24(mtx), 0, 0
ps_sum0 f12, f11, f12, f11
psq_l f3, 32(mtx), 1, 0
ps_mul f4, f2, f0
psq_st f12, 4(dst), 1, 0
ps_madd f5, f3, f1, f4
ps_sum0 f6, f5, f6, f5
psq_st f6, 8(dst), 1, 0
}
#endif
}
// regalloc issues
inline void J3DPSMulMtxVec(register Mtx3P mtx, register SVec* vec, register SVec* dst) {
register f32* punit;
register f32 unit;
register f32 fr6;
register f32 fr5;
register f32 fr4;
register f32 fr3;
register f32 fr2;
register f32 fr01;
register f32 fr00;
inline void J3DPSMulMtxVec(register Mtx3P mtx, register S16Vec* vec, register S16Vec* dst) {
#ifdef __MWERKS__
asm {
lis punit, PSMulUnit01@ha
psq_l fr00, 0(vec), 0, 7
addi punit, punit, PSMulUnit01@l
psq_l fr2, 0(mtx), 0, 0
psq_l unit, 0(punit), 0, 0
psq_l fr01, 4(vec), 1, 7
ps_add fr01, unit, fr01
psq_l fr3, 8(mtx), 1, 0
ps_mul fr4, fr2, fr00
psq_l fr2, 12(mtx), 0, 0
ps_madd fr5, fr3, fr01, fr4
ps_sum0 fr6, fr5, fr6, fr5
psq_l fr3, 20(mtx), 1, 0
ps_mul fr4, fr2, fr00
psq_st fr6, 0(dst), 1, 7
ps_madd fr5, fr3, fr01, fr4
psq_l fr2, 24(mtx), 0, 0
ps_sum0 fr6, fr5, fr6, fr5
psq_l fr3, 32(mtx), 1, 0
ps_mul fr4, fr2, fr00
psq_st fr6, 2(dst), 1, 7
ps_madd fr5, fr3, fr01, fr4
ps_sum0 fr6, fr5, fr6, fr5
psq_st fr6, 4(dst), 1, 7
lis r6, PSMulUnit01@ha
psq_l f0, 0(vec), 0, 7
addi r6, r6, PSMulUnit01@l
psq_l f2, 0(mtx), 0, 0
psq_l f13, 0(r6), 0, 0
psq_l f1, 4(vec), 1, 7
ps_add f1, f13, f1
psq_l f3, 8(mtx), 1, 0
ps_mul f4, f2, f0
psq_l f8, 12(mtx), 0, 0
ps_madd f5, f3, f1, f4
ps_sum0 f6, f5, f6, f5
psq_l f9, 20(mtx), 1, 0
ps_mul f10, f8, f0
psq_st f6, 0(dst), 1, 7
ps_madd f11, f9, f1, f10
psq_l f2, 24(mtx), 0, 0
ps_sum0 f12, f11, f12, f11
psq_l f3, 32(mtx), 1, 0
ps_mul f4, f2, f0
psq_st f12, 2(dst), 1, 7
ps_madd f5, f3, f1, f4
ps_sum0 f6, f5, f6, f5
psq_st f6, 4(dst), 1, 7
}
#endif
}
+4
View File
@@ -19,6 +19,10 @@ typedef struct SVec {
s16 x, y, z;
} SVec;
typedef struct S16Vec {
s16 x, y, z;
} S16Vec;
void C_VECAdd(const Vec* a, const Vec* b, Vec* ab);
void PSVECAdd(const Vec* a, const Vec* b, Vec* ab);
void C_VECSubtract(const Vec* a, const Vec* b, Vec* a_b);
+64 -72
View File
@@ -10,8 +10,10 @@
#include "JSystem/J3DGraphAnimator/J3DSkinDeform.h"
#include "JSystem/J3DGraphAnimator/J3DAnimation.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "JSystem/J3DAssert.h"
#include "dolphin/os/OS.h"
#include "string.h"
#include "stdint.h"
/* 802F37C4-802F37E4 .text clear__13J3DDeformDataFv */
void J3DDeformData::clear() {
@@ -75,8 +77,8 @@ void J3DDeformer::deform(J3DVertexBuffer* vtx, u16 idx, f32* weightList) {
/* Nonmatching */
if (checkFlag(2) && vtx->getVertexData()->getVtxPosType() == GX_F32) {
J3DCluster* cluster = mDeformData->getClusterPointer(idx);
s32 posNum = cluster->mPosNum;
s32 keyNum = cluster->mKeyNum;
int posNum = cluster->mPosNum;
int keyNum = cluster->mKeyNum;
u16 keyStart = 0;
for (u16 i = 0; i < idx; i++)
@@ -88,7 +90,7 @@ void J3DDeformer::deform(J3DVertexBuffer* vtx, u16 idx, f32* weightList) {
f32* vtxPosDst = (f32*)vtx->getVtxPosArrayPointer(0);
f32* vtxPosSrc = (f32*)mDeformData->getVtxPos();
for (s32 i = 0; i < posNum; i++) {
for (int i = 0; i < posNum; i++) {
f32* vtx = &vtxPosDst[cluster->mPosDstIdx[i] * 3];
vtx[0] = 0.0f;
vtx[1] = 0.0f;
@@ -228,8 +230,6 @@ J3DSkinDeform::J3DSkinDeform() {
/* 802F40F0-802F44E8 .text initMtxIndexArray__13J3DSkinDeformFP12J3DModelData */
int J3DSkinDeform::initMtxIndexArray(J3DModelData* modelData) {
/* Nonmatching - operand swap */
if (mPosUseMtx != NULL && mNrmUseMtx != NULL)
return J3DErrType_Success;
@@ -271,18 +271,26 @@ int J3DSkinDeform::initMtxIndexArray(J3DModelData* modelData) {
posOffs = vtxSize;
if (desc->type != GX_INDEX16) {
OSReport(" Invlid Data : CPU Pipeline process GX_INDEX16 Data Only\n");
#if VERSION == VERSION_DEMO
return; // !@bug: No return value
#endif
}
break;
case GX_VA_NRM:
nrmOffs = vtxSize;
if (desc->type != GX_INDEX16) {
OSReport(" Invlid Data : CPU Pipeline process GX_INDEX16 Data Only\n");
#if VERSION == VERSION_DEMO
return; // !@bug: No return value
#endif
}
break;
case GX_VA_TEX0:
#if VERSION > VERSION_DEMO
if (desc->type != GX_INDEX16) {
OSReport(" Invlid Data : CPU Pipeline process GX_INDEX16 Data Only\n");
}
#endif
break;
default:
break;
@@ -296,18 +304,20 @@ int J3DSkinDeform::initMtxIndexArray(J3DModelData* modelData) {
u8* displayListStart = modelData->getShapeNodePointer(i)->getShapeDraw(j)->getDisplayList();
for (u8* dl = displayListStart; (dl - displayListStart) < modelData->getShapeNodePointer(i)->getShapeDraw(j)->getDisplayListSize(); ) {
u8 cmd = dl[0];
u8 cmd = *dl;
dl++;
if (cmd != GX_TRIANGLEFAN && cmd != GX_TRIANGLESTRIP)
break;
u16 vtxCount = *(u16*)&dl[1];
int vtxCount = *(u16*)dl;
dl += 2;
u16 useMtxIdxBuf[10];
for (s32 k = 0; k < vtxCount; k++) {
u8* vtx = &dl[3 + vtxSize * k];
u8 pnmtxIdx = (u32)*(u8*)&vtx[pnmtxIdxOffs] / 3;
u16 posIdx = *(u16*)&vtx[posOffs];
u16 nrmIdx = *(u16*)&vtx[nrmOffs];
for (int k = 0; k < vtxCount; k++) {
u8* src = &dl[vtxSize * k];
u8 pnmtxIdx = (u32)*(u8*)&src[pnmtxIdxOffs] / 3;
u16 posIdx = *(u16*)&src[posOffs];
u16 nrmIdx = *(u16*)&src[nrmOffs];
u16 useMtxIdx = shapeMtx->getUseMtxIndex(pnmtxIdx);
if (useMtxIdx == 0xFFFF) {
@@ -321,8 +331,7 @@ int J3DSkinDeform::initMtxIndexArray(J3DModelData* modelData) {
mNrmUseMtx[nrmIdx] = useMtxIdx;
}
dl += vtxSize * vtxCount;
dl += 3;
dl = (u8*)dl + vtxSize * vtxCount;
}
if (nrmOffs == -1) {
@@ -342,69 +351,66 @@ int J3DSkinDeform::initMtxIndexArray(J3DModelData* modelData) {
return J3DErrType_Success;
}
/* 802F44E8-802F4734 .text changeFastSkinDL__13J3DSkinDeformFP12J3DModelData */
void J3DSkinDeform::changeFastSkinDL(J3DModelData* modelData) {
/* Nonmatching */
for (u16 i = 0; i < modelData->getShapeNum(); i++) {
int size[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 pnmtxIdxOffs = -1;
int vtxSize = 0;
for (GXVtxDescList* desc = modelData->getShapeNodePointer(i)->getVtxDesc(); desc->attr != GX_VA_NULL; desc++) {
if (desc->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) {
pnmtxIdxOffs = vtxSize;
}
vtxSize += size[desc->type];
vtxSize += kSize[vtxDesc->type];
}
if (pnmtxIdxOffs != -1) {
for (u16 j = 0; j < modelData->getShapeNodePointer(i)->getMtxGroupNum(); j++) {
J3DShapeDraw* shapeDraw = modelData->getShapeNodePointer(i)->getShapeDraw(j);
u8* displayListStart = shapeDraw->getDisplayList();
for (u16 j = 0; j < (u16)pShapeNode->getMtxGroupNum(); j++) {
u8* displayListStart = pShapeNode->getShapeDraw(j)->getDisplayList();
u8* dl = displayListStart;
u8* dst = displayListStart;
for (; (dl - displayListStart) < shapeDraw->getDisplayListSize(); ) {
u8 cmd = dl[0];
*dst = cmd;
dst += 1;
while ((dl - displayListStart) < pShapeNode->getShapeDraw(j)->getDisplayListSize()) {
u8 cmd = *dl;
dl++;
*dst++ = cmd;
if (cmd != GX_TRIANGLEFAN && cmd != GX_TRIANGLESTRIP)
break;
u32 vtxCount = *(u16*)&dl[1];
int vtxCount = *(u16*)dl;
dl += 2;
*(u16*)dst = vtxCount;
dst += 2;
u32 vtxSizeDst = vtxSize - 1; // remove GX_VA_PNMTXIDX
for (s32 k = 0; k < vtxCount; k++) {
memcpy(dst, &dl[vtxSize * k + 3 + 1], vtxSizeDst);
dst += vtxSizeDst;
for (int k = 0; k < vtxCount; k++) {
u8* src = &dl[vtxSize * k];
memcpy(dst, src + 1, (int)(vtxSize - 1)); // The -1 is to remove GX_VA_PNMTXIDX
dst += (int)(vtxSize - 1);
}
dl += vtxSize * vtxCount + 3;
dl = (u8*)dl + vtxSize * vtxCount;
}
u32 newSize = ((u32)dst + 0x1F & ~0x1F) - (u32)displayListStart;
for (; (dst - displayListStart) < modelData->getShapeNodePointer(i)->getShapeDraw(j)->getDisplayListSize();) {
int dlistSize = ((intptr_t)dst - (intptr_t)displayListStart + 0x1f) & ~0x1f;
while ((intptr_t)dst - (intptr_t)displayListStart < pShapeNode->getShapeDraw(j)->getDisplayListSize()) {
*dst++ = 0;
}
shapeDraw->setDisplayListSize(newSize);
DCStoreRange(displayListStart, shapeDraw->getDisplayListSize());
pShapeNode->getShapeDraw(j)->setDisplayListSize(dlistSize);
DCStoreRange(displayListStart, pShapeNode->getShapeDraw(j)->getDisplayListSize());
}
}
}
for (u16 i = 0; i < modelData->getShapeNum(); i++) {
J3DShape* shape = modelData->getShapeNodePointer(i);
for (u16 i = 0; i < pModelData->getShapeNum(); i++) {
J3DShape* shape = pModelData->getShapeNodePointer(i);
GXVtxDescList* desc = shape->getVtxDesc();
GXVtxDescList* descDst = desc;
for (; desc->attr != GX_VA_NULL; desc++) {
if (desc->attr != GX_VA_PNMTXIDX) {
*descDst = *desc;
descDst->attr = desc->attr;
descDst->type = desc->type;
descDst++;
}
}
@@ -434,23 +440,18 @@ void J3DSkinDeform::calcNrmMtx(J3DModel* model) {
}
}
#ifdef DEBUG
#pragma push
#pragma optimization_level 1
#endif
/* 802F4850-802F4974 .text deformVtxPos_F32__13J3DSkinDeformCFP8J3DModel */
void J3DSkinDeform::deformVtxPos_F32(J3DModel* model) const {
/* Nonmatching - J3DPSMulMtxVec regalloc */
Mtx* mtxArr[2];
mtxArr[0] = (Mtx*)model->getAnmMtx(0);
mtxArr[1] = (Mtx*)model->getWeightAnmMtx(0);
model->getVertexBuffer()->swapTransformedVtxPos();
s32 vtxNum = model->getModelData()->getVtxNum();
int vtxNum = model->getModelData()->getVtxNum();
Vec* curVtxPos = (Vec*)model->getCurrentVtxPos();
Vec* transformedVtxPos = (Vec*)model->getVertexBuffer()->getTransformedVtxPos(0);
for (s32 i = 0; i < vtxNum; i++) {
for (int i = 0; i < vtxNum; i++) {
Mtx* mtx = mtxArr[model->getModelData()->getDrawMtxFlag(mPosUseMtx[i])];
J3DPSMulMtxVec(mtx[model->getModelData()->getDrawMtxIndex(mPosUseMtx[i])], &curVtxPos[i], &transformedVtxPos[i]);
}
@@ -458,13 +459,9 @@ void J3DSkinDeform::deformVtxPos_F32(J3DModel* model) const {
DCStoreRange(model->getVertexBuffer()->getTransformedVtxPos(0), model->getModelData()->getVtxNum() * sizeof(Vec));
model->setCurrentVtxPos(transformedVtxPos);
}
#ifdef DEBUG
#pragma pop
#endif
/* 802F4974-802F4AB4 .text deformVtxPos_S16__13J3DSkinDeformCFP8J3DModel */
void J3DSkinDeform::deformVtxPos_S16(J3DModel* model) const {
/* Nonmatching - J3DPSMulMtxVec regalloc */
Mtx* mtxArr[2];
mtxArr[0] = (Mtx*)model->getAnmMtx(0);
mtxArr[1] = (Mtx*)model->getWeightAnmMtx(0);
@@ -472,16 +469,13 @@ void J3DSkinDeform::deformVtxPos_S16(J3DModel* model) const {
J3DGQRSetup7(model->getModelData()->getVertexData().getVtxPosFrac(), 7, model->getModelData()->getVertexData().getVtxPosFrac(), 7);
model->getVertexBuffer()->swapTransformedVtxPos();
s32 vtxNum = model->getModelData()->getVtxNum();
SVec* curVtxPos = (SVec*)model->getCurrentVtxPos();
SVec* transformedVtxPos = (SVec*)model->getVertexBuffer()->getTransformedVtxPos(0);
int vtxNum = model->getModelData()->getVtxNum();
S16Vec* curVtxPos = (S16Vec*)model->getCurrentVtxPos();
S16Vec* transformedVtxPos = (S16Vec*)model->getVertexBuffer()->getTransformedVtxPos(0);
for (s32 i = 0; i < vtxNum; i++) {
for (int i = 0; i < vtxNum; i++) {
Mtx* mtx = mtxArr[model->getModelData()->getDrawMtxFlag(mPosUseMtx[i])];
// TODO: this line doesn't compile on debug
#ifndef DEBUG
J3DPSMulMtxVec(mtx[model->getModelData()->getDrawMtxIndex(mPosUseMtx[i])], &curVtxPos[i], &transformedVtxPos[i]);
#endif
}
DCStoreRange(model->getVertexBuffer()->getTransformedVtxPos(0), model->getModelData()->getVtxNum() * sizeof(SVec));
@@ -490,14 +484,13 @@ void J3DSkinDeform::deformVtxPos_S16(J3DModel* model) const {
/* 802F4AB4-802F4BB8 .text deformVtxNrm_F32__13J3DSkinDeformCFP8J3DModel */
void J3DSkinDeform::deformVtxNrm_F32(J3DModel* model) const {
/* Nonmatching - J3DPSMulMtxVec regalloc */
model->getVertexBuffer()->swapTransformedVtxNrm();
s32 vtxNum = model->getModelData()->getNrmNum();
int vtxNum = model->getModelData()->getNrmNum();
Vec* curVtxNrm = (Vec*)model->getCurrentVtxNrm();
Vec* transformedVtxNrm = (Vec*)model->getVertexBuffer()->getTransformedVtxNrm(0);
for (s32 i = 0; i < vtxNum; i++) {
for (int i = 0; i < vtxNum; i++) {
J3DPSMulMtxVec(mNrmMtx[mNrmUseMtx[i]], &curVtxNrm[i], &transformedVtxNrm[i]);
}
@@ -507,15 +500,14 @@ void J3DSkinDeform::deformVtxNrm_F32(J3DModel* model) const {
/* 802F4BB8-802F4CD8 .text deformVtxNrm_S16__13J3DSkinDeformCFP8J3DModel */
void J3DSkinDeform::deformVtxNrm_S16(J3DModel* model) const {
/* Nonmatching - J3DPSMulMtxVec regalloc */
J3DGQRSetup7(model->getModelData()->getVertexData().getVtxNrmFrac(), 7, model->getModelData()->getVertexData().getVtxNrmFrac(), 7);
model->getVertexBuffer()->swapTransformedVtxNrm();
s32 vtxNum = model->getModelData()->getNrmNum();
SVec* curVtxNrm = (SVec*)model->getCurrentVtxNrm();
SVec* transformedVtxNrm = (SVec*)model->getVertexBuffer()->getTransformedVtxNrm(0);
int vtxNum = model->getModelData()->getNrmNum();
S16Vec* curVtxNrm = (S16Vec*)model->getCurrentVtxNrm();
S16Vec* transformedVtxNrm = (S16Vec*)model->getVertexBuffer()->getTransformedVtxNrm(0);
for (s32 i = 0; i < vtxNum; i++) {
for (int i = 0; i < vtxNum; i++) {
J3DPSMulMtxVec(mNrmMtx[mNrmUseMtx[i]], &curVtxNrm[i], &transformedVtxNrm[i]);
}
@@ -0,0 +1,30 @@
#ifndef MSL_CSTDINT_H_
#define MSL_CSTDINT_H_
#ifdef __cplusplus
namespace std {
extern "C" {
#endif
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;
typedef signed char int8_t;
typedef short int16_t;
typedef long int32_t;
typedef unsigned long long uint64_t;
typedef long long int64_t;
typedef uint32_t uintptr_t;
typedef int32_t intptr_t;
typedef long long intmax_t;
#ifdef __cplusplus
};
}
#endif
#endif
@@ -0,0 +1,27 @@
#ifndef STDINT_H
#define STDINT_H
#ifndef MSL_STDINT_H_
#define MSL_STDINT_H_
#include <cstdint.h>
#ifdef __cplusplus
using std::uint8_t;
using std::uint16_t;
using std::uint32_t;
using std::int8_t;
using std::int16_t;
using std::int32_t;
using std::uint64_t;
using std::int64_t;
using std::uintptr_t;
using std::intptr_t;
#endif
#endif
#endif /* STDINT_H */