This commit is contained in:
Caroline Madsen
2024-10-15 23:59:31 +03:00
committed by GitHub
parent 9895999b7b
commit 9f58034704
26 changed files with 1502 additions and 1647 deletions
+1 -31
View File
@@ -1,6 +1,7 @@
#ifndef J2DANIMATION_H
#define J2DANIMATION_H
#include "JSystem/JMath/JMath.h"
#include "JSystem/J3DGraphAnimator/J3DAnimation.h"
typedef struct _GXColor GXColor;
@@ -468,37 +469,6 @@ public:
template <typename T>
inline f32 J2DHermiteInterpolation(f32, T*, T*, T*, T*, T*, T*);
inline f32 JMAHermiteInterpolation(register f32 p1, register f32 p2, register f32 p3,
register f32 p4, register f32 p5, register f32 p6,
register f32 p7) {
register f32 ff25;
register f32 ff31;
register f32 ff30;
register f32 ff29;
register f32 ff28;
register f32 ff27;
register f32 ff26;
// clang-format off
asm {
fsubs ff31, p1, p2
fsubs ff30, p5, p2
fdivs ff29, ff31, ff30
fmuls ff28,ff29,ff29
fadds ff25,ff29,ff29
fsubs ff27,ff28,ff29
fsubs ff30, p3, p6
fmsubs ff26,ff25,ff27,ff28
fmadds ff25,p4,ff27,p4
fmadds ff26,ff26,ff30,p3
fmadds ff25,p7,ff27,ff25
fmsubs ff25,ff29,p4,ff25
fnmsubs ff25,ff31,ff25,ff26
}
// clang-format on
return ff25;
}
template <>
inline f32 J2DHermiteInterpolation<f32>(f32 f1, f32* f2, f32* f3, f32* f4, f32* f5, f32* f6,
f32* f7) {
+52 -52
View File
@@ -464,7 +464,7 @@ public:
mFrame = 0.0f;
}
virtual ~J3DAnmBase();
virtual ~J3DAnmBase() {}
virtual s32 getKind() const = 0;
u8 getAttribute() const { return mAttribute; }
@@ -486,7 +486,7 @@ class J3DAnmTransform : public J3DAnmBase {
public:
/* 80328E40 */ J3DAnmTransform(s16, f32*, s16*, f32*);
/* 8003B93C */ virtual ~J3DAnmTransform();
/* 8003B93C */ virtual ~J3DAnmTransform() {}
/* 8003C77C */ virtual s32 getKind() const;
virtual void getTransform(u16, J3DTransformInfo*) const = 0;
@@ -528,8 +528,8 @@ class J3DAnmTransformFull : public J3DAnmTransform {
public:
J3DAnmTransformFull() : J3DAnmTransform(0, NULL, NULL, NULL) { mAnmTable = NULL; }
/* 8032C2AC */ virtual ~J3DAnmTransformFull();
/* 8032C318 */ virtual s32 getKind() const;
/* 8032C2AC */ virtual ~J3DAnmTransformFull() {}
/* 8032C318 */ virtual s32 getKind() const { return 9; }
/* 80328E90 */ virtual void getTransform(u16, J3DTransformInfo*) const;
/* 0x20 */ J3DAnmTransformFullTable* mAnmTable;
@@ -541,8 +541,8 @@ public:
*/
class J3DAnmTransformFullWithLerp : public J3DAnmTransformFull {
public:
/* 8032C228 */ virtual ~J3DAnmTransformFullWithLerp();
/* 8032C2A4 */ virtual s32 getKind() const;
/* 8032C228 */ virtual ~J3DAnmTransformFullWithLerp() {}
/* 8032C2A4 */ virtual s32 getKind() const { return 16; }
/* 803291F0 */ virtual void getTransform(u16, J3DTransformInfo*) const;
}; // Size: 0x24
@@ -561,8 +561,8 @@ public:
/* 8032B0C0 */ void searchUpdateMaterialID(J3DMaterialTable*);
/* 8032B1D4 */ void searchUpdateMaterialID(J3DModelData*);
/* 8032C198 */ virtual ~J3DAnmTextureSRTKey();
/* 8032C220 */ virtual s32 getKind() const;
/* 8032C198 */ virtual ~J3DAnmTextureSRTKey() {}
/* 8032C220 */ virtual s32 getKind() const { return 4; }
void getTransform(u16 param_0, J3DTextureSRTInfo* pSRTInfo) const {
calcTransform(getFrame(), param_0, pSRTInfo);
@@ -615,8 +615,8 @@ public:
/* 8032B004 */ void searchUpdateMaterialID(J3DMaterialTable*);
/* 8032B09C */ void searchUpdateMaterialID(J3DModelData*);
/* 8032BD20 */ virtual ~J3DAnmTexPattern();
/* 8032BD94 */ virtual s32 getKind() const;
/* 8032BD20 */ virtual ~J3DAnmTexPattern() {}
/* 8032BD94 */ virtual s32 getKind() const { return 2; }
u16 getUpdateMaterialID(u16 idx) const { return mUpdateMaterialID[idx]; }
u16 getUpdateMaterialNum() const { return mUpdateMaterialNum; }
@@ -643,8 +643,8 @@ public:
/* 8032B780 */ void searchUpdateMaterialID(J3DMaterialTable*);
/* 8032B87C */ void searchUpdateMaterialID(J3DModelData*);
/* 8032BD9C */ virtual ~J3DAnmTevRegKey();
/* 8032BE24 */ virtual s32 getKind() const;
/* 8032BD9C */ virtual ~J3DAnmTevRegKey() {}
/* 8032BE24 */ virtual s32 getKind() const { return 5; }
u16 getCRegUpdateMaterialNum() const { return mCRegUpdateMaterialNum; }
u16 getKRegUpdateMaterialNum() const { return mKRegUpdateMaterialNum; }
@@ -693,9 +693,9 @@ public:
/* 8032A828 */ J3DAnmColor();
/* 8032A8A4 */ void searchUpdateMaterialID(J3DMaterialTable*);
/* 8032BCAC */ virtual ~J3DAnmColor();
/* 8032BF44 */ virtual s32 getKind() const;
/* 8032BF4C */ virtual void getColor(u16, _GXColor*) const;
/* 8032BCAC */ virtual ~J3DAnmColor() {}
/* 8032BF44 */ virtual s32 getKind() const { return 1; }
/* 8032BF4C */ virtual void getColor(u16, GXColor*) const {}
u16 getUpdateMaterialNum() const { return mUpdateMaterialNum; }
bool isValidUpdateMaterialID(u16 id) const { return mUpdateMaterialID[id] != 0xFFFF; }
@@ -718,15 +718,15 @@ class J3DAnmColorKey : public J3DAnmColor {
public:
/* 8032AB00 */ J3DAnmColorKey();
/* 8032BE2C */ virtual ~J3DAnmColorKey();
/* 8032BEB0 */ virtual s32 getKind() const;
/* 8032AB54 */ virtual void getColor(u16, _GXColor*) const;
/* 8032BE2C */ virtual ~J3DAnmColorKey() {}
/* 8032BEB0 */ virtual s32 getKind() const { return 11; }
/* 8032AB54 */ virtual void getColor(u16, GXColor*) const;
/* 0x2C */ s16* field_0x2c;
/* 0x30 */ s16* field_0x30;
/* 0x34 */ s16* field_0x34;
/* 0x38 */ s16* field_0x38;
/* 0x3C */ J3DAnmColorKeyTable* field_0x3c;
/* 0x2C */ s16* mColorR;
/* 0x30 */ s16* mColorG;
/* 0x34 */ s16* mColorB;
/* 0x38 */ s16* mColorA;
/* 0x3C */ J3DAnmColorKeyTable* mAnmTable;
};
/**
@@ -737,9 +737,9 @@ class J3DAnmColorFull : public J3DAnmColor {
public:
/* 8032AB00 */ J3DAnmColorFull();
/* 8032BE2C */ virtual ~J3DAnmColorFull();
/* 8032BEB0 */ virtual s32 getKind() const;
/* 8032AB54 */ virtual void getColor(u16, _GXColor*) const;
/* 8032BE2C */ virtual ~J3DAnmColorFull() {}
/* 8032BEB0 */ virtual s32 getKind() const { return 10; }
/* 8032AB54 */ virtual void getColor(u16, GXColor*) const;
/* 0x2C */ u8* mColorR;
/* 0x30 */ u8* mColorG;
@@ -756,9 +756,9 @@ class J3DAnmVtxColor : public J3DAnmBase {
public:
J3DAnmVtxColor();
virtual ~J3DAnmVtxColor();
virtual s32 getKind() const;
virtual void getColor(u8, u16, _GXColor*) const;
virtual ~J3DAnmVtxColor() {}
virtual s32 getKind() const { return 7; }
virtual void getColor(u8, u16, GXColor*) const {}
/* 0x0C */ u16 mAnmTableNum[2];
/* 0x10 */ J3DAnmVtxColorIndexData* mAnmVtxColorIndexData[2];
@@ -772,15 +772,15 @@ class J3DAnmVtxColorKey : public J3DAnmVtxColor {
public:
/* 8032A4E0 */ J3DAnmVtxColorKey();
/* 8032BF50 */ virtual ~J3DAnmVtxColorKey();
/* 8032BFBC */ virtual s32 getKind() const;
/* 8032A53C */ virtual void getColor(u8, u16, _GXColor*) const;
/* 8032BF50 */ virtual ~J3DAnmVtxColorKey() {}
/* 8032BFBC */ virtual s32 getKind() const { return 15; }
/* 8032A53C */ virtual void getColor(u8, u16, GXColor*) const;
/* 0x1C */ J3DAnmColorKeyTable* mpTable[2];
/* 0x24 */ s16* mColorR;
/* 0x28 */ s16* mColorG;
/* 0x2C */ s16* mColorB;
/* 0x30 */ s16* mColorA;
/* 0x18 */ J3DAnmColorKeyTable* mpTable[2];
/* 0x20 */ s16* mColorR;
/* 0x24 */ s16* mColorG;
/* 0x28 */ s16* mColorB;
/* 0x2C */ s16* mColorA;
};
/**
@@ -791,15 +791,15 @@ class J3DAnmVtxColorFull : public J3DAnmVtxColor {
public:
/* 8032A30C */ J3DAnmVtxColorFull();
/* 8032BFC4 */ virtual ~J3DAnmVtxColorFull();
/* 8032C030 */ virtual s32 getKind() const;
/* 8032A368 */ virtual void getColor(u8, u16, _GXColor*) const;
/* 8032BFC4 */ virtual ~J3DAnmVtxColorFull() {}
/* 8032C030 */ virtual s32 getKind() const { return 14; }
/* 8032A368 */ virtual void getColor(u8, u16, GXColor*) const;
/* 0x1C */ J3DAnmColorFullTable* mpTable[2];
/* 0x24 */ u8* mColorR;
/* 0x28 */ u8* mColorG;
/* 0x2C */ u8* mColorB;
/* 0x30 */ u8* mColorA;
/* 0x18 */ J3DAnmColorFullTable* mpTable[2];
/* 0x20 */ u8* mColorR;
/* 0x24 */ u8* mColorG;
/* 0x28 */ u8* mColorB;
/* 0x2C */ u8* mColorA;
};
/**
@@ -810,9 +810,9 @@ class J3DAnmCluster : public J3DAnmBase {
public:
J3DAnmCluster(s16 param_1, f32* param_2) : J3DAnmBase(param_1) { mWeight = param_2; }
/* 8032BCAC */ virtual ~J3DAnmCluster();
/* 8032BF44 */ virtual s32 getKind() const;
/* 8032BF4C */ virtual f32 getWeight(u16) const;
/* 8032BCAC */ virtual ~J3DAnmCluster() {}
/* 8032BF44 */ virtual s32 getKind() const { return 3; }
/* 8032BF4C */ virtual f32 getWeight(u16) const { return 1.0f; }
/* 0x0C */ f32* mWeight;
}; // Size: 0x10
@@ -825,8 +825,8 @@ class J3DAnmClusterFull : public J3DAnmCluster {
public:
J3DAnmClusterFull() : J3DAnmCluster(0, 0) { mAnmTable = NULL; }
/* 8032BCAC */ virtual ~J3DAnmClusterFull();
/* 8032BF44 */ virtual s32 getKind() const;
/* 8032BCAC */ virtual ~J3DAnmClusterFull() {}
/* 8032BF44 */ virtual s32 getKind() const { return 12; }
/* 8032BF4C */ virtual f32 getWeight(u16) const;
/* 0x10 */ J3DAnmClusterFullTable* mAnmTable;
@@ -840,8 +840,8 @@ class J3DAnmClusterKey : public J3DAnmCluster {
public:
J3DAnmClusterKey() : J3DAnmCluster(0, NULL) { mAnmTable = NULL; }
/* 8032C044 */ virtual ~J3DAnmClusterKey();
/* 8032C0B0 */ virtual s32 getKind() const;
/* 8032C044 */ virtual ~J3DAnmClusterKey() {}
/* 8032C0B0 */ virtual s32 getKind() const { return 13; }
/* 8032A218 */ virtual f32 getWeight(u16) const;
/* 0x10 */ J3DAnmClusterKeyTable* mAnmTable;
+36 -24
View File
@@ -2,6 +2,7 @@
#define J3DJOINT_H
#include "JSystem/J3DGraphBase/J3DTransform.h"
#include "JSystem/J3DGraphBase/J3DSys.h"
class J3DAnmTransform;
class J3DJoint;
@@ -16,7 +17,7 @@ class J3DMtxCalc {
public:
/* 80325D1C */ static void setMtxBuffer(J3DMtxBuffer*);
/* 8000D948 */ virtual ~J3DMtxCalc();
/* 8000D948 */ virtual ~J3DMtxCalc() {}
/* 80014E90 */ virtual void setAnmTransform(J3DAnmTransform*);
/* 80014E9C */ virtual J3DAnmTransform* getAnmTransform();
/* 80014E8C */ virtual void setAnmTransform(u8, J3DAnmTransform*);
@@ -34,29 +35,6 @@ public:
static J3DJoint* mJoint;
}; // Size: 0x4
/**
* @ingroup jsystem-j3d
*
*/
class J3DMtxCalcNoAnmBase : public J3DMtxCalc {
public:
/* 8000FA8C */ virtual ~J3DMtxCalcNoAnmBase();
};
/**
* @ingroup jsystem-j3d
*
*/
template <class A, class B>
class J3DMtxCalcNoAnm : public J3DMtxCalcNoAnmBase {
public:
J3DMtxCalcNoAnm() {}
virtual ~J3DMtxCalcNoAnm() {}
virtual void init(const Vec& param_0, const Mtx& param_1);
virtual void calc();
};
class J3DJoint;
typedef int (*J3DJointCallBack)(J3DJoint*, int);
/**
@@ -85,6 +63,7 @@ public:
J3DMtxCalc* getMtxCalc() { return mMtxCalc; }
J3DMtxCalc* getCurrentMtxCalc() { return mCurrentMtxCalc; };
J3DJoint* getChild() { return mChild; }
u8 getMtxType() { return (mKind & 0xf0) >> 4; }
void setMtxType(u8 type) { mKind = (mKind & ~0xf0) | (type << 4); }
static J3DMtxCalc* mCurrentMtxCalc;
@@ -109,6 +88,39 @@ private:
/* 0x58 */ J3DMaterial* mMesh;
}; // Size: 0x5C
/**
* @ingroup jsystem-j3d
*
*/
class J3DMtxCalcNoAnmBase : public J3DMtxCalc {
public:
/* 8000FA8C */ virtual ~J3DMtxCalcNoAnmBase() {}
};
/**
* @ingroup jsystem-j3d
*
*/
template <class A, class B>
class J3DMtxCalcNoAnm : public J3DMtxCalcNoAnmBase {
public:
J3DMtxCalcNoAnm() {}
virtual ~J3DMtxCalcNoAnm() {}
virtual void init(const Vec& param_0, const Mtx& param_1) { B::init(param_0, param_1); }
virtual void calc() { A::calcTransform(mJoint->getTransformInfo()); }
};
/**
* @ingroup jsystem-j3d
*
*/
struct J3DMtxCalcJ3DSysInitSoftimage {
/* 8032ECAC */ static void init(const Vec& param_0, const Mtx& param_1) {
J3DSys::mCurrentS = param_0;
MTXCopy(param_1, J3DSys::mCurrentMtx);
}
};
/**
* @ingroup jsystem-j3d
*
@@ -44,14 +44,14 @@ public:
/* 80325C00 */ void findImportantMtxIndex();
/* 80325CAC */ virtual void calc(J3DMtxBuffer*, Vec const&, f32 const (&)[3][4]);
/* 80325D24 */ virtual ~J3DJointTree();
/* 80325D24 */ virtual ~J3DJointTree() {}
J3DModelHierarchy const* getHierarchy() { return mHierarchy; }
void setHierarchy(J3DModelHierarchy* hierarchy) { mHierarchy = hierarchy; }
void setBasicMtxCalc(J3DMtxCalc* calc) { mBasicMtxCalc = calc; }
u16 getWEvlpMtxNum() const { return mWEvlpMtxNum; }
u8 getWEvlpMixMtxNum(u16 idx) const { return mWEvlpMixMtxNum[idx]; }
u16 * getWEvlpMixIndex() const { return mWEvlpMixIndex; }
u16 * getWEvlpMixMtxIndex() const { return mWEvlpMixMtxIndex; }
f32 * getWEvlpMixWeight() const { return mWEvlpMixWeight; }
u16 * getWEvlpImportantMtxIndex() const { return mWEvlpImportantMtxIdx; }
u16 getDrawFullWgtMtxNum() const { return mDrawMtxData.mDrawFullWgtMtxNum; }
@@ -82,7 +82,7 @@ private:
/* 0x1C */ u16 mJointNum;
/* 0x1E */ u16 mWEvlpMtxNum;
/* 0x20 */ u8* mWEvlpMixMtxNum;
/* 0x24 */ u16* mWEvlpMixIndex;
/* 0x24 */ u16* mWEvlpMixMtxIndex;
/* 0x28 */ f32* mWEvlpMixWeight;
/* 0x2C */ Mtx* mInvJointMtx;
/* 0x30 */ u16* mWEvlpImportantMtxIdx;
+1 -1
View File
@@ -72,7 +72,7 @@ public:
/* 803276EC */ virtual void calcMaterial();
/* 80327858 */ virtual void calcDiffTexMtx();
/* 80327F40 */ virtual void viewCalc();
/* 80328350 */ virtual ~J3DModel();
/* 80328350 */ virtual ~J3DModel() {}
J3DModelData* getModelData() { return mModelData; }
@@ -25,7 +25,7 @@ public:
/* 803260CC */ void syncJ3DSysPointers() const;
/* 803260F8 */ void syncJ3DSysFlags() const;
/* 8032617C */ virtual ~J3DModelData();
/* 8032617C */ virtual ~J3DModelData() {}
J3DMaterialTable& getMaterialTable() { return mMaterialTable; }
JUTNameTab* getMaterialName() const { return mMaterialTable.getMaterialName(); }
@@ -54,7 +54,7 @@ public:
J3DTexture* getTexture() const { return mMaterialTable.getTexture(); }
JUTNameTab* getTextureName() const { return mMaterialTable.getTextureName(); }
u16 getWEvlpMtxNum() const { return mJointTree.getWEvlpMtxNum(); }
u16* getWEvlpMixMtxIndex() const { return mJointTree.getWEvlpMixIndex(); }
u16* getWEvlpMixMtxIndex() const { return mJointTree.getWEvlpMixMtxIndex(); }
f32* getWEvlpMixWeight() const { return mJointTree.getWEvlpMixWeight(); }
u8 getWEvlpMixMtxNum(u16 idx) const { return mJointTree.getWEvlpMixMtxNum(idx); }
u16* getWEvlpImportantMtxIndex() const { return mJointTree.getWEvlpImportantMtxIndex(); }
@@ -37,7 +37,7 @@ public:
u8 getEnvScaleFlag(int idx) const { return mpEvlpScaleFlagArr[idx]; }
Mtx** getDrawMtxPtrPtr() const { return mpDrawMtxArr[1]; }
Mtx* getDrawMtxPtr() const { return mpDrawMtxArr[1][mCurrentViewNo]; }
Mtx* getDrawMtx(u16 idx) const { return &mpDrawMtxArr[1][mCurrentViewNo][idx]; }
Mtx* getDrawMtx(int idx) const { return &mpDrawMtxArr[1][mCurrentViewNo][idx]; }
Mtx33** getNrmMtxPtrPtr() const { return mpNrmMtxArr[1]; }
Mtx33* getNrmMtxPtr() const { return mpNrmMtxArr[1][mCurrentViewNo]; }
Mtx33* getNrmMtx(u16 idx) const { return &mpNrmMtxArr[1][mCurrentViewNo][idx]; }
@@ -45,6 +45,10 @@ public:
Mtx33* getBumpMtxPtr(int idx) const { return mpBumpMtxArr[1][idx][mCurrentViewNo]; }
J3DJointTree* getJointTree() const { return mJointTree; }
void setNrmMtx(int idx, Mtx* mtx) {
J3DPSMtx33CopyFrom34(*mtx, mpNrmMtxArr[1][mCurrentViewNo][idx]);
}
void swapDrawMtx() {
Mtx* tmp = mpDrawMtxArr[0][mCurrentViewNo];
mpDrawMtxArr[0][mCurrentViewNo] = mpDrawMtxArr[1][mCurrentViewNo];
@@ -70,13 +74,13 @@ private:
/* 0x10 */ Mtx* mpWeightEvlpMtx;
/* 0x14 */ Mtx** mpDrawMtxArr[2];
/* 0x1C */ Mtx33** mpNrmMtxArr[2];
/* 0x28 */ Mtx33*** mpBumpMtxArr[2];
/* 0x24 */ Mtx33*** mpBumpMtxArr[2];
/* 0x2C */ u32 mFlags;
/* 0x30 */ u32 mCurrentViewNo;
/* 0x34 */ Mtx* mpUserAnmMtx;
public:
/* 803283B4 */ virtual ~J3DMtxBuffer();
/* 803283B4 */ virtual ~J3DMtxBuffer() {}
};
void J3DCalcViewBaseMtx(f32 (*param_0)[4], Vec const& param_1, f32 const (&param_2)[3][4],
@@ -22,7 +22,7 @@ public:
/* 80325910 */ void initShapeNodes(J3DDrawMtxData*, J3DVertexData*);
/* 8032597C */ void sortVcdVatCmd();
virtual ~J3DShapeTable();
virtual ~J3DShapeTable() {}
u16 getShapeNum() const { return mShapeNum; }
J3DShape* getShapeNodePointer(u16 idx) const { return mShapeNodePointer[idx]; }
@@ -89,7 +89,9 @@ public:
/* 8032EBCC */ void normalizeWeight(int, f32*);
void offFlag(u32 i_flag) { mFlags &= ~i_flag; }
bool checkFlag(u32 i_flag) { return mFlags & i_flag; }
void setAnmCluster(J3DAnmCluster* anm) { mAnmCluster = anm; }
void normalize(f32* i_vec) { VECNormalize((Vec*)i_vec, (Vec*)i_vec); }
/* 0x00 */ J3DDeformData* mDeformData;
/* 0x04 */ J3DAnmCluster* mAnmCluster;
+1
View File
@@ -123,6 +123,7 @@ public:
void setTexMtxLoadType(u32 type) { mFlags = (mFlags & 0xFFFF0FFF) | type; }
bool getNBTFlag() const { return mHasNBT; }
u32 getBumpMtxOffset() const { return mBumpMtxOffset; }
void setBumpMtxOffset(u32 offset) { mBumpMtxOffset = offset; }
GXVtxDescList* getVtxDesc() const { return mVtxDesc; }
J3DMaterial* getMaterial() const { return mMaterial; }
@@ -15,6 +15,7 @@ public:
Mtx& getMtx(u16 idx) { return mpTexMtx[idx]; }
Mtx44& getEffectMtx(u16 idx) { return mpEffectMtx[idx]; }
u16 getNumTexMtx() { return mTexMtxNum; }
void setMtx(u16 idx, Mtx const* mtx) { MTXCopy(*mtx, mpTexMtx[idx]); }
/* 0x00 */ Mtx* mpTexMtx;
/* 0x04 */ Mtx44* mpEffectMtx;
+10 -50
View File
@@ -268,8 +268,7 @@ public:
/* 80337010 */ u32 calcSizePatchedMaterial(J3DMaterialBlock const*, u32);
/* 803370A0 */ u32 calcSizeMaterialDL(J3DMaterialDLBlock const*, u32);
// Remove when J3DModelLoader.cc is ok
#ifndef NON_VIRTUAL_J3DModelLoader
/* 803347E0 */ virtual J3DModelData* load(void const*, u32);
/* 80334ABC */ virtual J3DMaterialTable* loadMaterialTable(void const*);
/* 80334C20 */ virtual J3DModelData* loadBinaryDisplayList(void const*, u32);
@@ -278,32 +277,13 @@ public:
/* 80336A98 */ virtual u32 calcLoadBinaryDisplayListSize(void const*, u32);
/* 80336794 */ virtual u16 countMaterialNum(void const*);
/* 80334EE0 */ virtual void setupBBoardInfo();
/* 80336450 */ virtual ~J3DModelLoader();
/* 8033649C */ virtual void readMaterial(J3DMaterialBlock const*, u32);
/* 80336498 */ virtual void readMaterial_v21(J3DMaterialBlock_v21 const*, u32);
/* 803364A4 */ virtual void readMaterialTable(J3DMaterialBlock const*, u32);
/* 803364A0 */ virtual void readMaterialTable_v21(J3DMaterialBlock_v21 const*, u32);
/* 803364A8 */ virtual u32 calcSizeMaterial(J3DMaterialBlock const*, u32);
/* 803364B0 */ virtual u32 calcSizeMaterialTable(J3DMaterialBlock const*, u32);
#else
/* 803347E0 */ J3DModelData* load(void const*, u32);
/* 80334ABC */ J3DMaterialTable* loadMaterialTable(void const*);
/* 80334C20 */ J3DModelData* loadBinaryDisplayList(void const*, u32);
/* 803367D4 */ u32 calcLoadSize(void const*, u32);
/* 803369A0 */ u32 calcLoadMaterialTableSize(void const*);
/* 80336A98 */ u32 calcLoadBinaryDisplayListSize(void const*, u32);
/* 80336794 */ u16 countMaterialNum(void const*);
/* 80334EE0 */ void setupBBoardInfo();
/* 80336450 */ ~J3DModelLoader();
/* 8033649C */ void readMaterial(J3DMaterialBlock const*, u32);
/* 80336498 */ void readMaterial_v21(J3DMaterialBlock_v21 const*, u32);
/* 803364A4 */ void readMaterialTable(J3DMaterialBlock const*, u32);
/* 803364A0 */ void readMaterialTable_v21(J3DMaterialBlock_v21 const*, u32);
/* 803364A8 */ u32 calcSizeMaterial(J3DMaterialBlock const*, u32);
/* 803364B0 */ u32 calcSizeMaterialTable(J3DMaterialBlock const*, u32);
/* 0x00 */ void* _vtable;
#endif
/* 80336450 */ virtual ~J3DModelLoader() {}
/* 8033649C */ virtual void readMaterial(J3DMaterialBlock const*, u32) {}
/* 80336498 */ virtual void readMaterial_v21(J3DMaterialBlock_v21 const*, u32) {}
/* 803364A4 */ virtual void readMaterialTable(J3DMaterialBlock const*, u32) {}
/* 803364A0 */ virtual void readMaterialTable_v21(J3DMaterialBlock_v21 const*, u32) {}
/* 803364A8 */ virtual u32 calcSizeMaterial(J3DMaterialBlock const*, u32) { return false; }
/* 803364B0 */ virtual u32 calcSizeMaterialTable(J3DMaterialBlock const*, u32) { return false; }
/* 0x04 */ J3DModelData* mpModelData;
/* 0x08 */ J3DMaterialTable* mpMaterialTable;
@@ -319,44 +299,24 @@ public:
* @ingroup jsystem-j3d
*
*/
class J3DModelLoader_v21 { // : public J3DModelLoader {
class J3DModelLoader_v21 : public J3DModelLoader {
public:
/* 803363F4 */ ~J3DModelLoader_v21() {}
/* 80335890 */ void readMaterial_v21(J3DMaterialBlock_v21 const*, u32);
/* 80335E20 */ void readMaterialTable_v21(J3DMaterialBlock_v21 const*, u32);
/* 0x00 */ void* _vtable;
/* 0x04 */ J3DModelData* mpModelData;
/* 0x08 */ J3DMaterialTable* mpMaterialTable;
/* 0x0C */ J3DShapeBlock const* mpShapeBlock;
/* 0x10 */ J3DMaterialBlock const* mpMaterialBlock;
/* 0x14 */ J3DModelHierarchy* mpModelHierarchy;
/* 0x18 */ u8 field_0x18;
/* 0x19 */ u8 field_0x19;
/* 0x1A */ u16 mEnvelopeSize;
};
/**
* @ingroup jsystem-j3d
*
*/
class J3DModelLoader_v26 { // : public J3DModelLoader {
class J3DModelLoader_v26 : public J3DModelLoader {
public:
/* 80336398 */ ~J3DModelLoader_v26() {}
/* 80335614 */ void readMaterial(J3DMaterialBlock const*, u32);
/* 80335CE4 */ void readMaterialTable(J3DMaterialBlock const*, u32);
/* 80336DB4 */ u32 calcSizeMaterial(J3DMaterialBlock const*, u32);
/* 80336F60 */ u32 calcSizeMaterialTable(J3DMaterialBlock const*, u32);
/* 0x00 */ void* _vtable;
/* 0x04 */ J3DModelData* mpModelData;
/* 0x08 */ J3DMaterialTable* mpMaterialTable;
/* 0x0C */ J3DShapeBlock const* mpShapeBlock;
/* 0x10 */ J3DMaterialBlock const* mpMaterialBlock;
/* 0x14 */ J3DModelHierarchy* mpModelHierarchy;
/* 0x18 */ u8 field_0x18;
/* 0x19 */ u8 field_0x19;
/* 0x1A */ u16 mEnvelopeSize;
};
/**
+24 -1
View File
@@ -13,7 +13,10 @@ struct TAngleConstant_;
*/
template<>
struct TAngleConstant_<f32> {
static inline f32 RADIAN_DEG360() { return 6.2831855f; }
static f32 RADIAN_DEG090() { return 1.5707964f; }
static f32 RADIAN_DEG180() { return 3.1415927f; }
static f32 RADIAN_DEG360() { return 6.2831855f; }
static f32 RADIAN_TO_DEGREE_FACTOR() { return 180.0f / RADIAN_DEG180(); }
};
/**
@@ -72,12 +75,32 @@ struct TAtanTable {
struct TAsinAcosTable {
f32 table[1025];
u8 pad[0x1C];
f32 acos_(f32 x) {
if (x >= 1.0f) {
return 0.0f;
} else if (x <= -1.0f) {
return TAngleConstant_<f32>::RADIAN_DEG180();
} else if (x < 0.0f) {
return table[(u32)(-x * 1023.5f)] + TAngleConstant_<f32>::RADIAN_DEG090();
} else {
return TAngleConstant_<f32>::RADIAN_DEG090() - table[(u32)(x * 1023.5f)];
}
}
f32 acosDegree(f32 x) {
return acos_(x) * TAngleConstant_<f32>::RADIAN_TO_DEGREE_FACTOR();
}
};
namespace JMath {
extern TSinCosTable<13, f32> sincosTable_;
extern TAtanTable atanTable_;
extern TAsinAcosTable asinAcosTable_;
inline f32 acosDegree(f32 x) {
return asinAcosTable_.acosDegree(x);
}
}; // namespace JMath
inline f32 JMASCosShort(s16 v) {
+31
View File
@@ -34,6 +34,37 @@ inline f32 JMAFastSqrt(register f32 input) {
}
}
inline f32 JMAHermiteInterpolation(register f32 p1, register f32 p2, register f32 p3,
register f32 p4, register f32 p5, register f32 p6,
register f32 p7) {
register f32 ff25;
register f32 ff31;
register f32 ff30;
register f32 ff29;
register f32 ff28;
register f32 ff27;
register f32 ff26;
// clang-format off
asm {
fsubs ff31, p1, p2
fsubs ff30, p5, p2
fdivs ff29, ff31, ff30
fmuls ff28,ff29,ff29
fadds ff25,ff29,ff29
fsubs ff27,ff28,ff29
fsubs ff30, p3, p6
fmsubs ff26,ff25,ff27,ff28
fmadds ff25,p4,ff27,p4
fmadds ff26,ff26,ff30,p3
fmadds ff25,p7,ff27,ff25
fmsubs ff25,ff29,p4,ff25
fnmsubs ff25,ff31,ff25,ff26
}
// clang-format on
return ff25;
}
namespace JMath {
inline f32 fastReciprocal(f32 value) {