J3DMatBlock

This commit is contained in:
Jcw87
2023-10-01 03:52:40 -07:00
parent 7504c94665
commit e590d1c3f1
6 changed files with 133 additions and 120 deletions
+1 -1
View File
@@ -101,7 +101,7 @@ inline void J3DGDSetBlendMode(GXBlendMode mode, GXBlendFactor srcFactor, GXBlend
inline void J3DGDSetBlendMode(GXBlendMode mode, GXBlendFactor srcFactor, GXBlendFactor dstFactor, GXLogicOp logicOp, u8 ditherEnable) {
J3DGDWriteBPCmd(0xFE001FE7);
J3DGDWriteBPCmd(
(mode == GX_BM_BLEND || mode == GX_BM_SUBTRACT) << 0 |
u32(mode == GX_BM_BLEND || mode == GX_BM_SUBTRACT) << 0 |
(mode == GX_BM_LOGIC) << 1 |
ditherEnable << 2 |
dstFactor << 5 |
+59 -61
View File
@@ -7,12 +7,32 @@
#include "JSystem/J3DGraphBase/J3DTexture.h"
#include "dolphin/gx/GXEnum.h"
struct J3DGXColorS10 : public GXColorS10 {
struct J3DGXColorS10 {
J3DGXColorS10() {}
J3DGXColorS10& operator=(const J3DGXColorS10& other) {
mColor = other.mColor;
return *this;
}
J3DGXColorS10& operator=(const GXColorS10& color) {
mColor = color;
return *this;
}
GXColorS10 mColor;
};
struct J3DGXColor : public GXColor {
struct J3DGXColor {
J3DGXColor() {}
J3DGXColor& operator=(const J3DGXColor& other) {
mColor = other.mColor;
return *this;
}
J3DGXColor& operator=(const GXColor& color) {
mColor = color;
return *this;
}
GXColor mColor;
};
class J3DTexGenBlock {
@@ -140,10 +160,10 @@ public:
virtual J3DTevOrder* getTevOrder(u32);
virtual void setTevColor(u32, J3DGXColorS10 const*);
virtual void setTevColor(u32, J3DGXColorS10);
virtual _GXColorS10* getTevColor(u32);
virtual J3DGXColorS10* getTevColor(u32);
virtual void setTevKColor(u32, J3DGXColor const*);
virtual void setTevKColor(u32, J3DGXColor);
virtual _GXColor* getTevKColor(u32);
virtual J3DGXColor* getTevKColor(u32);
virtual void setTevKColorSel(u32 i, const u8* pNum) {}
virtual void setTevKColorSel(u32, u8);
virtual u8 getTevKColorSel(u32);
@@ -213,10 +233,10 @@ public:
virtual J3DIndTevStage* getIndTevStage(u32 i) { return &mIndTevStage[i]; }
virtual void setTevColor(u32 i, const J3DGXColorS10* pColor) { mTevColor[i] = *pColor; }
virtual void setTevColor(u32 i, J3DGXColorS10 color) { mTevColor[i] = color; }
virtual GXColorS10* getTevColor(u32 i) { return &mTevColor[i]; }
virtual J3DGXColorS10* getTevColor(u32 i) { return &mTevColor[i]; }
virtual void setTevKColor(u32 i, const J3DGXColor* pColor) { mTevKColor[i] = *pColor; }
virtual void setTevKColor(u32 i, J3DGXColor color) { mTevKColor[i] = color; }
virtual GXColor* getTevKColor(u32 i) { return &mTevKColor[i]; }
virtual J3DGXColor* getTevKColor(u32 i) { return &mTevKColor[i]; }
virtual void setTevKColorSel(u32 i, const u8* pSel) { mTevKColorSel[i] = *pSel; }
virtual void setTevKColorSel(u32 i, u8 sel) { mTevKColorSel[i] = sel; }
virtual u8 getTevKColorSel(u32 i) { return mTevKColorSel[i]; }
@@ -231,8 +251,8 @@ private:
/* 0x18 */ J3DTevOrder mTevOrder[8];
/* 0x38 */ J3DTevStage mTevStage[8];
/* 0x78 */ J3DIndTevStage mIndTevStage[8];
/* 0x98 */ GXColorS10 mTevColor[4];
/* 0xB8 */ GXColor mTevKColor[4];
/* 0x98 */ J3DGXColorS10 mTevColor[4];
/* 0xB8 */ J3DGXColor mTevKColor[4];
/* 0xC8 */ u8 mTevKColorSel[8];
/* 0xD0 */ u8 mTevStageNum;
/* 0xD4 */ u32 mTevRegOffset;
@@ -270,10 +290,10 @@ public:
virtual J3DTevOrder* getTevOrder(u32 i) { return &mTevOrder[i]; }
virtual void setTevColor(u32 i, const J3DGXColorS10* pColor) { mTevColor[i] = *pColor; }
virtual void setTevColor(u32 i, J3DGXColorS10 color) { mTevColor[i] = color; }
virtual GXColorS10* getTevColor(u32 i) { return &mTevColor[i]; }
virtual J3DGXColorS10* getTevColor(u32 i) { return &mTevColor[i]; }
virtual void setTevKColor(u32 i, const J3DGXColor* pColor) { mTevKColor[i] = *pColor; }
virtual void setTevKColor(u32 i, J3DGXColor color) { mTevKColor[i] = color; }
virtual GXColor* getTevKColor(u32 i) { return &mTevKColor[i]; }
virtual J3DGXColor* getTevKColor(u32 i) { return &mTevKColor[i]; }
virtual void setTevKColorSel(u32 i, const u8* pNum) { mTevKColorSel[i] = *pNum; }
virtual void setTevKColorSel(u32 i, u8 num) { mTevKColorSel[i] = num; }
virtual u8 getTevKColorSel(u32 i) { return mTevKColorSel[i]; }
@@ -286,10 +306,8 @@ public:
virtual void setTevStage(u32 i, const J3DTevStage* pStage) { mTevStage[i] = *pStage; }
virtual void setTevStage(u32 i, J3DTevStage stage) { mTevStage[i] = stage; }
virtual J3DTevStage* getTevStage(u32 i) { return &mTevStage[i]; }
virtual void setTevSwapModeInfo(u32 i, const J3DTevSwapModeInfo*) { /* Nonmatching */
}
virtual void setTevSwapModeInfo(u32 i, J3DTevSwapModeInfo) { /* Nonmatching */
}
virtual void setTevSwapModeInfo(u32 i, const J3DTevSwapModeInfo* pInfo) { mTevStage[i].setTevSwapModeInfo(*pInfo); }
virtual void setTevSwapModeInfo(u32 i, J3DTevSwapModeInfo info) { mTevStage[i].setTevSwapModeInfo(info); }
virtual void setTevSwapModeTable(u32 i, const J3DTevSwapModeTable* pTable) {
mTevSwapModeTable[i] = *pTable;
}
@@ -310,8 +328,8 @@ private:
/* 0x10 */ J3DTevOrder mTevOrder[4];
/* 0x20 */ u8 mTevStageNum;
/* 0x21 */ J3DTevStage mTevStage[4];
/* 0x42 */ GXColorS10 mTevColor[4];
/* 0x62 */ GXColor mTevKColor[4];
/* 0x42 */ J3DGXColorS10 mTevColor[4];
/* 0x62 */ J3DGXColor mTevKColor[4];
/* 0x72 */ u8 mTevKColorSel[4];
/* 0x76 */ u8 mTevKAlphaSel[4];
/* 0x7A */ J3DTevSwapModeTable mTevSwapModeTable[4];
@@ -347,10 +365,10 @@ public:
virtual J3DTevOrder* getTevOrder(u32 i) { return &mTevOrder[i]; }
virtual void setTevColor(u32 i, const J3DGXColorS10* pColor) { mTevColor[i] = *pColor; }
virtual void setTevColor(u32 i, J3DGXColorS10 color) { mTevColor[i] = color; }
virtual GXColorS10* getTevColor(u32 i) { return &mTevColor[i]; }
virtual J3DGXColorS10* getTevColor(u32 i) { return &mTevColor[i]; }
virtual void setTevKColor(u32 i, const J3DGXColor* pColor) { mTevKColor[i] = *pColor; }
virtual void setTevKColor(u32 i, J3DGXColor color) { mTevKColor[i] = color; }
virtual GXColor* getTevKColor(u32 i) { return &mTevKColor[i]; }
virtual J3DGXColor* getTevKColor(u32 i) { return &mTevKColor[i]; }
virtual void setTevKColorSel(u32 i, const u8* pNum) { mTevKColorSel[i] = *pNum; }
virtual void setTevKColorSel(u32 i, u8 num) { mTevKColorSel[i] = num; }
virtual u8 getTevKColorSel(u32 i) { return mTevKColorSel[i]; }
@@ -363,10 +381,8 @@ public:
virtual void setTevStage(u32 i, const J3DTevStage* pStage) { mTevStage[i] = *pStage; }
virtual void setTevStage(u32 i, J3DTevStage stage) { mTevStage[i] = stage; }
virtual J3DTevStage* getTevStage(u32 i) { return &mTevStage[i]; }
virtual void setTevSwapModeInfo(u32 i, const J3DTevSwapModeInfo*) { /* Nonmatching */
}
virtual void setTevSwapModeInfo(u32 i, J3DTevSwapModeInfo) { /* Nonmatching */
}
virtual void setTevSwapModeInfo(u32 i, const J3DTevSwapModeInfo* pInfo) { mTevStage[i].setTevSwapModeInfo(*pInfo); }
virtual void setTevSwapModeInfo(u32 i, J3DTevSwapModeInfo info) { mTevStage[i].setTevSwapModeInfo(info); }
virtual void setTevSwapModeTable(u32 i, const J3DTevSwapModeTable* pTable) {
mTevSwapModeTable[i] = *pTable;
}
@@ -385,10 +401,10 @@ public:
private:
/* 0x08 */ u16 mTexNo[2];
/* 0x0C */ J3DTevOrder mTevOrder[2];
/* 0x14 */ GXColorS10 mTevColor[4];
/* 0x14 */ J3DGXColorS10 mTevColor[4];
/* 0x34 */ u8 mTevStageNum;
/* 0x35 */ J3DTevStage mTevStage[2];
/* 0x45 */ GXColor mTevKColor[4];
/* 0x45 */ J3DGXColor mTevKColor[4];
/* 0x55 */ u8 mTevKColorSel[2];
/* 0x57 */ u8 mTevKAlphaSel[2];
/* 0x59 */ J3DTevSwapModeTable mTevSwapModeTable[4];
@@ -424,10 +440,10 @@ public:
virtual J3DTevOrder* getTevOrder(u32 i) { return &mTevOrder[i]; }
virtual void setTevColor(u32 i, const J3DGXColorS10* pColor) { mTevColor[i] = *pColor; }
virtual void setTevColor(u32 i, J3DGXColorS10 color) { mTevColor[i] = color; }
virtual GXColorS10* getTevColor(u32 i) { return &mTevColor[i]; }
virtual J3DGXColorS10* getTevColor(u32 i) { return &mTevColor[i]; }
virtual void setTevKColor(u32 i, const J3DGXColor* pColor) { mTevKColor[i] = *pColor; }
virtual void setTevKColor(u32 i, J3DGXColor color) { mTevKColor[i] = color; }
virtual GXColor* getTevKColor(u32 i) { return &mTevKColor[i]; }
virtual J3DGXColor* getTevKColor(u32 i) { return &mTevKColor[i]; }
virtual void setTevKColorSel(u32 i, const u8* pNum) { mTevKColorSel[i] = *pNum; }
virtual void setTevKColorSel(u32 i, u8 num) { mTevKColorSel[i] = num; }
virtual u8 getTevKColorSel(u32 i) { return mTevKColorSel[i]; }
@@ -440,15 +456,8 @@ public:
virtual void setTevStage(u32 i, const J3DTevStage* pStage) { mTevStage[i] = *pStage; }
virtual void setTevStage(u32 i, J3DTevStage stage) { mTevStage[i] = stage; }
virtual J3DTevStage* getTevStage(u32 i) { return &mTevStage[i]; }
virtual void setTevSwapModeInfo(u32 i, const J3DTevSwapModeInfo* pInfo) {
J3DTevStageTevSwapModeInfo& out = mTevStage[i].mTevSwapModeInfo;
out.field_0x0_29 = pInfo->field_0x0 + 1;
out.field_0x0_31 = pInfo->field_0x0;
}
virtual void setTevSwapModeInfo(u32 i, J3DTevSwapModeInfo info) {
mTevStage[i].mTevSwapModeInfo.field_0x0_29 = info.field_0x0 + 1;
mTevStage[i].mTevSwapModeInfo.field_0x0_31 = info.field_0x0;
}
virtual void setTevSwapModeInfo(u32 i, const J3DTevSwapModeInfo* pInfo) { mTevStage[i].setTevSwapModeInfo(*pInfo); }
virtual void setTevSwapModeInfo(u32 i, J3DTevSwapModeInfo info) { mTevStage[i].setTevSwapModeInfo(info); }
virtual void setTevSwapModeTable(u32 i, const J3DTevSwapModeTable* pTable) {
mTevSwapModeTable[i] = *pTable;
}
@@ -469,8 +478,8 @@ public:
/* 0x018 */ J3DTevOrder mTevOrder[16];
/* 0x058 */ u8 mTevStageNum;
/* 0x059 */ J3DTevStage mTevStage[16];
/* 0x0DA */ GXColorS10 mTevColor[4];
/* 0x0FA */ GXColor mTevKColor[4];
/* 0x0DA */ J3DGXColorS10 mTevColor[4];
/* 0x0FA */ J3DGXColor mTevKColor[4];
/* 0x10A */ u8 mTevKColorSel[16];
/* 0x11A */ u8 mTevKAlphaSel[16];
/* 0x12A */ J3DTevSwapModeTable mTevSwapModeTable[4];
@@ -757,39 +766,28 @@ private:
/* 0x0F */ u8 mDither;
}; // Size: 0x10
struct J3DIndTexCoordScale {
struct J3DIndTexCoordScale : public J3DIndTexCoordScaleInfo {
J3DIndTexCoordScale();
~J3DIndTexCoordScale() {}
u8 getScaleS() { return mScaleS; }
u8 getScaleT() { return mScaleT; }
/* 0x0 */ u8 mScaleS __attribute__((aligned(4)));
/* 0x1 */ u8 mScaleT;
};
struct J3DIndTexMtx {
struct J3DIndTexMtx : public J3DIndTexMtxInfo {
J3DIndTexMtx();
~J3DIndTexMtx() {}
void load(u32 param_1) {
J3DGDSetIndTexMtx(GXIndTexMtxID(param_1 + 1), mOffsetMtx, mScaleExp);
}
/* 0x00 */ Mtx23 mOffsetMtx;
/* 0x18 */ u8 mScaleExp;
}; // Size: 0x1C
struct J3DIndTexOrder {
struct J3DIndTexOrder : public J3DIndTexOrderInfo {
J3DIndTexOrder();
u8 getCoord() const { return mCoord; }
u8 getMap() const { return mMap; }
/* 0x0 */ u8 mCoord;
/* 0x1 */ u8 mMap;
/* 0x2 */ u8 field_0x2;
/* 0x3 */ u8 field_0x3;
};
class J3DIndBlock {
@@ -897,10 +895,10 @@ public:
virtual u32 getType() = 0;
virtual void setMatColor(u32, J3DGXColor const*);
virtual void setMatColor(u32, J3DGXColor);
virtual GXColor* getMatColor(u32);
virtual J3DGXColor* getMatColor(u32);
virtual void setAmbColor(u32, J3DGXColor const*);
virtual void setAmbColor(u32, J3DGXColor);
virtual GXColor* getAmbColor(u32);
virtual J3DGXColor* getAmbColor(u32);
virtual void setColorChanNum(u8);
virtual void setColorChanNum(u8 const*);
virtual u8 getColorChanNum() const;
@@ -936,10 +934,10 @@ public:
virtual u32 getType();
virtual void setMatColor(u32, J3DGXColor const*);
virtual void setMatColor(u32, J3DGXColor);
virtual GXColor* getMatColor(u32);
virtual J3DGXColor* getMatColor(u32);
virtual void setAmbColor(u32, J3DGXColor const*);
virtual void setAmbColor(u32, J3DGXColor);
virtual GXColor* getAmbColor(u32);
virtual J3DGXColor* getAmbColor(u32);
virtual void setColorChanNum(u8);
virtual void setColorChanNum(u8 const*);
virtual u8 getColorChanNum() const;
@@ -958,8 +956,8 @@ public:
virtual ~J3DColorBlockLightOn() {}
private:
/* 0x04 */ GXColor mMatColor[2];
/* 0x0C */ GXColor mAmbColor[2];
/* 0x04 */ J3DGXColor mMatColor[2];
/* 0x0C */ J3DGXColor mAmbColor[2];
/* 0x14 */ u8 mColorChanNum;
/* 0x16 */ J3DColorChan mColorChan[4];
/* 0x20 */ J3DLightObj* mLight[8];
@@ -985,7 +983,7 @@ public:
virtual u32 getType();
virtual void setMatColor(u32, J3DGXColor const*);
virtual void setMatColor(u32, J3DGXColor);
virtual GXColor* getMatColor(u32);
virtual J3DGXColor* getMatColor(u32);
virtual void setColorChanNum(u8);
virtual void setColorChanNum(u8 const*);
virtual u8 getColorChanNum() const;
@@ -1002,7 +1000,7 @@ public:
virtual ~J3DColorBlockLightOff() {}
protected:
/* 0x04 */ GXColor mMatColor[2];
/* 0x04 */ J3DGXColor mMatColor[2];
/* 0x0C */ u8 mColorChanNum;
/* 0x0E */ J3DColorChan mColorChan[4];
/* 0x16 */ u8 mCullMode;
@@ -1023,11 +1021,11 @@ public:
virtual u32 getType();
virtual void setAmbColor(u32, J3DGXColor const*);
virtual void setAmbColor(u32, J3DGXColor);
virtual GXColor* getAmbColor(u32);
virtual J3DGXColor* getAmbColor(u32);
virtual ~J3DColorBlockAmbientOn() {}
protected:
/* 0x20 */ GXColor mAmbColor[2];
/* 0x20 */ J3DGXColor mAmbColor[2];
}; // Size: 0x28
extern int SizeOfJ3DColorBlockAmbientOnLoad;
+2 -2
View File
@@ -59,8 +59,8 @@ public:
}
J3DNBTScale* getNBTScale() const { return mTexGenBlock->getNBTScale(); }
u16 getTexNo(u32 idx) const { return mTevBlock->getTexNo(idx); }
GXColor* getTevKColor(u32 param_0) { return mTevBlock->getTevKColor(param_0); }
GXColorS10* getTevColor(u32 param_0) { return mTevBlock->getTevColor(param_0); }
J3DGXColor* getTevKColor(u32 param_0) { return mTevBlock->getTevKColor(param_0); }
J3DGXColorS10* getTevColor(u32 param_0) { return mTevBlock->getTevColor(param_0); }
J3DFog* getFog() { return mPEBlock->getFog(); }
J3DTexMtx* getTexMtx(u32 idx) { return mTexGenBlock->getTexMtx(idx); }
u16 getIndex() { return mIndex; }
+20 -2
View File
@@ -63,8 +63,16 @@ struct J3DTexMtxInfo {
}; // Size: 0x64
struct J3DIndTexMtxInfo {
/* 0x00 */ Mtx23 field_0x0;
/* 0x18 */ u8 field_0x18;
void operator=(const J3DIndTexMtxInfo& other) {
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
mOffsetMtx[i][j] = other.mOffsetMtx[i][j];
}
}
mScaleExp = other.mScaleExp;
}
/* 0x00 */ Mtx23 mOffsetMtx;
/* 0x18 */ u8 mScaleExp;
}; // Size: 0x1C
struct J3DFogInfo {
@@ -87,6 +95,11 @@ struct J3DNBTScaleInfo {
}; // Size: 0x10
struct J3DIndTexOrderInfo {
void operator=(const J3DIndTexOrderInfo& other) {
mCoord = other.mCoord;
mMap = other.mMap;
}
/* 0x0 */ u8 mCoord;
/* 0x1 */ u8 mMap;
/* 0x2 */ u8 field_0x2;
@@ -147,6 +160,11 @@ struct J3DTexCoordInfo {
};
struct J3DIndTexCoordScaleInfo {
void operator=(const J3DIndTexCoordScaleInfo& other) {
mScaleS = other.mScaleS;
mScaleT = other.mScaleT;
}
/* 0x0 */ u8 mScaleS;
/* 0x1 */ u8 mScaleT;
/* 0x2 */ u8 field_0x2;
+10 -10
View File
@@ -31,21 +31,14 @@ extern const u16 j3dDefaultTevSwapTableID;
extern const u16 j3dDefaultAlphaCmpID;
extern const u16 j3dDefaultZModeID;
struct J3DTevStageTevSwapModeInfo {
u8 field_0x0_29 : 2;
u8 field_0x0_31 : 2;
};
struct J3DTevStage {
J3DTevStage() {
setTevStageInfo(j3dDefaultTevStageInfo);
mTevSwapModeInfo.field_0x0_29 = 0;
mTevSwapModeInfo.field_0x0_31 = 0;
setTevSwapModeInfo(j3dDefaultTevSwapMode);
}
J3DTevStage(const J3DTevStageInfo& info) {
setTevStageInfo(info);
mTevSwapModeInfo.field_0x0_29 = 0;
mTevSwapModeInfo.field_0x0_31 = 0;
setTevSwapModeInfo(j3dDefaultTevSwapMode);
}
J3DTevStage& operator=(const J3DTevStage& other) {
this->field_0x1 = other.field_0x1;
@@ -57,6 +50,13 @@ struct J3DTevStage {
return *this;
}
void setTexSel(u8 param_0) { mTevSwapModeInfo = mTevSwapModeInfo & ~0x0C | param_0 << 2; }
void setRasSel(u8 param_0) { mTevSwapModeInfo = mTevSwapModeInfo & ~0x03 | param_0; }
void setTevSwapModeInfo(const J3DTevSwapModeInfo& info) {
setTexSel(info.field_0x1);
setRasSel(info.field_0x0);
}
void setTevStageInfo(const J3DTevStageInfo&);
void load(u32) const {
@@ -71,7 +71,7 @@ struct J3DTevStage {
/* 0x4 */ u8 field_0x4;
/* 0x5 */ u8 field_0x5;
/* 0x6 */ u8 field_0x6;
/* 0x7 */ J3DTevStageTevSwapModeInfo mTevSwapModeInfo;
/* 0x7 */ u8 mTevSwapModeInfo;
};
struct J3DIndTevStage {