summaryrefslogtreecommitdiff
path: root/include/JSystem/J3DGraphBase
diff options
context:
space:
mode:
authorCaroline Madsen <69010899+randomsalience@users.noreply.github.com>2023-12-12 23:42:38 -0500
committerGitHub <noreply@github.com>2023-12-13 06:42:38 +0200
commite7a6eb10b574f50014699c1b4eba29c9cf6d9dea (patch)
tree29f344f5397039ef9b26a63cfb3fa22a4ae052fc /include/JSystem/J3DGraphBase
parent6eb299f0c30c132ba9a78fad9c394c5564c123f1 (diff)
work on J3DShapeMtx (#2002)
* work on J3DShapeMtx * update Progress.md
Diffstat (limited to 'include/JSystem/J3DGraphBase')
-rw-r--r--include/JSystem/J3DGraphBase/J3DShapeMtx.h81
-rw-r--r--include/JSystem/J3DGraphBase/J3DSys.h1
-rw-r--r--include/JSystem/J3DGraphBase/J3DTransform.h20
3 files changed, 64 insertions, 38 deletions
diff --git a/include/JSystem/J3DGraphBase/J3DShapeMtx.h b/include/JSystem/J3DGraphBase/J3DShapeMtx.h
index d850b3c398..824ab06de0 100644
--- a/include/JSystem/J3DGraphBase/J3DShapeMtx.h
+++ b/include/JSystem/J3DGraphBase/J3DShapeMtx.h
@@ -9,9 +9,12 @@ class J3DTexGenBlock;
class J3DTexMtxObj {
public:
Mtx& getMtx(u16 idx) { return mpTexMtx[idx]; }
+ Mtx44& getEffectMtx(u16 idx) { return mpEffectMtx[idx]; }
+ u16 getNumTexMtx() { return mTexMtxNum; }
-private:
- /* 0x00 */ Mtx *mpTexMtx;
+ /* 0x00 */ Mtx* mpTexMtx;
+ /* 0x04 */ Mtx44* mpEffectMtx;
+ /* 0x08 */ u16 mTexMtxNum;
};
class J3DDifferedTexMtx {
@@ -27,10 +30,8 @@ public:
static J3DTexMtxObj* sTexMtxObj;
};
-extern u8 struct_804515B0;
-extern u8 struct_804515B1;
-extern u8 struct_804515B2;
-extern u8 struct_804515B3;
+class J3DShapeMtx;
+typedef void (J3DShapeMtx::*J3DShapeMtx_LoadFunc)(int, u16) const;
class J3DShapeMtx {
public:
@@ -43,39 +44,43 @@ public:
/* 80313188 */ void loadMtxIndx_NCPU(int, u16) const;
/* 803131D4 */ void loadMtxIndx_PNCPU(int, u16) const;
- /* 80314798 */ virtual ~J3DShapeMtx();
- /* 803147E0 */ virtual u32 getType() const;
- /* 80273E08 */ virtual u32 getUseMtxNum() const;
- /* 8031459C */ virtual u32 getUseMtxIndex(u16) const;
+ /* 80314798 */ virtual ~J3DShapeMtx() {}
+ /* 803147E0 */ virtual u32 getType() const { return 'SMTX'; }
+ /* 80273E08 */ virtual u32 getUseMtxNum() const { return 1; }
+ /* 8031459C */ virtual u32 getUseMtxIndex(u16) const { return mUseMtxIndex; }
/* 80313B94 */ virtual void load() const;
/* 80313BF0 */ virtual void calcNBTScale(Vec const&, f32 (*)[3][3], f32 (*)[3][3]);
- static u8 sMtxLoadPipeline[48];
+ static J3DShapeMtx_LoadFunc sMtxLoadPipeline[4];
static u16 sMtxLoadCache[10 + 2 /* padding */];
static u32 sCurrentPipeline;
- // static J3DScaleFlag sCurrentScaleFlag;
static u8* sCurrentScaleFlag;
+ static u8 sNBTFlag;
+ static u8 sLODFlag;
static u32 sTexMtxLoadType;
static void setCurrentPipeline(u32 pipeline) { sCurrentPipeline = pipeline; }
- static void setLODFlag(u8 flag) { struct_804515B1 = flag; }
- static u8 getLODFlag() { return struct_804515B1; }
+ static void setLODFlag(u8 flag) { sLODFlag = flag; }
+ static u8 getLODFlag() { return sLODFlag; }
static void resetMtxLoadCache();
-private:
+protected:
/* 0x04 */ u16 mUseMtxIndex;
};
+class J3DShapeMtxConcatView;
+typedef void (J3DShapeMtxConcatView::*J3DShapeMtxConcatView_LoadFunc)(int, u16) const;
+
class J3DShapeMtxConcatView : public J3DShapeMtx {
public:
J3DShapeMtxConcatView(u16 useMtxIndex)
: J3DShapeMtx(useMtxIndex)
{}
- /* 80314730 */ virtual ~J3DShapeMtxConcatView();
- /* 803147E0 */ virtual u32 getType() const;
+ /* 80314730 */ virtual ~J3DShapeMtxConcatView() {}
+ /* 803147E0 */ virtual u32 getType() const { return 'SMCV'; }
/* 80313C54 */ virtual void load() const;
- /* 80314598 */ virtual void loadNrmMtx(int, u16) const;
+ /* 80314598 */ virtual void loadNrmMtx(int, u16) const {}
/* 80313D28 */ virtual void loadNrmMtx(int, u16, f32 (*)[4]) const;
/* 80313828 */ void loadMtxConcatView_PNGP(int, u16) const;
@@ -84,9 +89,9 @@ public:
/* 80313A14 */ void loadMtxConcatView_PNCPU(int, u16) const;
/* 80313AC8 */ void loadMtxConcatView_PNGP_LOD(int, u16) const;
- static u8 sMtxLoadPipeline[48];
- static u8 sMtxLoadLODPipeline[48];
- static u8 sMtxPtrTbl[8];
+ static J3DShapeMtxConcatView_LoadFunc sMtxLoadPipeline[4];
+ static J3DShapeMtxConcatView_LoadFunc sMtxLoadLODPipeline[4];
+ static MtxP sMtxPtrTbl[2];
};
class J3DShapeMtxYBBoardConcatView : public J3DShapeMtxConcatView {
@@ -95,8 +100,8 @@ public:
: J3DShapeMtxConcatView(useMtxIndex)
{}
- /* 80314520 */ virtual ~J3DShapeMtxYBBoardConcatView();
- /* 803147E0 */ virtual u32 getType() const;
+ /* 80314520 */ virtual ~J3DShapeMtxYBBoardConcatView() {}
+ /* 803147E0 */ virtual u32 getType() const { return 'SMYB'; }
/* 803143E4 */ virtual void load() const;
};
@@ -106,8 +111,8 @@ public:
: J3DShapeMtxConcatView(useMtxIndex)
{}
- /* 803145A4 */ virtual ~J3DShapeMtxBBoardConcatView();
- /* 803147E0 */ virtual u32 getType() const;
+ /* 803145A4 */ virtual ~J3DShapeMtxBBoardConcatView() {}
+ /* 803147E0 */ virtual u32 getType() const { return 'SMBB'; }
/* 803142D4 */ virtual void load() const;
};
@@ -119,16 +124,16 @@ public:
, mUseMtxIndexTable(useMtxIndexTable)
{}
- /* 803146B0 */ virtual ~J3DShapeMtxMulti();
- /* 803147E0 */ virtual u32 getType() const;
- /* 80273E08 */ virtual u32 getUseMtxNum() const;
- /* 8031459C */ virtual u32 getUseMtxIndex(u16) const;
+ /* 803146B0 */ virtual ~J3DShapeMtxMulti() {}
+ /* 803147E0 */ virtual u32 getType() const { return 'SMML'; }
+ /* 80273E08 */ virtual u32 getUseMtxNum() const { return mUseMtxNum; }
+ /* 8031459C */ virtual u32 getUseMtxIndex(u16 no) const { return mUseMtxIndexTable[no]; }
/* 80313E4C */ virtual void load() const;
/* 80313EEC */ virtual void calcNBTScale(Vec const&, f32 (*)[3][3], f32 (*)[3][3]);
private:
- /* 0x6 */ u16 mUseMtxNum;
- /* 0x8 */ u16* mUseMtxIndexTable;
+ /* 0x8 */ u16 mUseMtxNum;
+ /* 0xC */ u16* mUseMtxIndexTable;
};
class J3DShapeMtxMultiConcatView : public J3DShapeMtxConcatView {
@@ -139,17 +144,17 @@ public:
, mUseMtxIndexTable(useMtxIndexTable)
{}
- /* 8031461C */ virtual ~J3DShapeMtxMultiConcatView();
- /* 803147E0 */ virtual u32 getType() const;
- /* 80273E08 */ virtual u32 getUseMtxNum() const;
- /* 8031459C */ virtual u32 getUseMtxIndex(u16) const;
+ /* 8031461C */ virtual ~J3DShapeMtxMultiConcatView() {}
+ /* 803147E0 */ virtual u32 getType() const { return 'SMMC'; }
+ /* 80273E08 */ virtual u32 getUseMtxNum() const { return mUseMtxNum; }
+ /* 8031459C */ virtual u32 getUseMtxIndex(u16 no) const { return mUseMtxIndexTable[no]; }
/* 80313FA4 */ virtual void load() const;
- /* 803146AC */ virtual void loadNrmMtx(int, u16) const;
+ /* 803146AC */ virtual void loadNrmMtx(int, u16) const {}
/* 8031419C */ virtual void loadNrmMtx(int, u16, f32 (*)[4]) const;
private:
- /* 0x6 */ u16 mUseMtxNum;
- /* 0x8 */ u16* mUseMtxIndexTable;
+ /* 0x8 */ u16 mUseMtxNum;
+ /* 0xC */ u16* mUseMtxIndexTable;
};
#endif /* J3DSHAPEMTX_H */ \ No newline at end of file
diff --git a/include/JSystem/J3DGraphBase/J3DSys.h b/include/JSystem/J3DGraphBase/J3DSys.h
index bf96165bb0..a7a3469938 100644
--- a/include/JSystem/J3DGraphBase/J3DSys.h
+++ b/include/JSystem/J3DGraphBase/J3DSys.h
@@ -106,6 +106,7 @@ struct J3DSys {
J3DTexture* getTexture() { return mTexture; }
void setNBTScale(Vec* scale) { mNBTScale = scale; }
+ Vec* getNBTScale() { return mNBTScale; }
void onFlag(u32 flag) { mFlags |= flag; }
diff --git a/include/JSystem/J3DGraphBase/J3DTransform.h b/include/JSystem/J3DGraphBase/J3DTransform.h
index 5c3f217052..5cd4601ef5 100644
--- a/include/JSystem/J3DGraphBase/J3DTransform.h
+++ b/include/JSystem/J3DGraphBase/J3DTransform.h
@@ -32,6 +32,26 @@ void J3DScaleNrmMtx33(f32 (*)[3], const Vec&);
void J3DMtxProjConcat(f32 (*)[4], f32 (*)[4], f32 (*)[4]);
void J3DPSMtxArrayConcat(f32 (*)[4], f32 (*)[4], f32 (*)[4], u32);
+inline void J3DPSMtx33Copy(register Mtx3P src, register Mtx3P dst) {
+ register f32 fr4;
+ register f32 fr3;
+ register f32 fr2;
+ register f32 fr1;
+ register f32 fr0;
+ asm {
+ psq_l fr4, 0(src), 0, 0
+ psq_l fr3, 8(src), 0, 0
+ psq_l fr2, 0x10(src), 0, 0
+ psq_l fr1, 0x18(src), 0, 0
+ lfs fr0, 0x20(src)
+ psq_st fr4, 0(dst), 0, 0
+ psq_st fr3, 8(dst), 0, 0
+ psq_st fr2, 0x10(dst), 0, 0
+ psq_st fr1, 0x18(dst), 0, 0
+ stfs fr0, 0x20(dst)
+ }
+}
+
inline void J3DPSMtx33CopyFrom34(register MtxP src, register Mtx3P dst) {
register f32 x_y1;
register f32 z1;