summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorTal Hayon <talhayon1@gmail.com>2023-07-09 20:21:18 +0300
committerTal Hayon <talhayon1@gmail.com>2023-07-09 20:21:18 +0300
commite00ce8bc31ce57f3aeff7c4844ffa926fa08e95f (patch)
tree97873da548ff40005e563245aa002e9fc0117f9f /libs
parentcf26cd610d4e88f391c7d854b5da5b7460d130c5 (diff)
Work on J3DMaterial
Diffstat (limited to 'libs')
-rw-r--r--libs/JSystem/J3DGraphBase/J3DGD.cpp5
-rw-r--r--libs/JSystem/J3DGraphBase/J3DMaterial.cpp520
-rw-r--r--libs/dolphin/gd/GDBase.c4
3 files changed, 308 insertions, 221 deletions
diff --git a/libs/JSystem/J3DGraphBase/J3DGD.cpp b/libs/JSystem/J3DGraphBase/J3DGD.cpp
index 50729c4045..0906182ba8 100644
--- a/libs/JSystem/J3DGraphBase/J3DGD.cpp
+++ b/libs/JSystem/J3DGraphBase/J3DGD.cpp
@@ -63,7 +63,6 @@ extern "C" void _restgpr_24();
extern "C" void _restgpr_25();
extern "C" void _restgpr_27();
extern "C" void _restgpr_29();
-extern "C" extern u8 __GDCurrentDL[4];
//
// Declarations:
@@ -82,7 +81,7 @@ SECTION_SDATA static u8 cm2hw[4] = {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void J3DGDSetGenMode(u8 param_0, u8 param_1, u8 param_2, u8 param_3, _GXCullMode param_4) {
+asm void J3DGDSetGenMode(u8 texGenNum, u8 colorChanNum, u8 tevStageNum, u8 IndTexStageNum, _GXCullMode cullMode) {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DGD/J3DGDSetGenMode__FUcUcUcUc11_GXCullMode.s"
}
@@ -92,7 +91,7 @@ asm void J3DGDSetGenMode(u8 param_0, u8 param_1, u8 param_2, u8 param_3, _GXCull
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void J3DGDSetGenMode_3Param(u8 param_0, u8 param_1, u8 param_2) {
+asm void J3DGDSetGenMode_3Param(u8 texGenNum, u8 tevStageNum, u8 indTexStageNum) {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DGD/J3DGDSetGenMode_3Param__FUcUcUc.s"
}
diff --git a/libs/JSystem/J3DGraphBase/J3DMaterial.cpp b/libs/JSystem/J3DGraphBase/J3DMaterial.cpp
index 44a8590204..0647c5e784 100644
--- a/libs/JSystem/J3DGraphBase/J3DMaterial.cpp
+++ b/libs/JSystem/J3DGraphBase/J3DMaterial.cpp
@@ -4,6 +4,7 @@
//
#include "JSystem/J3DGraphBase/J3DMaterial.h"
+#include "JSystem/J3DGraphBase/J3DGD.h"
#include "dol2asm.h"
#include "dolphin/types.h"
@@ -211,8 +212,6 @@ extern "C" void _restgpr_24();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_29();
-extern "C" extern u8 const j3dDefaultFogInfo[44];
-extern "C" extern u8 const j3dDefaultNBTScaleInfo[16];
extern "C" extern void* __vt__14J3DPEBlockFull[31];
extern "C" extern void* __vt__16J3DPEBlockFogOff[31];
extern "C" extern void* __vt__13J3DTevBlock16[55];
@@ -230,9 +229,6 @@ extern "C" extern void* __vt__13J3DPEBlockOpa[31];
extern "C" extern void* __vt__15J3DIndBlockFull[19];
extern "C" extern void* __vt__11J3DTevBlock[55];
extern "C" extern void* __vt__21J3DColorBlockLightOff[36 + 1 /* padding */];
-extern "C" extern u32 j3dDefaultBlendInfo;
-extern "C" extern u16 j3dDefaultAlphaCmpID;
-extern "C" extern u16 j3dDefaultZModeID[1 + 1 /* padding */];
//
// Declarations:
@@ -441,202 +437,280 @@ SECTION_DATA extern void* __vt__13J3DColorBlock[36] = {
/* 803157A0-803159A0 3100E0 0200+00 0/0 3/3 0/0 .text createColorBlock__11J3DMaterialFUl
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::createColorBlock(u32 param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/createColorBlock__11J3DMaterialFUl.s"
+J3DColorBlock* J3DMaterial::createColorBlock(u32 param_0) {
+ J3DColorBlock* rv = NULL;
+ switch (param_0) {
+ case 0:
+ rv = new J3DColorBlockLightOff();
+ break;
+ case 0x40000000:
+ rv = new J3DColorBlockLightOn();
+ break;
+ case 0x80000000:
+ rv = new J3DColorBlockAmbientOn();
+ break;
+ }
+
+ return rv;
}
-#pragma pop
/* 803159A0-80315B04 3102E0 0164+00 0/0 2/2 0/0 .text createTexGenBlock__11J3DMaterialFUl
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::createTexGenBlock(u32 param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/createTexGenBlock__11J3DMaterialFUl.s"
+J3DTexGenBlock* J3DMaterial::createTexGenBlock(u32 param_0) {
+ switch (param_0) {
+ case 0x8000000:
+ return new J3DTexGenBlock4();
+ case 0:
+ default:
+ return new J3DTexGenBlockBasic();
+ }
}
-#pragma pop
/* 80315B04-80315E78 310444 0374+00 0/0 2/2 0/0 .text createTevBlock__11J3DMaterialFi */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::createTevBlock(int param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/createTevBlock__11J3DMaterialFi.s"
+J3DTevBlock* J3DMaterial::createTevBlock(int param_0) {
+ J3DTevBlock* rv = NULL;
+ if (param_0 <= 1) {
+ rv = new J3DTevBlock1();
+ } else if (param_0 == 2) {
+ rv = new J3DTevBlock2();
+ } else if (param_0 <= 4) {
+ rv = new J3DTevBlock4();
+ } else if (param_0 <= 16) {
+ rv = new J3DTevBlock16();
+ }
+ return rv;
}
-#pragma pop
/* 80315E78-80315F60 3107B8 00E8+00 0/0 3/3 0/0 .text createIndBlock__11J3DMaterialFi */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::createIndBlock(int param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/createIndBlock__11J3DMaterialFi.s"
+J3DIndBlock* J3DMaterial::createIndBlock(int param_0) {
+ if (param_0 != 0) {
+ return new J3DIndBlockFull();
+ }
+
+ return new J3DIndBlockNull();
}
-#pragma pop
/* 80315F60-80316100 3108A0 01A0+00 0/0 3/3 0/0 .text createPEBlock__11J3DMaterialFUlUl
*/
+// rv is in r5 for some reason
+#ifdef NONMATCHING
+J3DPEBlock* J3DMaterial::createPEBlock(u32 param_0, u32 param_1) {
+ J3DPEBlock* rv = NULL;
+ if (param_0 == 0) {
+ if (param_1 & 1) {
+ return new J3DPEBlockOpa();
+ } else if (param_1 & 2) {
+ return new J3DPEBlockTexEdge();
+ } else if (param_1 & 4) {
+ return new J3DPEBlockXlu();
+ }
+ }
+
+ if (param_0 == 0x10000000) {
+ rv = new J3DPEBlockFull();
+ } else if (param_0 == 0x20000000) {
+ rv = new J3DPEBlockFogOff();
+ }
+ return rv;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void J3DMaterial::createPEBlock(u32 param_0, u32 param_1) {
+asm J3DPEBlock* J3DMaterial::createPEBlock(u32 param_0, u32 param_1) {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DMaterial/createPEBlock__11J3DMaterialFUlUl.s"
}
#pragma pop
+#endif
/* 80316100-80316150 310A40 0050+00 0/0 2/2 0/0 .text calcSizeColorBlock__11J3DMaterialFUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::calcSizeColorBlock(u32 param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/calcSizeColorBlock__11J3DMaterialFUl.s"
+u32 J3DMaterial::calcSizeColorBlock(u32 param_0) {
+ u32 rv = 0;
+ switch (param_0) {
+ case 0:
+ rv = sizeof(J3DColorBlockLightOff);
+ break;
+ case 0x40000000:
+ rv = sizeof(J3DColorBlockLightOn);
+ break;
+ case 0x80000000:
+ rv = sizeof(J3DColorBlockAmbientOn);
+ break;
+ }
+
+ return rv;
}
-#pragma pop
/* 80316150-8031617C 310A90 002C+00 0/0 1/1 0/0 .text calcSizeTexGenBlock__11J3DMaterialFUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::calcSizeTexGenBlock(u32 param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/calcSizeTexGenBlock__11J3DMaterialFUl.s"
+u32 J3DMaterial::calcSizeTexGenBlock(u32 param_0) {
+ switch (param_0) {
+ case 0x8000000:
+ return sizeof(J3DTexGenBlock4);
+ case 0:
+ default:
+ return sizeof(J3DTexGenBlockBasic);
+ }
}
-#pragma pop
/* 8031617C-803161C4 310ABC 0048+00 0/0 1/1 0/0 .text calcSizeTevBlock__11J3DMaterialFi
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::calcSizeTevBlock(int param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/calcSizeTevBlock__11J3DMaterialFi.s"
+u32 J3DMaterial::calcSizeTevBlock(int param_0) {
+ u32 rv = 0;
+ if (param_0 <= 1) {
+ rv = sizeof(J3DTevBlock1);
+ } else if (param_0 == 2) {
+ rv = sizeof(J3DTevBlock2);
+ } else if (param_0 <= 4) {
+ rv = sizeof(J3DTevBlock4);
+ } else if (param_0 <= 16) {
+ rv = sizeof(J3DTevBlock16);
+ }
+ return rv;
}
-#pragma pop
/* 803161C4-803161D8 310B04 0014+00 0/0 2/2 0/0 .text calcSizeIndBlock__11J3DMaterialFi
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::calcSizeIndBlock(int param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/calcSizeIndBlock__11J3DMaterialFi.s"
+u32 J3DMaterial::calcSizeIndBlock(int param_0) {
+ if (param_0 != 0) {
+ return sizeof(J3DIndBlockFull);
+ }
+
+ return sizeof(J3DIndBlockNull);
}
-#pragma pop
/* 803161D8-80316240 310B18 0068+00 0/0 2/2 0/0 .text calcSizePEBlock__11J3DMaterialFUlUl
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::calcSizePEBlock(u32 param_0, u32 param_1) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/calcSizePEBlock__11J3DMaterialFUlUl.s"
+u32 J3DMaterial::calcSizePEBlock(u32 param_0, u32 param_1) {
+ u32 rv = 0;
+ if (param_0 == 0) {
+ if (param_1 & 1) {
+ rv = sizeof(J3DPEBlockOpa);
+ } else if (param_1 & 2) {
+ rv = sizeof(J3DPEBlockTexEdge);
+ } else if (param_1 & 4) {
+ rv = sizeof(J3DPEBlockXlu);
+ }
+ }
+ else if (param_0 == 0x10000000) {
+ rv = sizeof(J3DPEBlockFull);
+ } else if (param_0 == 0x20000000) {
+ rv = sizeof(J3DPEBlockFogOff);
+ }
+ return rv;
}
-#pragma pop
/* 80316240-80316290 310B80 0050+00 2/2 5/5 0/0 .text initialize__11J3DMaterialFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::initialize() {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/initialize__11J3DMaterialFv.s"
+void J3DMaterial::initialize() {
+ mShape = NULL;
+ mNext = NULL;
+ mJoint = NULL;
+ mMaterialMode = 1;
+ mIndex = -1;
+ mInvalid = 0;
+ mDiffFlag = 0;
+ mColorBlock = NULL;
+ mTexGenBlock = NULL;
+ mTevBlock = NULL;
+ mIndBlock = NULL;
+ mPEBlock = NULL;
+ mpOrigMaterial = NULL;
+ mMaterialAnm = NULL;
+ mSharedDLObj = NULL;
}
-#pragma pop
/* 80316290-80316344 310BD0 00B4+00 0/0 2/2 0/0 .text countDLSize__11J3DMaterialFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm u32 J3DMaterial::countDLSize() {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/countDLSize__11J3DMaterialFv.s"
+u32 J3DMaterial::countDLSize() {
+ return (mColorBlock->countDLSize() + mTexGenBlock->countDLSize() + mTevBlock->countDLSize() +
+ mIndBlock->countDLSize() + mPEBlock->countDLSize() + 31) & ~0x1f;
}
-#pragma pop
/* 80316344-80316620 310C84 02DC+00 2/2 0/0 0/0 .text
* makeDisplayList_private__11J3DMaterialFP17J3DDisplayListObj */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::makeDisplayList_private(J3DDisplayListObj* param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/makeDisplayList_private__11J3DMaterialFP17J3DDisplayListObj.s"
+void J3DMaterial::makeDisplayList_private(J3DDisplayListObj* param_0) {
+ param_0->beginDL();
+ mTevBlock->load();
+ mIndBlock->load();
+ mPEBlock->load();
+ J3DGDSetGenMode(mTexGenBlock->getTexGenNum(), mColorBlock->getColorChanNum(), mTevBlock->getTevStageNum(), mIndBlock->getIndTexStageNum(), (GXCullMode)(u8)mColorBlock->getCullMode());
+ mTexGenBlock->load();
+ mColorBlock->load();
+ J3DGDSetNumChans(mColorBlock->getColorChanNum());
+ J3DGDSetNumTexGens(mTexGenBlock->getTexGenNum());
+ param_0->endDL();
}
-#pragma pop
/* 80316620-80316668 310F60 0048+00 1/0 0/0 0/0 .text makeDisplayList__11J3DMaterialFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::makeDisplayList() {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/makeDisplayList__11J3DMaterialFv.s"
+void J3DMaterial::makeDisplayList() {
+ if (!j3dSys.getMatPacket()->isLocked()) {
+ j3dSys.getMatPacket()->mDiffFlag = mDiffFlag;
+ makeDisplayList_private(j3dSys.getMatPacket()->getDisplayListObj());
+ }
}
-#pragma pop
/* 80316668-8031668C 310FA8 0024+00 1/0 0/0 0/0 .text makeSharedDisplayList__11J3DMaterialFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::makeSharedDisplayList() {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/makeSharedDisplayList__11J3DMaterialFv.s"
+void J3DMaterial::makeSharedDisplayList() {
+ makeDisplayList_private(mSharedDLObj);
}
-#pragma pop
/* 8031668C-803166DC 310FCC 0050+00 1/0 0/0 0/0 .text load__11J3DMaterialFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::load() {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/load__11J3DMaterialFv.s"
+void J3DMaterial::load() {
+ j3dSys.setMaterialMode(mMaterialMode);
+ if (!j3dSys.checkFlag(2)) {
+ loadNBTScale(*mTexGenBlock->getNBTScale());
+ }
}
-#pragma pop
/* 803166DC-80316740 31101C 0064+00 1/0 0/0 0/0 .text loadSharedDL__11J3DMaterialFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::loadSharedDL() {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/loadSharedDL__11J3DMaterialFv.s"
+void J3DMaterial::loadSharedDL() {
+ j3dSys.setMaterialMode(mMaterialMode);
+ if (!j3dSys.checkFlag(2)) {
+ mSharedDLObj->callDL();
+ loadNBTScale(*mTexGenBlock->getNBTScale());
+ }
}
-#pragma pop
/* 80316740-803167D8 311080 0098+00 2/0 0/0 0/0 .text patch__11J3DMaterialFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::patch() {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/patch__11J3DMaterialFv.s"
+void J3DMaterial::patch() {
+ j3dSys.getMatPacket()->mDiffFlag = mDiffFlag;
+ j3dSys.getMatPacket()->beginPatch();
+ mTevBlock->patch();
+ mColorBlock->patch();
+ mTexGenBlock->patch();
+ j3dSys.getMatPacket()->endPatch();
}
-#pragma pop
/* 803167D8-803169DC 311118 0204+00 2/0 0/0 0/0 .text diff__11J3DMaterialFUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::diff(u32 param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/diff__11J3DMaterialFUl.s"
+void J3DMaterial::diff(u32 param_0) {
+ if (j3dSys.getMatPacket()->isEnabled_Diff()) {
+ j3dSys.getMatPacket()->beginDiff();
+ mTevBlock->diff(param_0);
+ mIndBlock->diff(param_0);
+ mPEBlock->diff(param_0);
+ if (param_0 & 0x2000000) {
+ J3DGDSetGenMode_3Param(mTexGenBlock->getTexGenNum(), mTevBlock->getTevStageNum(), mIndBlock->getIndTexStageNum());
+ J3DGDSetNumTexGens(mTexGenBlock->getTexGenNum());
+ }
+ mTexGenBlock->diff(param_0);
+ mColorBlock->diff(param_0);
+ j3dSys.getMatPacket()->endDiff();
+ }
}
-#pragma pop
/* 803169DC-80316A54 31131C 0078+00 2/0 0/0 0/0 .text calc__11J3DMaterialFPA4_Cf */
+// Matches but changes order of TU vtables (?!)
+#ifdef NONMATCHING
+void J3DMaterial::calc(f32 const (*param_0)[4]) {
+ if (j3dSys.checkFlag(0x40000000)) {
+ mTexGenBlock->calcPostTexMtx(param_0);
+ } else {
+ mTexGenBlock->calc(param_0);
+ }
+
+ calcCurrentMtx();
+ setCurrentMtx();
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -646,28 +720,51 @@ extern "C" asm void calc__11J3DMaterialFPA4_Cf() {
#include "asm/JSystem/J3DGraphBase/J3DMaterial/calc__11J3DMaterialFPA4_Cf.s"
}
#pragma pop
+#endif
/* 80316A54-80316AB0 311394 005C+00 3/0 0/0 0/0 .text calcDiffTexMtx__11J3DMaterialFPA4_Cf */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::calcDiffTexMtx(f32 const (*param_0)[4]) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/calcDiffTexMtx__11J3DMaterialFPA4_Cf.s"
+void J3DMaterial::calcDiffTexMtx(f32 const (*param_0)[4]) {
+ if (j3dSys.checkFlag(0x40000000)) {
+ mTexGenBlock->calcPostTexMtxWithoutViewMtx(param_0);
+ } else {
+ mTexGenBlock->calcWithoutViewMtx(param_0);
+ }
}
-#pragma pop
/* 80316AB0-80316AC8 3113F0 0018+00 1/1 1/1 0/0 .text setCurrentMtx__11J3DMaterialFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::setCurrentMtx() {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/setCurrentMtx__11J3DMaterialFv.s"
+void J3DMaterial::setCurrentMtx() {
+ mShape->setCurrentMtx(mCurrentMtx);
}
-#pragma pop
/* 80316AC8-80316D68 311408 02A0+00 1/1 0/0 0/0 .text calcCurrentMtx__11J3DMaterialFv */
+// Issues with setCurrentTexMtx
+#ifdef NONMATCHING
+void J3DMaterial::calcCurrentMtx() {
+ if (!j3dSys.checkFlag(0x40000000)) {
+ mCurrentMtx.setCurrentTexMtx(
+ mTexGenBlock->getTexCoord(0)->getTexGenMtx(),
+ mTexGenBlock->getTexCoord(1)->getTexGenMtx(),
+ mTexGenBlock->getTexCoord(2)->getTexGenMtx(),
+ mTexGenBlock->getTexCoord(3)->getTexGenMtx(),
+ mTexGenBlock->getTexCoord(4)->getTexGenMtx(),
+ mTexGenBlock->getTexCoord(5)->getTexGenMtx(),
+ mTexGenBlock->getTexCoord(6)->getTexGenMtx(),
+ mTexGenBlock->getTexCoord(7)->getTexGenMtx()
+ );
+ } else {
+ mCurrentMtx.setCurrentTexMtx(
+ mTexGenBlock->getTexCoord(0)->getTexMtxReg(),
+ mTexGenBlock->getTexCoord(1)->getTexMtxReg(),
+ mTexGenBlock->getTexCoord(2)->getTexMtxReg(),
+ mTexGenBlock->getTexCoord(3)->getTexMtxReg(),
+ mTexGenBlock->getTexCoord(4)->getTexMtxReg(),
+ mTexGenBlock->getTexCoord(5)->getTexMtxReg(),
+ mTexGenBlock->getTexCoord(6)->getTexMtxReg(),
+ mTexGenBlock->getTexCoord(7)->getTexMtxReg()
+ );
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -676,72 +773,83 @@ asm void J3DMaterial::calcCurrentMtx() {
#include "asm/JSystem/J3DGraphBase/J3DMaterial/calcCurrentMtx__11J3DMaterialFv.s"
}
#pragma pop
+#endif
/* 80316D68-80316E14 3116A8 00AC+00 1/1 0/0 0/0 .text copy__11J3DMaterialFP11J3DMaterial
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::copy(J3DMaterial* param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/copy__11J3DMaterialFP11J3DMaterial.s"
+void J3DMaterial::copy(J3DMaterial* param_0) {
+ mColorBlock->reset(param_0->mColorBlock);
+ mTexGenBlock->reset(param_0->mTexGenBlock);
+ mTevBlock->reset(param_0->mTevBlock);
+ mIndBlock->reset(param_0->mIndBlock);
+ mPEBlock->reset(param_0->mPEBlock);
}
-#pragma pop
/* 80316E14-80316E70 311754 005C+00 1/0 0/0 0/0 .text reset__11J3DMaterialFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::reset() {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/reset__11J3DMaterialFv.s"
+void J3DMaterial::reset() {
+ if ((~mDiffFlag & 0x80000000) == 0) {
+ mDiffFlag &= ~0x80000000;
+ mMaterialMode = mpOrigMaterial->mMaterialMode;
+ mInvalid = mpOrigMaterial->mInvalid;
+ mMaterialAnm = NULL;
+ copy(mpOrigMaterial);
+ }
}
-#pragma pop
/* 80316E70-80316E90 3117B0 0020+00 1/0 0/0 0/0 .text change__11J3DMaterialFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterial::change() {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/change__11J3DMaterialFv.s"
+void J3DMaterial::change() {
+ if ((mDiffFlag & 0xc0000000) == 0) {
+ mDiffFlag |= 0x80000000;
+ mMaterialAnm = NULL;
+ }
}
-#pragma pop
/* 80316E90-80316F24 3117D0 0094+00 0/0 2/2 0/0 .text newSharedDisplayList__11J3DMaterialFUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm s32 J3DMaterial::newSharedDisplayList(u32 param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/newSharedDisplayList__11J3DMaterialFUl.s"
+s32 J3DMaterial::newSharedDisplayList(u32 param_0) {
+ if (mSharedDLObj == NULL) {
+ mSharedDLObj = new J3DDisplayListObj();
+ if (mSharedDLObj == NULL) {
+ return 4;
+ }
+ s32 res = mSharedDLObj->newDisplayList(param_0);
+ switch (res) {
+ case kJ3DError_Success:
+ break;
+ default:
+ return res;
+ }
+ }
+ return 0;
}
-#pragma pop
/* 80316F24-80316FB8 311864 0094+00 0/0 2/2 0/0 .text newSingleSharedDisplayList__11J3DMaterialFUl
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm s32 J3DMaterial::newSingleSharedDisplayList(u32 param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/newSingleSharedDisplayList__11J3DMaterialFUl.s"
+s32 J3DMaterial::newSingleSharedDisplayList(u32 param_0) {
+ if (mSharedDLObj == NULL) {
+ mSharedDLObj = new J3DDisplayListObj();
+ if (mSharedDLObj == NULL) {
+ return 4;
+ }
+ s32 res = mSharedDLObj->newSingleDisplayList(param_0);
+ switch (res) {
+ case kJ3DError_Success:
+ break;
+ default:
+ return res;
+ }
+ }
+ return 0;
}
-#pragma pop
/* 80316FB8-80316FD8 3118F8 0020+00 0/0 1/1 0/0 .text initialize__18J3DPatchedMaterialFv
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DPatchedMaterial::initialize() {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/initialize__18J3DPatchedMaterialFv.s"
+void J3DPatchedMaterial::initialize() {
+ J3DMaterial::initialize();
}
-#pragma pop
/* 80316FD8-80316FDC 311918 0004+00 1/0 0/0 0/0 .text makeDisplayList__18J3DPatchedMaterialFv */
extern "C" asm void makeDisplayList__18J3DPatchedMaterialFv() {
+//void J3DPatchedMaterial::makeDisplayList() {
/* empty function */
}
@@ -752,14 +860,12 @@ void J3DPatchedMaterial::makeSharedDisplayList() {
}
/* 80316FE0-80316FFC 311920 001C+00 1/0 0/0 0/0 .text load__18J3DPatchedMaterialFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DPatchedMaterial::load() {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/load__18J3DPatchedMaterialFv.s"
+void J3DPatchedMaterial::load() {
+ j3dSys.setMaterialMode(mMaterialMode);
+ if (j3dSys.checkFlag(2)) {
+ return;
+ }
}
-#pragma pop
/* 80316FFC-8031703C 31193C 0040+00 1/0 0/0 0/0 .text loadSharedDL__18J3DPatchedMaterialFv */
void J3DPatchedMaterial::loadSharedDL() {
@@ -780,14 +886,9 @@ void J3DPatchedMaterial::change() {
/* 80317044-80317064 311984 0020+00 0/0 1/1 0/0 .text initialize__17J3DLockedMaterialFv
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DLockedMaterial::initialize() {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/initialize__17J3DLockedMaterialFv.s"
+void J3DLockedMaterial::initialize() {
+ J3DMaterial::initialize();
}
-#pragma pop
/* 80317064-80317068 3119A4 0004+00 1/0 0/0 0/0 .text makeDisplayList__17J3DLockedMaterialFv */
void J3DLockedMaterial::makeDisplayList() {
@@ -801,21 +902,12 @@ void J3DLockedMaterial::makeSharedDisplayList() {
}
/* 8031706C-80317088 3119AC 001C+00 1/0 0/0 0/0 .text load__17J3DLockedMaterialFv */
-#ifdef NONMATCHING
void J3DLockedMaterial::load() {
j3dSys.setMaterialMode(mMaterialMode);
- // some extra dead code after? wtf?
-}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DLockedMaterial::load() {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/load__17J3DLockedMaterialFv.s"
+ if (j3dSys.checkFlag(2)) {
+ return;
+ }
}
-#pragma pop
-#endif
/* 80317088-803170C8 3119C8 0040+00 1/0 0/0 0/0 .text loadSharedDL__17J3DLockedMaterialFv
*/
diff --git a/libs/dolphin/gd/GDBase.c b/libs/dolphin/gd/GDBase.c
index b6e7a77f6b..9a9203b05d 100644
--- a/libs/dolphin/gd/GDBase.c
+++ b/libs/dolphin/gd/GDBase.c
@@ -27,10 +27,6 @@ void GDFlushCurrToMem(void) {
DCFlushRange(__GDCurrentDL->start, __GDCurrentDL->length);
}
-static inline void __GDWrite(u8 data) {
- *__GDCurrentDL->ptr++ = data;
-}
-
/* 80360FDC-803610D4 35B91C 00F8+00 0/0 2/2 0/0 .text GDPadCurr32 */
void GDPadCurr32(void) {
u32 i = ((u32)__GDCurrentDL->ptr & 31);