summaryrefslogtreecommitdiff
path: root/libs/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp
diff options
context:
space:
mode:
authorhatal175 <hatal175@users.noreply.github.com>2024-02-06 07:04:35 +0200
committerGitHub <noreply@github.com>2024-02-06 07:04:35 +0200
commitc19d9b02be5d894f91cd45884eed67152dffffa4 (patch)
treeeaa14d73085ab7adfdd657ba8d1b2d2e23e149f2 /libs/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp
parente98d9c845c3476b3060a4bada25ced6a736835de (diff)
J3D work (#2064)
Diffstat (limited to 'libs/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp')
-rw-r--r--libs/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp258
1 files changed, 187 insertions, 71 deletions
diff --git a/libs/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp b/libs/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp
index 728ea33ad9..74ec8e5ace 100644
--- a/libs/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp
+++ b/libs/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp
@@ -6,6 +6,7 @@
#include "JSystem/J3DGraphAnimator/J3DMaterialAttach.h"
#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
+#include "JSystem/JUtility/JUTAssert.h"
#include "dol2asm.h"
#include "dolphin/types.h"
@@ -46,13 +47,8 @@ extern "C" void _restgpr_22();
extern "C" void _restgpr_24();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
-extern "C" extern u8 const j3dDefaultTexMtxInfo[100];
extern "C" extern void* __vt__11J3DTexNoAnm[3];
-//
-// Declarations:
-//
-
/* 8032F5A8-8032F5D0 329EE8 0028+00 0/0 1/1 0/0 .text clear__16J3DMaterialTableFv */
void J3DMaterialTable::clear() {
mMaterialNum = 0;
@@ -65,16 +61,6 @@ void J3DMaterialTable::clear() {
field_0x1c = 0;
}
-/* ############################################################################################## */
-/* 803CEE80-803CEE90 02BFA0 000C+04 2/2 0/0 0/0 .data __vt__16J3DMaterialTable */
-SECTION_DATA extern void* __vt__16J3DMaterialTable[3 + 1 /* padding */] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__16J3DMaterialTableFv,
- /* padding */
- NULL,
-};
-
/* 8032F5D0-8032F604 329F10 0034+00 0/0 2/2 0/0 .text __ct__16J3DMaterialTableFv */
J3DMaterialTable::J3DMaterialTable() {
mMaterialNum = 0;
@@ -111,12 +97,10 @@ int J3DMaterialTable::removeMatColorAnimator(J3DAnmColor* pAnmColor) {
/* 8032F6F8-8032F7B4 32A038 00BC+00 0/0 5/5 10/10 .text
* removeTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern */
-// regalloc
-#ifdef NONMATCHING
int J3DMaterialTable::removeTexNoAnimator(J3DAnmTexPattern* anm) {
int ret = 0;
u16 materialNum = anm->getUpdateMaterialNum();
- J3DAnmTexPatternFullTable* anm_table = anm->getAnmTable();
+ J3DAnmTexPatternFullTable* anm_table = anm->mAnmTable;
for (u16 i = 0; i < materialNum; i++) {
if (anm->isValidUpdateMaterialID(i)) {
@@ -133,90 +117,222 @@ int J3DMaterialTable::removeTexNoAnimator(J3DAnmTexPattern* anm) {
return ret;
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm int J3DMaterialTable::removeTexNoAnimator(J3DAnmTexPattern* param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphAnimator/J3DMaterialAttach/removeTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern.s"
-}
-#pragma pop
-#endif
/* 8032F7B4-8032F880 32A0F4 00CC+00 0/0 4/4 26/26 .text
* removeTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm int J3DMaterialTable::removeTexMtxAnimator(J3DAnmTextureSRTKey* param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphAnimator/J3DMaterialAttach/removeTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey.s"
+int J3DMaterialTable::removeTexMtxAnimator(J3DAnmTextureSRTKey* pAnm) {
+ s32 ret = 0;
+ u16 materialNum = pAnm->getUpdateMaterialNum();
+
+ for (u16 i = 0; i < materialNum; i++) {
+ u16 materialID = pAnm->getUpdateMaterialID(i);
+ if (materialID != 0xFFFF) {
+ J3DMaterial* pMaterial = getMaterialNodePointer(materialID);
+ J3DMaterialAnm* pMatAnm = pMaterial->getMaterialAnm();
+ u8 texMtxID = pAnm->getUpdateTexMtxID(i);
+ if (pMatAnm == NULL) {
+ ret = 1;
+ } else if (texMtxID != 0xFF) {
+ pMatAnm->setTexMtxAnm(texMtxID, NULL);
+ }
+ }
+ }
+
+ return ret;
}
-#pragma pop
/* 8032F880-8032F9C0 32A1C0 0140+00 0/0 7/7 24/24 .text
* removeTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm int J3DMaterialTable::removeTevRegAnimator(J3DAnmTevRegKey* param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphAnimator/J3DMaterialAttach/removeTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey.s"
+int J3DMaterialTable::removeTevRegAnimator(J3DAnmTevRegKey* pAnm) {
+ s32 ret = 0;
+ u16 cRegMaterialNum = pAnm->getCRegUpdateMaterialNum();
+ u16 kRegMaterialNum = pAnm->getKRegUpdateMaterialNum();
+
+ for (u16 i = 0; i < cRegMaterialNum; i++) {
+ if (pAnm->getCRegUpdateMaterialID(i) != 0xFFFF) {
+ J3DMaterialAnm * pMatAnm = getMaterialNodePointer(pAnm->getCRegUpdateMaterialID(i))->getMaterialAnm();
+ u32 colorId = pAnm->getAnmCRegKeyTable()[i].mColorId;
+ if (pMatAnm == NULL)
+ ret = 1;
+ else
+ pMatAnm->setTevColorAnm(colorId, NULL);
+ }
+ }
+
+ for (u16 i = 0; i < kRegMaterialNum; i++) {
+ if (pAnm->getKRegUpdateMaterialID(i) != 0xFFFF) {
+ J3DMaterialAnm * pMatAnm = getMaterialNodePointer(pAnm->getKRegUpdateMaterialID(i))->getMaterialAnm();
+ u32 colorId = pAnm->getAnmKRegKeyTable()[i].mColorId;
+ if (pMatAnm == NULL) {
+ ret = 1;
+ } else {
+ pMatAnm->setTevKColorAnm(colorId, NULL);
+ }
+ }
+ }
+
+ return ret;
}
-#pragma pop
/* 8032F9C0-8032FAF4 32A300 0134+00 1/1 0/0 0/0 .text
* createTexMtxForAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterialTable::createTexMtxForAnimator(J3DAnmTextureSRTKey* param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphAnimator/J3DMaterialAttach/createTexMtxForAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey.s"
+int J3DMaterialTable::createTexMtxForAnimator(J3DAnmTextureSRTKey* param_1) {
+ int rv = 0;
+ u16 materialNum = param_1->getUpdateMaterialNum();
+ if (isLocked()) {
+ return 2;
+ }
+ for (u16 i = 0; i < materialNum; i++) {
+ if (param_1->isValidUpdateMaterialID(i)) {
+ J3DMaterial* material = getMaterialNodePointer(param_1->getUpdateMaterialID(i));
+ u8 mtxId = param_1->getUpdateTexMtxID(i);
+ if (material->getMaterialAnm() == 0) {
+ rv = 1;
+ } else {
+ u32 mtxId2 = mtxId;
+ if (mtxId2 != 0xff && material->getTexMtx(mtxId2) == 0) {
+ J3DTexMtx* mtx = new J3DTexMtx();
+ rv = 4;
+ material->setTexMtx(mtxId2, mtx);
+ JUT_WARN(420, "matNo<%d> : texMtx%d nothing !\n", i, mtxId);
+ }
+ }
+ }
+ }
+ return rv;
}
-#pragma pop
/* 8032FAF4-8032FBC8 32A434 00D4+00 0/0 1/1 0/0 .text
* entryMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterialTable::entryMatColorAnimator(J3DAnmColor* param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphAnimator/J3DMaterialAttach/entryMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor.s"
+int J3DMaterialTable::entryMatColorAnimator(J3DAnmColor* param_1) {
+ int rv = 0;
+ u16 materialNum = param_1->getUpdateMaterialNum();
+ if (isLocked()) {
+ return 2;
+ }
+ for (u16 i = 0; i < materialNum; i++) {
+ if (param_1->isValidUpdateMaterialID(i)) {
+ J3DMaterial* material = getMaterialNodePointer(param_1->getUpdateMaterialID(i));
+ J3DMaterialAnm* materialAnm = material->getMaterialAnm();
+ if (materialAnm == 0) {
+ rv = 1;
+ } else {
+ J3DMatColorAnm matColorAnm(i, param_1);
+ materialAnm->setMatColorAnm(0, &matColorAnm);
+ }
+ }
+ }
+ return rv;
}
-#pragma pop
/* 8032FBC8-8032FCC4 32A508 00FC+00 0/0 7/7 1/1 .text
* entryTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterialTable::entryTexNoAnimator(J3DAnmTexPattern* param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphAnimator/J3DMaterialAttach/entryTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern.s"
+int J3DMaterialTable::entryTexNoAnimator(J3DAnmTexPattern* param_1) {
+ int rv = 0;
+ u16 materialNum = param_1->getUpdateMaterialNum();
+ if (isLocked()) {
+ return 2;
+ }
+ for (u16 i = 0; i < materialNum; i++) {
+ if (param_1->isValidUpdateMaterialID(i)) {
+ J3DMaterial* material = getMaterialNodePointer(param_1->getUpdateMaterialID(i));
+ J3DMaterialAnm* materialAnm = material->getMaterialAnm();
+ u8 texNo = param_1->getAnmTable()[i].mTexNo;
+ if (materialAnm == 0) {
+ rv = 1;
+ } else {
+ J3DTexNoAnm texNoAnm(i, param_1);
+ materialAnm->setTexNoAnm(texNo, &texNoAnm);
+ }
+ }
+ }
+ return rv;
}
-#pragma pop
/* 8032FCC4-8032FE70 32A604 01AC+00 0/0 14/14 6/6 .text
* entryTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey */
+// getUpdateTexMtxID u8 issue / getSRTCenter
+#ifdef NONMATCHING
+int J3DMaterialTable::entryTexMtxAnimator(J3DAnmTextureSRTKey* param_1) {
+ int rv = 0;
+ u16 materialNum = param_1->getUpdateMaterialNum();
+ rv = createTexMtxForAnimator(param_1);
+ if (rv != 0) {
+ return rv;
+ }
+ if (isLocked()) {
+ return 2;
+ }
+ for (u16 i = 0; i < materialNum; i++) {
+ if (param_1->isValidUpdateMaterialID(i)) {
+ J3DMaterial* material = getMaterialNodePointer(param_1->getUpdateMaterialID(i));
+ J3DMaterialAnm* materialAnm = material->getMaterialAnm();
+ u8 texMtxID = param_1->getUpdateTexMtxID(i);
+ if (materialAnm == 0) {
+ rv = 1;
+ } else {
+ if (texMtxID != 0xff) {
+ if (material->getTexCoord(texMtxID) != NULL) {
+ material->getTexCoord(texMtxID)->setTexGenMtx(texMtxID * 3 + 30);
+ }
+ J3DTexMtxInfo& iVar3 = material->getTexMtx(texMtxID)->getTexMtxInfo();
+ iVar3.mInfo = (iVar3.mInfo & 0x3f)| (param_1->getTexMtxCalcType() << 7);
+ iVar3.mCenter.x = param_1->getSRTCenter(i)->x;
+ iVar3.mCenter.y = param_1->getSRTCenter(i)->y;
+ iVar3.mCenter.z = param_1->getSRTCenter(i)->z;
+ J3DTexMtxAnm texMtxAnm(i, param_1);
+ materialAnm->setTexMtxAnm(texMtxID, &texMtxAnm);
+ }
+ }
+ }
+ }
+ return rv;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void J3DMaterialTable::entryTexMtxAnimator(J3DAnmTextureSRTKey* param_0) {
+asm int J3DMaterialTable::entryTexMtxAnimator(J3DAnmTextureSRTKey* param_0) {
nofralloc
#include "asm/JSystem/J3DGraphAnimator/J3DMaterialAttach/entryTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey.s"
}
#pragma pop
+#endif
/* 8032FE70-8032FFEC 32A7B0 017C+00 0/0 10/10 4/4 .text
* entryTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DMaterialTable::entryTevRegAnimator(J3DAnmTevRegKey* param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphAnimator/J3DMaterialAttach/entryTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey.s"
+int J3DMaterialTable::entryTevRegAnimator(J3DAnmTevRegKey* param_1) {
+ int rv = 0;
+ u16 cRegNum = param_1->getCRegUpdateMaterialNum();
+ u16 kRegNum = param_1->getKRegUpdateMaterialNum();
+ if (isLocked()) {
+ return 2;
+ }
+ for (u16 i = 0; i < cRegNum; i++) {
+ if (param_1->isValidCRegUpdateMaterialID(i)) {
+ J3DMaterial* material = getMaterialNodePointer(param_1->getCRegUpdateMaterialID(i));
+ J3DMaterialAnm* materialAnm = material->getMaterialAnm();
+ u8 colorId = param_1->getAnmCRegKeyTable()[i].mColorId;
+ if (materialAnm == NULL) {
+ rv = 1;
+ } else {
+ J3DTevColorAnm tevColorAnm(i, param_1);
+ materialAnm->setTevColorAnm(colorId, &tevColorAnm);
+ }
+ }
+ }
+ for (u16 i = 0; i < kRegNum; i++) {
+ if (param_1->isValidKRegUpdateMaterialID(i)) {
+ J3DMaterial* material = getMaterialNodePointer(param_1->getKRegUpdateMaterialID(i));
+ J3DMaterialAnm* materialAnm = material->getMaterialAnm();
+ u32 colorId = param_1->getAnmKRegKeyTable()[i].mColorId;
+ if (materialAnm == NULL) {
+ rv = 1;
+ } else {
+ J3DTevKColorAnm tevKColorAnm(i, param_1);
+ materialAnm->setTevKColorAnm(colorId, &tevKColorAnm);
+ }
+ }
+ }
+ return rv;
}
-#pragma pop