mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-06-13 13:16:23 -04:00
J3D setup (#155)
* setup j3d classes * remove asm * fixes * fix newDifferedDisplayList
This commit is contained in:
@@ -4,62 +4,10 @@
|
||||
//
|
||||
|
||||
#include "JSystem/J3DGraphAnimator/J3DModel.h"
|
||||
#include "JSystem/J3DGraphBase/J3DTransform.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct J3DVtxColorCalc {
|
||||
/* 8032E180 */ void calc(J3DModel*);
|
||||
};
|
||||
|
||||
struct J3DVertexData {};
|
||||
|
||||
struct J3DVertexBuffer {
|
||||
/* 80310F78 */ void setVertexData(J3DVertexData*);
|
||||
/* 80311030 */ ~J3DVertexBuffer();
|
||||
/* 803112D0 */ void copyLocalVtxArray(u32);
|
||||
/* 80311478 */ void allocTransformedVtxPosArray();
|
||||
/* 8031152C */ void allocTransformedVtxNrmArray();
|
||||
};
|
||||
|
||||
struct J3DShapePacket {
|
||||
/* 80312B20 */ J3DShapePacket();
|
||||
/* 80312B74 */ ~J3DShapePacket();
|
||||
/* 80312DBC */ void newDifferedDisplayList(u32);
|
||||
};
|
||||
|
||||
struct J3DShape {
|
||||
/* 80314DA8 */ void calcNBTScale(Vec const&, f32 (*)[3][3], f32 (*)[3][3]);
|
||||
};
|
||||
|
||||
struct J3DMaterial {
|
||||
/* 80316290 */ void countDLSize();
|
||||
/* 80316E90 */ void newSharedDisplayList(u32);
|
||||
/* 80316F24 */ void newSingleSharedDisplayList(u32);
|
||||
};
|
||||
|
||||
struct J3DMatPacket {
|
||||
/* 80312948 */ J3DMatPacket();
|
||||
/* 803129A4 */ ~J3DMatPacket();
|
||||
/* 80312A04 */ void addShapePacket(J3DShapePacket*);
|
||||
};
|
||||
|
||||
struct J3DJoint {
|
||||
/* 8032F254 */ void entryIn();
|
||||
};
|
||||
|
||||
struct J3DDrawPacket {
|
||||
/* 8031280C */ void newDisplayList(u32);
|
||||
/* 80312898 */ void newSingleDisplayList(u32);
|
||||
};
|
||||
|
||||
struct J3DDisplayListObj {
|
||||
/* 8031256C */ void single_To_Double();
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
@@ -146,9 +94,6 @@ extern "C" void _restgpr_26();
|
||||
extern "C" void _restgpr_27();
|
||||
extern "C" void _restgpr_28();
|
||||
extern "C" void _restgpr_29();
|
||||
extern "C" extern u8 const j3dDefaultScale[12];
|
||||
extern "C" extern u8 const j3dDefaultMtx[48];
|
||||
extern "C" extern u8 j3dSys[284];
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
@@ -163,14 +108,29 @@ SECTION_SDATA2 static f32 lit_896[1 + 1 /* padding */] = {
|
||||
};
|
||||
|
||||
/* 80327100-80327184 321A40 0084+00 0/0 3/3 0/0 .text initialize__8J3DModelFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void J3DModel::initialize() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphAnimator/J3DModel/initialize__8J3DModelFv.s"
|
||||
void J3DModel::initialize() {
|
||||
mModelData = NULL;
|
||||
mFlags = 0;
|
||||
field_0x0c = 0;
|
||||
field_0x10 = 0;
|
||||
mUserArea = 0;
|
||||
|
||||
mBaseScale.x = 1.0f;
|
||||
mBaseScale.y = 1.0f;
|
||||
mBaseScale.z = 1.0f;
|
||||
|
||||
PSMTXIdentity(mBaseTransformMtx);
|
||||
PSMTXIdentity(mInternalView);
|
||||
|
||||
mMtxBuffer = NULL;
|
||||
mMatPacket = NULL;
|
||||
mShapePacket = NULL;
|
||||
mDeformData = NULL;
|
||||
mSkinDeform = NULL;
|
||||
mVtxColorCalc = NULL;
|
||||
field_0xd4 = 0;
|
||||
field_0xd8 = 0;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803CED20-803CED44 02BE40 0024+00 1/1 3/3 0/0 .data __vt__8J3DModel */
|
||||
@@ -195,32 +155,95 @@ SECTION_DATA extern void* __vt__12J3DMtxBuffer[3] = {
|
||||
|
||||
/* 80327184-80327300 321AC4 017C+00 0/0 3/3 0/0 .text
|
||||
* entryModelData__8J3DModelFP12J3DModelDataUlUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void J3DModel::entryModelData(J3DModelData* param_0, u32 param_1, u32 param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphAnimator/J3DModel/entryModelData__8J3DModelFP12J3DModelDataUlUl.s"
|
||||
s32 J3DModel::entryModelData(J3DModelData* p_modelData, u32 param_1, u32 param_2) {
|
||||
mModelData = p_modelData;
|
||||
mMtxBuffer = new J3DMtxBuffer();
|
||||
|
||||
if (mMtxBuffer == NULL) {
|
||||
return 4;
|
||||
}
|
||||
|
||||
switch (mMtxBuffer->create(p_modelData, param_2)) {
|
||||
case 0:
|
||||
switch (createShapePacket(p_modelData)) {
|
||||
case 0:
|
||||
switch (createMatPacket(p_modelData, param_1)) {
|
||||
case 0:
|
||||
mVertexBuffer.setVertexData(&p_modelData->getVertexData());
|
||||
prepareShapePackets();
|
||||
|
||||
if (param_1 & 0x1) {
|
||||
onFlag(0x1);
|
||||
}
|
||||
if (param_1 & 0x2) {
|
||||
onFlag(0x2);
|
||||
}
|
||||
if (param_1 & 0x10) {
|
||||
onFlag(0x10);
|
||||
}
|
||||
if (param_1 & 0x20000) {
|
||||
onFlag(0x20000);
|
||||
}
|
||||
if (param_1 & 0x40000) {
|
||||
onFlag(0x40000);
|
||||
}
|
||||
if (param_1 & 0x80000) {
|
||||
onFlag(0x80000);
|
||||
}
|
||||
if (param_1 & J3DMdlFlag_SkinPosCpu) {
|
||||
onFlag(J3DMdlFlag_SkinPosCpu);
|
||||
}
|
||||
if (param_1 & J3DMdlFlag_SkinNrmCpu) {
|
||||
onFlag(J3DMdlFlag_SkinNrmCpu);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 80327300-803273CC 321C40 00CC+00 1/1 0/0 0/0 .text createShapePacket__8J3DModelFP12J3DModelData
|
||||
*/
|
||||
// probably some wrong member types
|
||||
#ifdef NONMATCHING
|
||||
s32 J3DModel::createShapePacket(J3DModelData* p_modelData) {
|
||||
if (p_modelData->getShapeNum() != 0) {
|
||||
u16 shapeNum = p_modelData->getShapeNum();
|
||||
|
||||
J3DShapePacket* packet = new J3DShapePacket[shapeNum];
|
||||
mShapePacket = &packet;
|
||||
|
||||
if (mShapePacket == NULL) {
|
||||
return 4;
|
||||
}
|
||||
|
||||
for (int i = 0; i < p_modelData->getShapeNum(); i++) {
|
||||
J3DShape* shapeNode = p_modelData->getShapeNodePointer(i);
|
||||
mShapePacket[i]->setShape(shapeNode);
|
||||
mShapePacket[i]->setModel(this);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void J3DModel::createShapePacket(J3DModelData* param_0) {
|
||||
asm s32 J3DModel::createShapePacket(J3DModelData* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphAnimator/J3DModel/createShapePacket__8J3DModelFP12J3DModelData.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 803273CC-803275FC 321D0C 0230+00 1/1 0/0 0/0 .text createMatPacket__8J3DModelFP12J3DModelDataUl
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void J3DModel::createMatPacket(J3DModelData* param_0, u32 param_1) {
|
||||
asm s32 J3DModel::createMatPacket(J3DModelData* param_0, u32 param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphAnimator/J3DModel/createMatPacket__8J3DModelFP12J3DModelDataUl.s"
|
||||
}
|
||||
@@ -288,52 +311,101 @@ asm void J3DModel::diff() {
|
||||
|
||||
/* 80327A2C-80327AA0 32236C 0074+00 0/0 1/1 2/2 .text setDeformData__8J3DModelFP13J3DDeformDataUl
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void J3DModel::setDeformData(J3DDeformData* param_0, u32 param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphAnimator/J3DModel/setDeformData__8J3DModelFP13J3DDeformDataUl.s"
|
||||
s32 J3DModel::setDeformData(J3DDeformData* p_deformData, u32 param_1) {
|
||||
mDeformData = p_deformData;
|
||||
|
||||
if (p_deformData == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch (mVertexBuffer.copyLocalVtxArray(param_1)) {
|
||||
case 0:
|
||||
if (param_1 & 4) {
|
||||
p_deformData->offAllFlag(1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 80327AA0-80327BD4 3223E0 0134+00 0/0 0/0 2/2 .text setSkinDeform__8J3DModelFP13J3DSkinDeformUl
|
||||
*/
|
||||
#ifdef NONMATCHING
|
||||
s32 J3DModel::setSkinDeform(J3DSkinDeform* p_skinDeform, u32 param_1) {
|
||||
mSkinDeform = p_skinDeform;
|
||||
|
||||
if (p_skinDeform == NULL) {
|
||||
offFlag(J3DMdlFlag_SkinPosCpu);
|
||||
offFlag(J3DMdlFlag_SkinNrmCpu);
|
||||
return 5;
|
||||
} else {
|
||||
mSkinDeform->initMtxIndexArray(mModelData);
|
||||
if (mModelData->checkFlag(0x100)) {
|
||||
mSkinDeform->changeFastSkinDL(mModelData);
|
||||
param_1 = 0;
|
||||
mSkinDeform->transformVtxPosNrm(mModelData);
|
||||
mSkinDeform->initSkinInfo(mModelData);
|
||||
}
|
||||
p_skinDeform = NULL;
|
||||
|
||||
if ((~param_1 & 2)) {
|
||||
if (mVertexBuffer.allocTransformedVtxPosArray()) {
|
||||
offFlag(J3DMdlFlag_SkinPosCpu);
|
||||
return 0;
|
||||
}
|
||||
onFlag(J3DMdlFlag_SkinPosCpu);
|
||||
} else {
|
||||
offFlag(J3DMdlFlag_SkinPosCpu);
|
||||
}
|
||||
|
||||
if ((~param_1 & 4)) {
|
||||
if (mVertexBuffer.allocTransformedVtxNrmArray()) {
|
||||
onFlag(J3DMdlFlag_SkinNrmCpu);
|
||||
}
|
||||
offFlag(J3DMdlFlag_SkinNrmCpu);
|
||||
} else {
|
||||
offFlag(J3DMdlFlag_SkinNrmCpu);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void J3DModel::setSkinDeform(J3DSkinDeform* param_0, u32 param_1) {
|
||||
asm s32 J3DModel::setSkinDeform(J3DSkinDeform* param_0, u32 param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphAnimator/J3DModel/setSkinDeform__8J3DModelFP13J3DSkinDeformUl.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 80327BD4-80327C58 322514 0084+00 1/1 0/0 2/2 .text calcAnmMtx__8J3DModelFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void J3DModel::calcAnmMtx() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphAnimator/J3DModel/calcAnmMtx__8J3DModelFv.s"
|
||||
void J3DModel::calcAnmMtx() {
|
||||
j3dSys.setModel(this);
|
||||
|
||||
if (checkFlag(2)) {
|
||||
getModelData()->getJointTree().calc(mMtxBuffer, j3dDefaultScale, j3dDefaultMtx);
|
||||
} else {
|
||||
getModelData()->getJointTree().calc(mMtxBuffer, mBaseScale, mBaseTransformMtx);
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 80327C58-80327CA4 322598 004C+00 1/1 1/1 1/1 .text calcWeightEnvelopeMtx__8J3DModelFv
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void J3DModel::calcWeightEnvelopeMtx() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphAnimator/J3DModel/calcWeightEnvelopeMtx__8J3DModelFv.s"
|
||||
void J3DModel::calcWeightEnvelopeMtx() {
|
||||
if (getModelData()->getWEvlpMtxNum() != 0 && !checkFlag(0x10)) {
|
||||
if (!getModelData()->checkFlag(0x100)) {
|
||||
mMtxBuffer->calcWeightEnvelopeMtx();
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 80327CA4-80327CF0 3225E4 004C+00 1/0 0/0 0/0 .text update__8J3DModelFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void J3DModel::update() {
|
||||
extern "C" asm void update__8J3DModelFv() {
|
||||
// asm void J3DModel::update() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphAnimator/J3DModel/update__8J3DModelFv.s"
|
||||
}
|
||||
@@ -370,14 +442,9 @@ asm void J3DModel::viewCalc() {
|
||||
#pragma pop
|
||||
|
||||
/* 80328190-803281B4 322AD0 0024+00 1/1 0/0 0/0 .text calcNrmMtx__8J3DModelFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void J3DModel::calcNrmMtx() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphAnimator/J3DModel/calcNrmMtx__8J3DModelFv.s"
|
||||
void J3DModel::calcNrmMtx() {
|
||||
mMtxBuffer->calcNrmMtx();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 803281B4-803282B8 322AF4 0104+00 1/1 0/0 0/0 .text calcBumpMtx__8J3DModelFv */
|
||||
#pragma push
|
||||
@@ -390,14 +457,11 @@ asm void J3DModel::calcBumpMtx() {
|
||||
#pragma pop
|
||||
|
||||
/* 803282B8-803282EC 322BF8 0034+00 1/1 0/0 0/0 .text calcBBoardMtx__8J3DModelFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void J3DModel::calcBBoardMtx() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphAnimator/J3DModel/calcBBoardMtx__8J3DModelFv.s"
|
||||
void J3DModel::calcBBoardMtx() {
|
||||
if (mModelData->checkBBoardFlag()) {
|
||||
mMtxBuffer->calcBBoardMtx();
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 803282EC-80328350 322C2C 0064+00 2/2 0/0 0/0 .text prepareShapePackets__8J3DModelFv */
|
||||
#pragma push
|
||||
@@ -410,20 +474,14 @@ asm void J3DModel::prepareShapePackets() {
|
||||
#pragma pop
|
||||
|
||||
/* 80328350-803283B4 322C90 0064+00 1/0 0/0 0/0 .text __dt__8J3DModelFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm J3DModel::~J3DModel() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphAnimator/J3DModel/__dt__8J3DModelFv.s"
|
||||
}
|
||||
#pragma pop
|
||||
J3DModel::~J3DModel() {}
|
||||
|
||||
/* 803283B4-803283FC 322CF4 0048+00 1/0 0/0 0/0 .text __dt__12J3DMtxBufferFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm J3DMtxBuffer::~J3DMtxBuffer() {
|
||||
extern "C" asm void __dt__12J3DMtxBufferFv() {
|
||||
// asm J3DMtxBuffer::~J3DMtxBuffer() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphAnimator/J3DModel/__dt__12J3DMtxBufferFv.s"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user