mirror of
https://github.com/zeldaret/tp
synced 2026-05-23 15:01:53 -04:00
b45a089e15
* some j3d cleanup * begin using uintptr_t * j3dgraphbase cleanup * j3dgraphanimator cleanup
479 lines
15 KiB
C++
479 lines
15 KiB
C++
#include "JSystem/J3DGraphBase/J3DMaterial.h"
|
|
#include "JSystem/J3DGraphBase/J3DGD.h"
|
|
|
|
/* 803157A0-803159A0 3100E0 0200+00 0/0 3/3 0/0 .text createColorBlock__11J3DMaterialFUl
|
|
*/
|
|
J3DColorBlock* J3DMaterial::createColorBlock(u32 flags) {
|
|
J3DColorBlock* rv = NULL;
|
|
switch (flags) {
|
|
case 0:
|
|
rv = new J3DColorBlockLightOff();
|
|
break;
|
|
case 0x40000000:
|
|
rv = new J3DColorBlockLightOn();
|
|
break;
|
|
case 0x80000000:
|
|
rv = new J3DColorBlockAmbientOn();
|
|
break;
|
|
}
|
|
|
|
J3D_ASSERT_ALLOCMEM(55, rv != NULL);
|
|
return rv;
|
|
}
|
|
|
|
/* 803159A0-80315B04 3102E0 0164+00 0/0 2/2 0/0 .text createTexGenBlock__11J3DMaterialFUl
|
|
*/
|
|
J3DTexGenBlock* J3DMaterial::createTexGenBlock(u32 flags) {
|
|
J3DTexGenBlock* rv = NULL;
|
|
switch (flags) {
|
|
case 0x8000000:
|
|
rv = new J3DTexGenBlock4();
|
|
break;
|
|
case 0:
|
|
default:
|
|
rv = new J3DTexGenBlockBasic();
|
|
}
|
|
|
|
J3D_ASSERT_ALLOCMEM(83, rv != NULL);
|
|
return rv;
|
|
}
|
|
|
|
/* 80315B04-80315E78 310444 0374+00 0/0 2/2 0/0 .text createTevBlock__11J3DMaterialFi */
|
|
J3DTevBlock* J3DMaterial::createTevBlock(int tevStageNum) {
|
|
J3DTevBlock* rv = NULL;
|
|
if (tevStageNum <= 1) {
|
|
rv = new J3DTevBlock1();
|
|
} else if (tevStageNum == 2) {
|
|
rv = new J3DTevBlock2();
|
|
} else if (tevStageNum <= 4) {
|
|
rv = new J3DTevBlock4();
|
|
} else if (tevStageNum <= 16) {
|
|
rv = new J3DTevBlock16();
|
|
}
|
|
|
|
J3D_ASSERT_ALLOCMEM(116, rv != NULL);
|
|
return rv;
|
|
}
|
|
|
|
/* 80315E78-80315F60 3107B8 00E8+00 0/0 3/3 0/0 .text createIndBlock__11J3DMaterialFi */
|
|
J3DIndBlock* J3DMaterial::createIndBlock(int flags) {
|
|
J3DIndBlock* rv = NULL;
|
|
if (flags != 0) {
|
|
rv = new J3DIndBlockFull();
|
|
} else {
|
|
rv = new J3DIndBlockNull();
|
|
}
|
|
|
|
J3D_ASSERT_ALLOCMEM(139, rv != NULL);
|
|
return rv;
|
|
}
|
|
|
|
/* 80315F60-80316100 3108A0 01A0+00 0/0 3/3 0/0 .text createPEBlock__11J3DMaterialFUlUl
|
|
*/
|
|
J3DPEBlock* J3DMaterial::createPEBlock(u32 flags, u32 materialMode) {
|
|
J3DPEBlock* rv = NULL;
|
|
if (flags == 0) {
|
|
if (materialMode & 1) {
|
|
rv = new J3DPEBlockOpa();
|
|
J3D_ASSERT_ALLOCMEM(166, rv != NULL);
|
|
return rv;
|
|
} else if (materialMode & 2) {
|
|
rv = new J3DPEBlockTexEdge();
|
|
J3D_ASSERT_ALLOCMEM(172, rv != NULL);
|
|
return rv;
|
|
} else if (materialMode & 4) {
|
|
rv = new J3DPEBlockXlu();
|
|
J3D_ASSERT_ALLOCMEM(178, rv != NULL);
|
|
return rv;
|
|
}
|
|
}
|
|
|
|
if (flags == 0x10000000) {
|
|
rv = new J3DPEBlockFull();
|
|
} else if (flags == 0x20000000) {
|
|
rv = new J3DPEBlockFogOff();
|
|
}
|
|
|
|
J3D_ASSERT_ALLOCMEM(188, rv != NULL);
|
|
return rv;
|
|
}
|
|
|
|
/* 80316100-80316150 310A40 0050+00 0/0 2/2 0/0 .text calcSizeColorBlock__11J3DMaterialFUl */
|
|
u32 J3DMaterial::calcSizeColorBlock(u32 flags) {
|
|
u32 rv = 0;
|
|
switch (flags) {
|
|
case 0:
|
|
rv += sizeof(J3DColorBlockLightOff);
|
|
break;
|
|
case 0x40000000:
|
|
rv += sizeof(J3DColorBlockLightOn);
|
|
break;
|
|
case 0x80000000:
|
|
rv += sizeof(J3DColorBlockAmbientOn);
|
|
break;
|
|
}
|
|
|
|
return rv;
|
|
}
|
|
|
|
/* 80316150-8031617C 310A90 002C+00 0/0 1/1 0/0 .text calcSizeTexGenBlock__11J3DMaterialFUl */
|
|
u32 J3DMaterial::calcSizeTexGenBlock(u32 flags) {
|
|
u32 rv = 0;
|
|
switch (flags) {
|
|
case 0x8000000:
|
|
rv += sizeof(J3DTexGenBlock4);
|
|
break;
|
|
case 0:
|
|
default:
|
|
rv += sizeof(J3DTexGenBlockBasic);
|
|
}
|
|
|
|
return rv;
|
|
}
|
|
|
|
/* 8031617C-803161C4 310ABC 0048+00 0/0 1/1 0/0 .text calcSizeTevBlock__11J3DMaterialFi
|
|
*/
|
|
u32 J3DMaterial::calcSizeTevBlock(int tevStageNum) {
|
|
u32 rv = 0;
|
|
if (tevStageNum <= 1) {
|
|
rv += sizeof(J3DTevBlock1);
|
|
} else if (tevStageNum == 2) {
|
|
rv += sizeof(J3DTevBlock2);
|
|
} else if (tevStageNum <= 4) {
|
|
rv += sizeof(J3DTevBlock4);
|
|
} else if (tevStageNum <= 16) {
|
|
rv += sizeof(J3DTevBlock16);
|
|
}
|
|
|
|
return rv;
|
|
}
|
|
|
|
/* 803161C4-803161D8 310B04 0014+00 0/0 2/2 0/0 .text calcSizeIndBlock__11J3DMaterialFi
|
|
*/
|
|
u32 J3DMaterial::calcSizeIndBlock(int flags) {
|
|
u32 rv = 0;
|
|
if (flags != 0) {
|
|
rv += sizeof(J3DIndBlockFull);
|
|
} else {
|
|
rv += sizeof(J3DIndBlockNull);
|
|
}
|
|
|
|
return rv;
|
|
}
|
|
|
|
/* 803161D8-80316240 310B18 0068+00 0/0 2/2 0/0 .text calcSizePEBlock__11J3DMaterialFUlUl
|
|
*/
|
|
u32 J3DMaterial::calcSizePEBlock(u32 flags, u32 materialMode) {
|
|
u32 rv = 0;
|
|
if (flags == 0) {
|
|
if (materialMode & 1) {
|
|
rv += sizeof(J3DPEBlockOpa);
|
|
} else if (materialMode & 2) {
|
|
rv += sizeof(J3DPEBlockTexEdge);
|
|
} else if (materialMode & 4) {
|
|
rv += sizeof(J3DPEBlockXlu);
|
|
}
|
|
} else if (flags == 0x10000000) {
|
|
rv += sizeof(J3DPEBlockFull);
|
|
} else if (flags == 0x20000000) {
|
|
rv += sizeof(J3DPEBlockFogOff);
|
|
}
|
|
|
|
return rv;
|
|
}
|
|
|
|
/* 80316240-80316290 310B80 0050+00 2/2 5/5 0/0 .text initialize__11J3DMaterialFv */
|
|
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;
|
|
}
|
|
|
|
/* 80316290-80316344 310BD0 00B4+00 0/0 2/2 0/0 .text countDLSize__11J3DMaterialFv */
|
|
u32 J3DMaterial::countDLSize() {
|
|
return (mColorBlock->countDLSize() + mTexGenBlock->countDLSize() + mTevBlock->countDLSize() +
|
|
mIndBlock->countDLSize() + mPEBlock->countDLSize() + 31) & ~0x1f;
|
|
}
|
|
|
|
/* 80316344-80316620 310C84 02DC+00 2/2 0/0 0/0 .text
|
|
* makeDisplayList_private__11J3DMaterialFP17J3DDisplayListObj */
|
|
void J3DMaterial::makeDisplayList_private(J3DDisplayListObj* pDLObj) {
|
|
pDLObj->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());
|
|
pDLObj->endDL();
|
|
}
|
|
|
|
/* 80316620-80316668 310F60 0048+00 1/0 0/0 0/0 .text makeDisplayList__11J3DMaterialFv */
|
|
void J3DMaterial::makeDisplayList() {
|
|
if (!j3dSys.getMatPacket()->isLocked()) {
|
|
j3dSys.getMatPacket()->mDiffFlag = mDiffFlag;
|
|
makeDisplayList_private(j3dSys.getMatPacket()->getDisplayListObj());
|
|
}
|
|
}
|
|
|
|
/* 80316668-8031668C 310FA8 0024+00 1/0 0/0 0/0 .text makeSharedDisplayList__11J3DMaterialFv */
|
|
void J3DMaterial::makeSharedDisplayList() {
|
|
makeDisplayList_private(mSharedDLObj);
|
|
}
|
|
|
|
/* 8031668C-803166DC 310FCC 0050+00 1/0 0/0 0/0 .text load__11J3DMaterialFv */
|
|
void J3DMaterial::load() {
|
|
j3dSys.setMaterialMode(mMaterialMode);
|
|
if (!j3dSys.checkFlag(2)) {
|
|
loadNBTScale(*mTexGenBlock->getNBTScale());
|
|
}
|
|
}
|
|
|
|
/* 803166DC-80316740 31101C 0064+00 1/0 0/0 0/0 .text loadSharedDL__11J3DMaterialFv */
|
|
void J3DMaterial::loadSharedDL() {
|
|
j3dSys.setMaterialMode(mMaterialMode);
|
|
if (!j3dSys.checkFlag(2)) {
|
|
mSharedDLObj->callDL();
|
|
loadNBTScale(*mTexGenBlock->getNBTScale());
|
|
}
|
|
}
|
|
|
|
/* 80316740-803167D8 311080 0098+00 2/0 0/0 0/0 .text patch__11J3DMaterialFv */
|
|
void J3DMaterial::patch() {
|
|
j3dSys.getMatPacket()->mDiffFlag = mDiffFlag;
|
|
j3dSys.getMatPacket()->beginPatch();
|
|
mTevBlock->patch();
|
|
mColorBlock->patch();
|
|
mTexGenBlock->patch();
|
|
j3dSys.getMatPacket()->endPatch();
|
|
}
|
|
|
|
/* 803167D8-803169DC 311118 0204+00 2/0 0/0 0/0 .text diff__11J3DMaterialFUl */
|
|
void J3DMaterial::diff(u32 diffFlags) {
|
|
if (j3dSys.getMatPacket()->isEnabled_Diff()) {
|
|
j3dSys.getMatPacket()->beginDiff();
|
|
|
|
mTevBlock->diff(diffFlags);
|
|
mIndBlock->diff(diffFlags);
|
|
mPEBlock->diff(diffFlags);
|
|
if (diffFlags & J3DDiffFlag_KonstColor) {
|
|
J3DGDSetGenMode_3Param(mTexGenBlock->getTexGenNum(), mTevBlock->getTevStageNum(), mIndBlock->getIndTexStageNum());
|
|
J3DGDSetNumTexGens(mTexGenBlock->getTexGenNum());
|
|
}
|
|
mTexGenBlock->diff(diffFlags);
|
|
mColorBlock->diff(diffFlags);
|
|
|
|
j3dSys.getMatPacket()->endDiff();
|
|
}
|
|
}
|
|
|
|
/* 803169DC-80316A54 31131C 0078+00 2/0 0/0 0/0 .text calc__11J3DMaterialFPA4_Cf */
|
|
void J3DMaterial::calc(f32 const (*param_0)[4]) {
|
|
if (j3dSys.checkFlag(0x40000000)) {
|
|
mTexGenBlock->calcPostTexMtx(param_0);
|
|
} else {
|
|
mTexGenBlock->calc(param_0);
|
|
}
|
|
|
|
calcCurrentMtx();
|
|
setCurrentMtx();
|
|
}
|
|
|
|
/* 80316A54-80316AB0 311394 005C+00 3/0 0/0 0/0 .text calcDiffTexMtx__11J3DMaterialFPA4_Cf */
|
|
void J3DMaterial::calcDiffTexMtx(f32 const (*param_0)[4]) {
|
|
if (j3dSys.checkFlag(0x40000000)) {
|
|
mTexGenBlock->calcPostTexMtxWithoutViewMtx(param_0);
|
|
} else {
|
|
mTexGenBlock->calcWithoutViewMtx(param_0);
|
|
}
|
|
}
|
|
|
|
/* 80316AB0-80316AC8 3113F0 0018+00 1/1 1/1 0/0 .text setCurrentMtx__11J3DMaterialFv */
|
|
void J3DMaterial::setCurrentMtx() {
|
|
mShape->setCurrentMtx(mCurrentMtx);
|
|
}
|
|
|
|
/* 80316AC8-80316D68 311408 02A0+00 1/1 0/0 0/0 .text calcCurrentMtx__11J3DMaterialFv */
|
|
void J3DMaterial::calcCurrentMtx() {
|
|
if (!j3dSys.checkFlag(0x40000000)) {
|
|
mCurrentMtx.setCurrentTexMtx(
|
|
getTexCoord(0)->getTexGenMtx(),
|
|
getTexCoord(1)->getTexGenMtx(),
|
|
getTexCoord(2)->getTexGenMtx(),
|
|
getTexCoord(3)->getTexGenMtx(),
|
|
getTexCoord(4)->getTexGenMtx(),
|
|
getTexCoord(5)->getTexGenMtx(),
|
|
getTexCoord(6)->getTexGenMtx(),
|
|
getTexCoord(7)->getTexGenMtx()
|
|
);
|
|
} else {
|
|
mCurrentMtx.setCurrentTexMtx(
|
|
getTexCoord(0)->getTexMtxReg(),
|
|
getTexCoord(1)->getTexMtxReg(),
|
|
getTexCoord(2)->getTexMtxReg(),
|
|
getTexCoord(3)->getTexMtxReg(),
|
|
getTexCoord(4)->getTexMtxReg(),
|
|
getTexCoord(5)->getTexMtxReg(),
|
|
getTexCoord(6)->getTexMtxReg(),
|
|
getTexCoord(7)->getTexMtxReg()
|
|
);
|
|
}
|
|
}
|
|
|
|
/* 80316D68-80316E14 3116A8 00AC+00 1/1 0/0 0/0 .text copy__11J3DMaterialFP11J3DMaterial
|
|
*/
|
|
void J3DMaterial::copy(J3DMaterial* pOther) {
|
|
J3D_ASSERT_NULLPTR(620, pOther != NULL);
|
|
mColorBlock->reset(pOther->mColorBlock);
|
|
mTexGenBlock->reset(pOther->mTexGenBlock);
|
|
mTevBlock->reset(pOther->mTevBlock);
|
|
mIndBlock->reset(pOther->mIndBlock);
|
|
mPEBlock->reset(pOther->mPEBlock);
|
|
}
|
|
|
|
/* 80316E14-80316E70 311754 005C+00 1/0 0/0 0/0 .text reset__11J3DMaterialFv */
|
|
void J3DMaterial::reset() {
|
|
if ((~mDiffFlag & J3DDiffFlag_Changed) == 0) {
|
|
mDiffFlag &= ~J3DDiffFlag_Changed;
|
|
mMaterialMode = mpOrigMaterial->mMaterialMode;
|
|
mInvalid = mpOrigMaterial->mInvalid;
|
|
mMaterialAnm = NULL;
|
|
copy(mpOrigMaterial);
|
|
}
|
|
}
|
|
|
|
/* 80316E70-80316E90 3117B0 0020+00 1/0 0/0 0/0 .text change__11J3DMaterialFv */
|
|
void J3DMaterial::change() {
|
|
if ((mDiffFlag & (J3DDiffFlag_Changed | J3DDiffFlag_Unk40000000)) == 0) {
|
|
mDiffFlag |= J3DDiffFlag_Changed;
|
|
mMaterialAnm = NULL;
|
|
}
|
|
}
|
|
|
|
/* 80316E90-80316F24 3117D0 0094+00 0/0 2/2 0/0 .text newSharedDisplayList__11J3DMaterialFUl */
|
|
s32 J3DMaterial::newSharedDisplayList(u32 dlSize) {
|
|
if (mSharedDLObj == NULL) {
|
|
mSharedDLObj = new J3DDisplayListObj();
|
|
if (mSharedDLObj == NULL) {
|
|
return kJ3DError_Alloc;
|
|
}
|
|
|
|
s32 ret = mSharedDLObj->newDisplayList(dlSize);
|
|
if (ret != kJ3DError_Success) {
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
return kJ3DError_Success;
|
|
}
|
|
|
|
/* 80316F24-80316FB8 311864 0094+00 0/0 2/2 0/0 .text newSingleSharedDisplayList__11J3DMaterialFUl
|
|
*/
|
|
s32 J3DMaterial::newSingleSharedDisplayList(u32 dlSize) {
|
|
if (mSharedDLObj == NULL) {
|
|
mSharedDLObj = new J3DDisplayListObj();
|
|
if (mSharedDLObj == NULL) {
|
|
return kJ3DError_Alloc;
|
|
}
|
|
|
|
s32 ret = mSharedDLObj->newSingleDisplayList(dlSize);
|
|
if (ret != kJ3DError_Success) {
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
return kJ3DError_Success;
|
|
}
|
|
|
|
/* 80316FB8-80316FD8 3118F8 0020+00 0/0 1/1 0/0 .text initialize__18J3DPatchedMaterialFv
|
|
*/
|
|
void J3DPatchedMaterial::initialize() {
|
|
J3DMaterial::initialize();
|
|
}
|
|
|
|
/* 80316FD8-80316FDC 311918 0004+00 1/0 0/0 0/0 .text makeDisplayList__18J3DPatchedMaterialFv */
|
|
void J3DPatchedMaterial::makeDisplayList() {}
|
|
|
|
/* 80316FDC-80316FE0 31191C 0004+00 1/0 0/0 0/0 .text
|
|
* makeSharedDisplayList__18J3DPatchedMaterialFv */
|
|
void J3DPatchedMaterial::makeSharedDisplayList() {}
|
|
|
|
/* 80316FE0-80316FFC 311920 001C+00 1/0 0/0 0/0 .text load__18J3DPatchedMaterialFv */
|
|
void J3DPatchedMaterial::load() {
|
|
j3dSys.setMaterialMode(mMaterialMode);
|
|
if (j3dSys.checkFlag(2)) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
/* 80316FFC-8031703C 31193C 0040+00 1/0 0/0 0/0 .text loadSharedDL__18J3DPatchedMaterialFv */
|
|
void J3DPatchedMaterial::loadSharedDL() {
|
|
j3dSys.setMaterialMode(mMaterialMode);
|
|
if (!j3dSys.checkFlag(0x02))
|
|
mSharedDLObj->callDL();
|
|
}
|
|
|
|
/* 8031703C-80317040 31197C 0004+00 1/0 0/0 0/0 .text reset__18J3DPatchedMaterialFv */
|
|
void J3DPatchedMaterial::reset() {}
|
|
|
|
/* 80317040-80317044 311980 0004+00 1/0 0/0 0/0 .text change__18J3DPatchedMaterialFv */
|
|
void J3DPatchedMaterial::change() {}
|
|
|
|
/* 80317044-80317064 311984 0020+00 0/0 1/1 0/0 .text initialize__17J3DLockedMaterialFv
|
|
*/
|
|
void J3DLockedMaterial::initialize() {
|
|
J3DMaterial::initialize();
|
|
}
|
|
|
|
/* 80317064-80317068 3119A4 0004+00 1/0 0/0 0/0 .text makeDisplayList__17J3DLockedMaterialFv */
|
|
void J3DLockedMaterial::makeDisplayList() {}
|
|
|
|
/* 80317068-8031706C 3119A8 0004+00 1/0 0/0 0/0 .text makeSharedDisplayList__17J3DLockedMaterialFv
|
|
*/
|
|
void J3DLockedMaterial::makeSharedDisplayList() {}
|
|
|
|
/* 8031706C-80317088 3119AC 001C+00 1/0 0/0 0/0 .text load__17J3DLockedMaterialFv */
|
|
void J3DLockedMaterial::load() {
|
|
j3dSys.setMaterialMode(mMaterialMode);
|
|
if (j3dSys.checkFlag(2)) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
/* 80317088-803170C8 3119C8 0040+00 1/0 0/0 0/0 .text loadSharedDL__17J3DLockedMaterialFv
|
|
*/
|
|
void J3DLockedMaterial::loadSharedDL() {
|
|
j3dSys.setMaterialMode(mMaterialMode);
|
|
if (!j3dSys.checkFlag(0x02))
|
|
mSharedDLObj->callDL();
|
|
}
|
|
|
|
/* 803170C8-803170CC 311A08 0004+00 1/0 0/0 0/0 .text patch__17J3DLockedMaterialFv */
|
|
void J3DLockedMaterial::patch() {}
|
|
|
|
/* 803170CC-803170D0 311A0C 0004+00 1/0 0/0 0/0 .text diff__17J3DLockedMaterialFUl */
|
|
void J3DLockedMaterial::diff(u32 diffFlags) {}
|
|
|
|
/* 803170D0-803170D4 311A10 0004+00 1/0 0/0 0/0 .text calc__17J3DLockedMaterialFPA4_Cf */
|
|
void J3DLockedMaterial::calc(const Mtx param_0) {}
|
|
|
|
/* 803170D4-803170D8 311A14 0004+00 1/0 0/0 0/0 .text reset__17J3DLockedMaterialFv */
|
|
void J3DLockedMaterial::reset() {}
|
|
|
|
/* 803170D8-803170DC 311A18 0004+00 1/0 0/0 0/0 .text change__17J3DLockedMaterialFv */
|
|
void J3DLockedMaterial::change() {}
|