diff options
| author | Jasper St. Pierre <jstpierre@mecheye.net> | 2023-09-23 23:07:35 -0700 |
|---|---|---|
| committer | Jasper St. Pierre <jstpierre@mecheye.net> | 2023-09-23 23:07:35 -0700 |
| commit | 2f918f337e7bb40d7fb506998fc93818901f50b5 (patch) | |
| tree | 02f723d270d32daeb68f0e772e74566f7eba0fdc /src/JSystem/J3DGraphAnimator/J3DModel.cpp | |
| parent | 3b025cc2dd91c655a26abf629052530fc7a0fbe7 (diff) | |
J3DModel createMatPacket 100%
the beast has been tamed
Diffstat (limited to 'src/JSystem/J3DGraphAnimator/J3DModel.cpp')
| -rw-r--r-- | src/JSystem/J3DGraphAnimator/J3DModel.cpp | 74 |
1 files changed, 72 insertions, 2 deletions
diff --git a/src/JSystem/J3DGraphAnimator/J3DModel.cpp b/src/JSystem/J3DGraphAnimator/J3DModel.cpp index 04a39326..187e4c1a 100644 --- a/src/JSystem/J3DGraphAnimator/J3DModel.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DModel.cpp @@ -243,8 +243,78 @@ s32 J3DModel::createShapePacket(J3DModelData* pModelData) { } /* 802EDC8C-802EDF60 .text createMatPacket__8J3DModelFP12J3DModelDataUl */ -s32 J3DModel::createMatPacket(J3DModelData*, unsigned long) { - /* Nonmatching */ +s32 J3DModel::createMatPacket(J3DModelData* pModelData, u32 flag) { + if (pModelData->getMaterialNum() != 0) { + mpMatPacket = new J3DMatPacket[pModelData->getMaterialNum()]; + + if (mpMatPacket == NULL) + return kJ3DError_Alloc; + } + + s32 ret; + + u32 singleDLFlag = flag & 0x40000; + for (s32 i = 0; i < pModelData->getMaterialNum(); i++) { + mpMatPacket[i].setMaterial(pModelData->getMaterialNodePointer(i)); + J3DShapePacket* shapePacket = getShapePacket(pModelData->getMaterialNodePointer(i)->getShape()->getIndex()); + mpMatPacket[i].setInitShapePacket(shapePacket); + mpMatPacket[i].addShapePacket(shapePacket); + mpMatPacket[i].setTexture(pModelData->getMaterialTable().getTexture()); + mpMatPacket[i].mDiffFlag = pModelData->getMaterialNodePointer(i)->mDiffFlag; + + if (pModelData->getModelDataType() == 1) + mpMatPacket[i].mFlags |= 0x01; + + if (!!(flag & 0x80000)) { + mpMatPacket[i].mpDisplayListObj = pModelData->getMaterialNodePointer(i)->getSharedDisplayListObj(); + } else { + if (pModelData->getModelDataType() == 1) { + if (!!(flag & 0x40000)) { + mpMatPacket[i].mpDisplayListObj = pModelData->getMaterialNodePointer(i)->getSharedDisplayListObj(); + } else { + J3DDisplayListObj* sharedDL = pModelData->getMaterialNodePointer(i)->getSharedDisplayListObj(); + ret = sharedDL->single_To_Double(); + if (ret != kJ3DError_Success) + return ret; + + mpMatPacket[i].mpDisplayListObj = sharedDL; + } + } else if (!!(flag & 0x20000)) { + if (!!(flag & 0x40000)) { + ret = pModelData->getMaterialNodePointer(i)->newSingleSharedDisplayList(pModelData->getMaterialNodePointer(i)->countDLSize()); + if (ret != kJ3DError_Success) + return ret; + + mpMatPacket[i].mpDisplayListObj = pModelData->getMaterialNodePointer(i)->getSharedDisplayListObj(); + } else { + ret = pModelData->getMaterialNodePointer(i)->newSharedDisplayList(pModelData->getMaterialNodePointer(i)->countDLSize()); + if (ret != kJ3DError_Success) + return ret; + + J3DDisplayListObj* sharedDL = pModelData->getMaterialNodePointer(i)->getSharedDisplayListObj(); + ret = sharedDL->single_To_Double(); + if (ret != kJ3DError_Success) + return ret; + + mpMatPacket[i].mpDisplayListObj = sharedDL; + } + } else { + if (!!(flag & 0x40000)) { + u32 size = pModelData->getMaterialNodePointer(i)->countDLSize(); + ret = mpMatPacket[i].newSingleDisplayList(size); + if (ret != kJ3DError_Success) + return ret; + } else { + u32 size = pModelData->getMaterialNodePointer(i)->countDLSize(); + ret = mpMatPacket[i].newDisplayList(size); + if (ret != kJ3DError_Success) + return ret; + } + } + } + } + + return kJ3DError_Success; } /* 802EDF60-802EE1D4 .text createBumpMtxArray__8J3DModelFP12J3DModelDataUl */ |
