Skip to content

Commit 156d2b2

Browse files
authored
Misc. J3D improvements (#2570)
1 parent 57c9d64 commit 156d2b2

File tree

10 files changed

+1667
-1018
lines changed

10 files changed

+1667
-1018
lines changed

configure.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1081,11 +1081,11 @@ def MatchingFor(*versions) -> bool:
10811081
Object(MatchingFor("GZ2E01", "GZ2J01"), "JSystem/J3DGraphBase/J3DTransform.cpp"),
10821082
Object(MatchingFor("GZ2E01", "GZ2J01"), "JSystem/J3DGraphBase/J3DTexture.cpp"),
10831083
Object(MatchingFor("GZ2E01", "GZ2J01"), "JSystem/J3DGraphBase/J3DPacket.cpp"),
1084-
Object(NonMatching, "JSystem/J3DGraphBase/J3DShapeMtx.cpp"),
1084+
Object(MatchingFor("GZ2E01"), "JSystem/J3DGraphBase/J3DShapeMtx.cpp"),
10851085
Object(NonMatching, "JSystem/J3DGraphBase/J3DShapeDraw.cpp"),
10861086
Object(MatchingFor("GZ2E01", "GZ2J01"), "JSystem/J3DGraphBase/J3DShape.cpp"),
10871087
Object(MatchingFor("GZ2E01", "GZ2J01"), "JSystem/J3DGraphBase/J3DMaterial.cpp", extra_cflags=['-pragma "nosyminline off"']),
1088-
Object(Equivalent, "JSystem/J3DGraphBase/J3DMatBlock.cpp"),
1088+
Object(Equivalent, "JSystem/J3DGraphBase/J3DMatBlock.cpp"), # virtual function order
10891089
Object(MatchingFor("GZ2E01", "GZ2J01"), "JSystem/J3DGraphBase/J3DTevs.cpp"),
10901090
Object(MatchingFor("GZ2E01", "GZ2J01"), "JSystem/J3DGraphBase/J3DDrawBuffer.cpp"),
10911091
Object(MatchingFor("GZ2E01", "GZ2J01"), "JSystem/J3DGraphBase/J3DStruct.cpp"),

include/JSystem/J3DGraphBase/J3DMatBlock.h

Lines changed: 1323 additions & 749 deletions
Large diffs are not rendered by default.

include/JSystem/J3DGraphBase/J3DShape.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ class J3DShape {
9696
/* 80314BB8 */ void addTexMtxIndexInDL(_GXAttr, u32);
9797
/* 80314CBC */ void addTexMtxIndexInVcd(_GXAttr);
9898
/* 80314DA8 */ void calcNBTScale(Vec const&, f32 (*)[3][3], f32 (*)[3][3]);
99-
/* 80314E28 */ u32 countBumpMtxNum() const;
99+
/* 80314E28 */ u16 countBumpMtxNum() const;
100100
/* 80314EEC */ void loadVtxArray() const;
101101
/* 80314F5C */ bool isSameVcdVatCmd(J3DShape*);
102102
/* 80314F98 */ void makeVtxArrayCmd();
@@ -188,8 +188,8 @@ class J3DShapeMtx {
188188

189189
/* 80314798 */ virtual ~J3DShapeMtx() {}
190190
/* 803147E0 */ virtual u32 getType() const { return 'SMTX'; }
191-
/* 80273E08 */ virtual u32 getUseMtxNum() const { return 1; }
192-
/* 8031459C */ virtual u32 getUseMtxIndex(u16) const { return mUseMtxIndex; }
191+
/* 80273E08 */ virtual u16 getUseMtxNum() const { return 1; }
192+
/* 8031459C */ virtual u16 getUseMtxIndex(u16) const { return mUseMtxIndex; }
193193
/* 80313B94 */ virtual void load() const;
194194
/* 80313BF0 */ virtual void calcNBTScale(Vec const&, f32 (*)[3][3], f32 (*)[3][3]);
195195

include/JSystem/J3DGraphBase/J3DShapeMtx.h

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,15 @@ class J3DTexGenBlock;
1313
*/
1414
class J3DTexMtxObj {
1515
public:
16-
Mtx& getMtx(u16 idx) { return mpTexMtx[idx]; }
17-
Mtx44& getEffectMtx(u16 idx) { return mpEffectMtx[idx]; }
18-
u16 getNumTexMtx() { return mTexMtxNum; }
16+
Mtx& getMtx(u16 idx) {
17+
J3D_ASSERT(0x113, idx <= mTexMtxNum, "Error : range over");
18+
return mpTexMtx[idx];
19+
}
20+
Mtx44& getEffectMtx(u16 idx) {
21+
J3D_ASSERT(0x125, idx <= mTexMtxNum, "Error : range over");
22+
return mpEffectMtx[idx];
23+
}
24+
u16 getNumTexMtx() const { return mTexMtxNum; }
1925
void setMtx(u16 idx, Mtx const* mtx) { MTXCopy(*mtx, mpTexMtx[idx]); }
2026

2127
/* 0x00 */ Mtx* mpTexMtx;
@@ -114,8 +120,8 @@ class J3DShapeMtxMulti : public J3DShapeMtx {
114120

115121
/* 803146B0 */ virtual ~J3DShapeMtxMulti() {}
116122
/* 803147E0 */ virtual u32 getType() const { return 'SMML'; }
117-
/* 80273E08 */ virtual u32 getUseMtxNum() const { return mUseMtxNum; }
118-
/* 8031459C */ virtual u32 getUseMtxIndex(u16 no) const { return mUseMtxIndexTable[no]; }
123+
/* 80273E08 */ virtual u16 getUseMtxNum() const { return mUseMtxNum; }
124+
/* 8031459C */ virtual u16 getUseMtxIndex(u16 no) const { return mUseMtxIndexTable[no]; }
119125
/* 80313E4C */ virtual void load() const;
120126
/* 80313EEC */ virtual void calcNBTScale(Vec const&, f32 (*)[3][3], f32 (*)[3][3]);
121127

@@ -138,8 +144,8 @@ class J3DShapeMtxMultiConcatView : public J3DShapeMtxConcatView {
138144

139145
/* 8031461C */ virtual ~J3DShapeMtxMultiConcatView() {}
140146
/* 803147E0 */ virtual u32 getType() const { return 'SMMC'; }
141-
/* 80273E08 */ virtual u32 getUseMtxNum() const { return mUseMtxNum; }
142-
/* 8031459C */ virtual u32 getUseMtxIndex(u16 no) const { return mUseMtxIndexTable[no]; }
147+
/* 80273E08 */ virtual u16 getUseMtxNum() const { return mUseMtxNum; }
148+
/* 8031459C */ virtual u16 getUseMtxIndex(u16 no) const { return mUseMtxIndexTable[no]; }
143149
/* 80313FA4 */ virtual void load() const;
144150
/* 803146AC */ virtual void loadNrmMtx(int, u16) const {}
145151
/* 8031419C */ virtual void loadNrmMtx(int, u16, f32 (*)[4]) const;

include/JSystem/J3DGraphBase/J3DTevs.h

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ struct J3DTevStage {
6969
setTevStageInfo(j3dDefaultTevStageInfo);
7070
setTevSwapModeInfo(j3dDefaultTevSwapMode);
7171
}
72+
7273
void setTevColorOp(u8 param_1, u8 param_2, u8 param_3, u8 param_4, u8 param_5) {
7374
mTevColorOp = mTevColorOp & ~(0x01 << 2) | param_1 << 2;
7475
if (param_1 <= 1) {
@@ -128,10 +129,16 @@ struct J3DTevStage {
128129
setTexSel(param_0.mTexSel);
129130
setRasSel(param_0.mRasSel);
130131
}
132+
133+
void setStageNo(u32 param_0) {
134+
field_0x0 = 0xC0 + param_0 * 2;
135+
field_0x4 = 0xC1 + param_0 * 2;
136+
}
137+
131138
void setRasSel(u8 ras_sel) { mTevSwapModeInfo = (mTevSwapModeInfo & ~3) | ras_sel; }
132139
void setTexSel(u8 tex_sel) { mTevSwapModeInfo = (mTevSwapModeInfo & ~0xc) | (tex_sel << 2); }
133140

134-
void load(u32 param_1) {
141+
void load(u32 param_1) const {
135142
J3DGDWriteBPCmd(*(u32*)&field_0x0);
136143
J3DGDWriteBPCmd(*(u32*)&field_0x4);
137144
}
@@ -203,7 +210,7 @@ struct J3DIndTevStage {
203210
void setLod(u8 lod) { mInfo = (mInfo & ~0x80000) | (lod << 19); }
204211
void setAlphaSel(u8 alphaSel) { mInfo = (mInfo & ~0x180) | (alphaSel << 7); }
205212

206-
void load(u32 param_1) {
213+
void load(u32 param_1) const {
207214
J3DGDWriteBPCmd(mInfo | (param_1 + 0x10) * 0x1000000);
208215
}
209216

@@ -251,14 +258,20 @@ struct J3DTevSwapModeTable {
251258
J3DTevSwapModeTable(J3DTevSwapModeTableInfo const& info) {
252259
mIdx = calcTevSwapTableID(info.field_0x0, info.field_0x1, info.field_0x2, info.field_0x3);
253260
}
261+
262+
J3DTevSwapModeTable& operator=(const J3DTevSwapModeTable& rhs) {
263+
mIdx = rhs.mIdx;
264+
return *this;
265+
}
266+
254267
u8 calcTevSwapTableID(u8 param_0, u8 param_1, u8 param_2, u8 param_3) {
255268
return 0x40 * param_0 + 0x10 * param_1 + 4 * param_2 + param_3;
256269
}
257270

258-
u8 getR() { return j3dTevSwapTableTable[mIdx * 4]; }
259-
u8 getG() { return j3dTevSwapTableTable[mIdx * 4 + 1]; }
260-
u8 getB() { return j3dTevSwapTableTable[mIdx * 4 + 2]; }
261-
u8 getA() { return j3dTevSwapTableTable[mIdx * 4 + 3]; }
271+
u8 getR() const { return *(&j3dTevSwapTableTable[mIdx * 4] + 0); }
272+
u8 getG() const { return *(&j3dTevSwapTableTable[mIdx * 4] + 1); }
273+
u8 getB() const { return *(&j3dTevSwapTableTable[mIdx * 4] + 2); }
274+
u8 getA() const { return *(&j3dTevSwapTableTable[mIdx * 4] + 3); }
262275

263276
/* 0x0 */ u8 mIdx;
264277
}; // Size: 0x1

src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,15 @@ Mtx* J3DMtxBuffer::sNoUseDrawMtxPtr = &J3DMtxBuffer::sNoUseDrawMtx;
2121
/* 80450974-80450978 -00001 0004+00 1/1 0/0 0/0 .sdata sNoUseNrmMtxPtr__12J3DMtxBuffer */
2222
Mtx33* J3DMtxBuffer::sNoUseNrmMtxPtr = &J3DMtxBuffer::sNoUseNrmMtx;
2323

24+
// force .sdata2 order
25+
f32 dummy1() {
26+
return 1.0f;
27+
}
28+
29+
f32 dummy0() {
30+
return 0.0f;
31+
}
32+
2433
/* 80326214-80326258 320B54 0044+00 0/0 1/1 0/0 .text initialize__12J3DMtxBufferFv */
2534
void J3DMtxBuffer::initialize() {
2635
mJointTree = NULL;

0 commit comments

Comments
 (0)