Merge pull request #193 from magcius/j3dsys

more J3D work
This commit is contained in:
TakaRikka
2022-04-26 23:28:35 -07:00
committed by GitHub
69 changed files with 915 additions and 2622 deletions
@@ -37,6 +37,7 @@ public:
J3DJoint* getRootNode() { return mRootNode; }
J3DJoint* getJointNodePointer(u16 idx) const { return mJointNodePointer[idx]; }
J3DMtxCalc* getBasicMtxCalc() const { return mBasicMtxCalc; }
Mtx& getInvJointMtx(s32 idx) const { return mInvJointMtx[idx]; }
private:
/* 0x04 */ J3DModelHierarchy* mHierarchy;
@@ -33,12 +33,13 @@ public:
J3DShape* getShapeNodePointer(u16 idx) const { return mShapeTable.getShapeNodePointer(idx); }
J3DJoint* getJointNodePointer(u16 idx) const { return mJointTree.getJointNodePointer(idx); }
J3DJointTree& getJointTree() { return mJointTree; }
Mtx& getInvJointMtx(s32 idx) const { return mJointTree.getInvJointMtx(idx); }
J3DTexture* getTexture() const { return mMaterialTable.getTexture(); }
JUTNameTab* getTextureName() const { return mMaterialTable.getTextureName(); }
u16 getWEvlpMtxNum() const { return mJointTree.getWEvlpMtxNum(); }
void* getVtxPosArray() const { return mVertexData.getVtxPosArray(); }
void* getVtxNrmArray() const { return mVertexData.getVtxNrmArray(); }
_GXColor* getVtxColorArray(u8 idx) const { return mVertexData.getVtxColorArray(idx); }
GXColor* getVtxColorArray(u8 idx) const { return mVertexData.getVtxColorArray(idx); }
bool checkFlag(u32 flag) const { return !!(mFlags & flag); }
bool checkBumpFlag() const { return mbHasBumpArray; }
bool checkBBoardFlag() const { return mbHasBillboard == 1; }
+1
View File
@@ -123,6 +123,7 @@ public:
J3DShape* getShape() const { return mpShape; }
J3DModel* getModel() const { return mpModel; }
Mtx* getBaseMtxPtr() const { return mpBaseMtxPtr; }
public:
/* 0x28 */ J3DShape* mpShape;
+33 -9
View File
@@ -13,10 +13,30 @@ public:
u32 mMtxIdxRegB;
};
static inline void J3DFifoWriteCPCmd(u8 cmd, u32 param) {
GFX_FIFO(u8) = GX_CMD_LOAD_CP_REG;
GFX_FIFO(u8) = cmd;
GFX_FIFO(u32) = param;
}
static inline void J3DFifoWriteXFCmd(u16 cmd, u16 len) {
GFX_FIFO(u8) = GX_CMD_LOAD_XF_REG;
GFX_FIFO(u16) = (len - 1);
GFX_FIFO(u16) = cmd;
}
class J3DCurrentMtx : public J3DCurrentMtxInfo {
public:
u32 getMtxIdxRegA() const { return mMtxIdxRegA; }
u32 getMtxIdxRegB() const { return mMtxIdxRegB; }
inline void load() const {
J3DFifoWriteCPCmd(0x30, getMtxIdxRegA()); // CP_MATINDEX_A
J3DFifoWriteCPCmd(0x40, getMtxIdxRegB()); // CP_MATINDEX_B
J3DFifoWriteXFCmd(0x1018, 2);
GFX_FIFO(u32) = getMtxIdxRegA();
GFX_FIFO(u32) = getMtxIdxRegB();
}
};
class J3DMaterial;
@@ -24,11 +44,12 @@ class J3DVertexData;
class J3DDrawMtxData;
enum J3DShpFlag {
J3DShpFlag_Visible = 0x0001,
J3DShpFlag_SkinPosCpu = 0x0004,
J3DShpFlag_SkinNrmCpu = 0x0008,
J3DShpFlag_Hidden = 0x0010,
J3DShpFlag_EnableLod = 0x0100,
J3DShpFlag_Visible = 0x0001,
J3DShpFlag_SkinPosCpu = 0x0004,
J3DShpFlag_SkinNrmCpu = 0x0008,
J3DShpFlag_Hidden = 0x0010,
J3DShpFlag_EnableLod = 0x0100,
J3DShpFlag_NoMtx = 0x0200,
};
class J3DShape {
@@ -37,7 +58,7 @@ public:
/* 80314BB8 */ void addTexMtxIndexInDL(_GXAttr, u32);
/* 80314CBC */ void addTexMtxIndexInVcd(_GXAttr);
/* 80314DA8 */ void calcNBTScale(Vec const&, f32 (*)[3][3], f32 (*)[3][3]);
/* 80314E28 */ void countBumpMtxNum() const;
/* 80314E28 */ u32 countBumpMtxNum() const;
/* 80314EEC */ void loadVtxArray() const;
/* 80314F5C */ bool isSameVcdVatCmd(J3DShape*);
/* 80314F98 */ void makeVtxArrayCmd();
@@ -52,11 +73,11 @@ public:
void onFlag(u32 flag) { mFlags |= flag; }
void offFlag(u32 flag) { mFlags &= ~flag; }
bool checkFlag(u32 flag) { return !!(mFlags & flag); }
bool checkFlag(u32 flag) const { return !!(mFlags & flag); }
void setDrawMtxDataPointer(J3DDrawMtxData* pMtxData) { mDrawMtxData = pMtxData; }
void setVertexDataPointer(J3DVertexData* pVtxData) { mVertexData = pVtxData; }
void* getVcdVatCmd() const { return mVcdVatCmd; }
void setVcdVatCmd(void* pVatCmd) { mVcdVatCmd = pVatCmd; }
void setVcdVatCmd(void* pVatCmd) { mVcdVatCmd = (u8*)pVatCmd; }
void show() { offFlag(J3DShpFlag_Visible); }
void hide() { onFlag(J3DShpFlag_Visible); }
void setCurrentViewNoPtr(u32* pViewNoPtr) { mCurrentViewNo = pViewNoPtr; }
@@ -69,6 +90,9 @@ public:
inline J3DMaterial* getMaterial() const { return mMaterial; }
inline u32 getPipeline() const { return (mFlags >> 2) & 0x07; }
inline u32 getTexMtxLoadType() const { return mFlags & 0xF000; }
inline u32 getMtxGroupNum() const { return mMtxGroupNum; }
inline J3DShapeDraw* getShapeDraw(u32 idx) const { return mShapeDraw[idx]; }
inline J3DShapeMtx* getShapeMtx(u32 idx) const { return mShapeMtx[idx]; }
static void resetVcdVatCache() { sOldVcdVatCmd = NULL; }
static void* sOldVcdVatCmd;
@@ -81,7 +105,7 @@ private:
/* 0x10 */ f32 mRadius;
/* 0x14 */ Vec mMin;
/* 0x20 */ Vec mMax;
/* 0x2C */ void* mVcdVatCmd;
/* 0x2C */ u8* mVcdVatCmd;
/* 0x30 */ GXVtxDescList* mVtxDesc;
/* 0x34 */ bool mHasNBT;
/* 0x38 */ J3DShapeMtx** mShapeMtx;
+4 -1
View File
@@ -5,13 +5,16 @@
class J3DShapeDraw {
public:
/* 80314924 */ void countVertex(u32);
/* 80314924 */ u32 countVertex(u32);
/* 80314974 */ void addTexMtxIndexInDL(u32, u32, u32);
/* 80314ABC */ J3DShapeDraw(u8 const*, u32);
/* 80314AD4 */ void draw() const;
/* 80314B00 */ virtual ~J3DShapeDraw();
u8* getDisplayList() const { return (u8*)mDisplayList; }
u32 getDisplayListSize() const { return mDisplayListSize; }
private:
/* 0x04 */ u32 mDisplayListSize;
/* 0x08 */ void* mDisplayList;
+19 -13
View File
@@ -9,7 +9,12 @@ class J3DTexGenBlock;
class J3DDifferedTexMtx {
public:
/* 8031322C */ void loadExecute(f32 const (*)[4]);
/* 8031322C */ static void loadExecute(f32 const (*)[4]);
static inline void load(Mtx m) {
if (sTexGenBlock != NULL)
loadExecute(m);
}
static J3DTexGenBlock* sTexGenBlock;
static J3DTexMtx* sTexMtxObj;
@@ -26,9 +31,9 @@ public:
/* 803131D4 */ void loadMtxIndx_PNCPU(int, u16) const;
/* 80314798 */ virtual ~J3DShapeMtx();
/* 803147E0 */ virtual void getType() const;
/* 80273E08 */ virtual bool getUseMtxNum() const;
/* 8031459C */ virtual void getUseMtxIndex(u16) const;
/* 803147E0 */ virtual u32 getType() const;
/* 80273E08 */ virtual u32 getUseMtxNum() const;
/* 8031459C */ virtual u32 getUseMtxIndex(u16) const;
/* 80313B94 */ virtual void load() const;
/* 80313BF0 */ virtual void calcNBTScale(Vec const&, f32 (*)[3][3], f32 (*)[3][3]);
@@ -41,6 +46,7 @@ public:
static void setCurrentPipeline(u32 pipeline) { sCurrentPipeline = pipeline; }
static void setLODFlag(u8 flag) { struct_804515B0[1] = flag; }
static void resetMtxLoadCache();
private:
/* 0x04 */ u16 mUseMtxIndex;
@@ -49,7 +55,7 @@ private:
class J3DShapeMtxConcatView : public J3DShapeMtx {
public:
/* 80314730 */ virtual ~J3DShapeMtxConcatView();
/* 8031478C */ virtual void getType() const;
/* 803147E0 */ virtual u32 getType() const;
/* 80313C54 */ virtual void load() const;
/* 80314598 */ virtual void loadNrmMtx(int, u16) const;
/* 80313D28 */ virtual void loadNrmMtx(int, u16, f32 (*)[4]) const;
@@ -68,23 +74,23 @@ public:
class J3DShapeMtxYBBoardConcatView : public J3DShapeMtxConcatView {
public:
/* 80314520 */ virtual ~J3DShapeMtxYBBoardConcatView();
/* 8031458C */ virtual void getType() const;
/* 803147E0 */ virtual u32 getType() const;
/* 803143E4 */ virtual void load() const;
};
class J3DShapeMtxBBoardConcatView : public J3DShapeMtxConcatView {
public:
/* 803145A4 */ virtual ~J3DShapeMtxBBoardConcatView();
/* 80314610 */ virtual void getType() const;
/* 803147E0 */ virtual u32 getType() const;
/* 803142D4 */ virtual void load() const;
};
class J3DShapeMtxMulti : public J3DShapeMtx {
public:
/* 803146B0 */ virtual ~J3DShapeMtxMulti();
/* 8031470C */ virtual void getType() const;
/* 80314718 */ virtual void getUseMtxNum() const;
/* 80314720 */ virtual void getUseMtxIndex(u16) const;
/* 803147E0 */ virtual u32 getType() const;
/* 80273E08 */ virtual u32 getUseMtxNum() const;
/* 8031459C */ virtual u32 getUseMtxIndex(u16) const;
/* 80313E4C */ virtual void load() const;
/* 80313EEC */ virtual void calcNBTScale(Vec const&, f32 (*)[3][3], f32 (*)[3][3]);
@@ -96,9 +102,9 @@ private:
class J3DShapeMtxMultiConcatView : public J3DShapeMtx {
public:
/* 8031461C */ virtual ~J3DShapeMtxMultiConcatView();
/* 80314688 */ virtual void getType() const;
/* 80314694 */ virtual void getUseMtxNum() const;
/* 8031469C */ virtual void getUseMtxIndex(u16) const;
/* 803147E0 */ virtual u32 getType() const;
/* 80273E08 */ virtual u32 getUseMtxNum() const;
/* 8031459C */ virtual u32 getUseMtxIndex(u16) const;
/* 80313FA4 */ virtual void load() const;
/* 803146AC */ virtual void loadNrmMtx(int, u16) const;
/* 8031419C */ virtual void loadNrmMtx(int, u16, f32 (*)[4]) const;
+9 -3
View File
@@ -42,9 +42,12 @@ struct J3DSys {
/* 0x050 */ u32 mDrawMode;
/* 0x054 */ u32 mMaterialMode;
/* 0x058 */ J3DTexture* mTexture;
/* 0x05C */ u8 field_0x5c[0x104 - 0x5C];
/* 0x05C */ u8 field_0x5c[0x04];
/* 0x060 */ u32 mTexCacheRegionNum;
/* 0x064 */ GXTexRegion mTexCacheRegion[8];
/* 0x0E4 */ u8 field_0xe4[0x20];
/* 0x104 */ Mtx* mModelDrawMtx;
/* 0x104 */ Mtx33* mModelNrmMtx;
/* 0x108 */ Mtx33* mModelNrmMtx;
/* 0x10C */ void* mVtxPos;
/* 0x110 */ void* mVtxNrm;
/* 0x114 */ _GXColor* mVtxCol;
@@ -115,12 +118,15 @@ struct J3DSys {
// Type 1: Xlu Buffer
J3DDrawBuffer* getDrawBuffer(int type) { return mDrawBuffer[type]; }
Mtx& getModelDrawMtx(u16 no) const { return mModelDrawMtx[no]; }
J3DShapePacket* getShapePacket() const { return mShapePacket; }
void setViewMtx(Mtx m) { PSMTXCopy(m, mViewMtx); }
static Mtx mCurrentMtx;
static Vec mCurrentS;
static Vec mParentS;
static u16 sTexCoordScaleTable[34];
static u16 sTexCoordScaleTable[32];
};
extern J3DSys j3dSys;
@@ -67,4 +67,11 @@ struct J3DTexCoord : public J3DTexCoordInfo {
/* 0x4 */ u16 mTexMtxReg;
}; // Size: 0x6
struct J3DDefaultTexCoordInfo {
/* 0x0 */ u8 mTexGenType;
/* 0x1 */ u8 mTexGenSrc;
/* 0x2 */ u8 mTexGenMtx;
/* 0x3 */ u8 pad;
};
#endif /* J3DTEXTURE_H */
+18 -14
View File
@@ -21,31 +21,35 @@ public:
J3DVertexData();
void* getVtxPosArray() const { return mVtxPosArray; }
void* getVtxNrmArray() const { return mVtxNrmArray; }
_GXColor* getVtxColorArray(u8 idx) const { return mVtxColorArray[idx]; }
GXColor* getVtxColorArray(u8 idx) const { return mVtxColorArray[idx]; }
void* getVtxTexCoordArray(u8 idx) const { return mVtxTexCoordArray[idx]; }
void* getVtxNBTArray() const { return mVtxNBTArray; }
u32 getNrmNum() const { return mNrmNum; }
u32 getVtxNum() const { return mVtxNum; }
GXVtxAttrFmtList* getVtxAttrFmtList() { return mVtxAttrFmtList; }
void setVtxPosFrac(u8 frac) { mVtxPosFrac = frac; }
void setVtxPosType(GXCompType type) { mVtxPosType = type; }
void setVtxNrmFrac(u8 frac) { mVtxNrmFrac = frac; }
void setVtxNrmType(GXCompType type) { mVtxNrmType = type; }
private:
/* 0x00 */ u32 mVtxNum;
/* 0x04 */ u32 mNrmNum;
/* 0x08 */ u32 mColNum;
/* 0x0C */ u32 field_0xc;
/* 0x10 */ u32 field_0x10;
/* 0x14 */ void* mVtxAttrFmtList;
/* 0x0C */ u32 mTexCoordNum;
/* 0x10 */ u32 mPacketNum;
/* 0x14 */ GXVtxAttrFmtList* mVtxAttrFmtList;
/* 0x18 */ void* mVtxPosArray;
/* 0x1C */ void* mVtxNrmArray;
/* 0x20 */ void* mVtxNBTArray;
/* 0x24 */ _GXColor* mVtxColorArray[2];
/* 0x24 */ GXColor* mVtxColorArray[2];
/* 0x2C */ void* mVtxTexCoordArray[8];
/* 0x4C */ u8 mVtxPosFrac;
/* 0x50 */ _GXCompType mVtxPosType;
/* 0x50 */ GXCompType mVtxPosType;
/* 0x54 */ u8 mVtxNrmFrac;
/* 0x58 */ _GXCompType mVtxNrmType;
/* 0x58 */ GXCompType mVtxNrmType;
};
class J3DVertexBuffer {
@@ -64,7 +68,7 @@ public:
void setCurrentVtxNrm(void* pVtxNrm) { mCurrentVtxNrm = pVtxNrm; }
void setCurrentVtxCol(_GXColor* pVtxCol) { mCurrentVtxCol = pVtxCol; }
void setCurrentVtxCol(GXColor* pVtxCol) { mCurrentVtxCol = pVtxCol; }
void frameInit() {
setCurrentVtxPos(mVtxPosArray[0]);
@@ -76,12 +80,12 @@ private:
/* 0x00 */ J3DVertexData* mVtxData;
/* 0x04 */ void* mVtxPosArray[2];
/* 0x0C */ void* mVtxNrmArray[2];
/* 0x14 */ _GXColor* mVtxColArray[2];
/* 0x14 */ GXColor* mVtxColArray[2];
/* 0x1C */ void* mTransformedVtxPosArray[2];
/* 0x24 */ void* mTransformedVtxNrmArray[2];
/* 0x2C */ void* mCurrentVtxPos;
/* 0x30 */ void* mCurrentVtxNrm;
/* 0x34 */ _GXColor* mCurrentVtxCol;
/* 0x34 */ GXColor* mCurrentVtxCol;
}; // Size: 0x38
struct VertexNormal {