summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorhatal175 <hatal175@users.noreply.github.com>2024-09-14 10:48:38 +0300
committerGitHub <noreply@github.com>2024-09-14 00:48:38 -0700
commitf2ac35d73896f8419319a67ab464b209c2e06b9b (patch)
tree8d734684db24dcd78385965d92729ca1a8475ab3 /libs
parentee0c0f12acc4c9c6cc63d3c0c943a3b691c5d742 (diff)
J3DModelLoaderCalcSize + J2DScreen work (#2198)
* All literals functions in J2DScreen were matched * Import J3DModelLoaderCalcSize work * d_a_obj_rfHole OK * Minor fixes for daVrbox2
Diffstat (limited to 'libs')
-rw-r--r--libs/JSystem/J2DGraph/J2DScreen.cpp116
-rw-r--r--libs/JSystem/J3DGraphLoader/J3DModelLoader.cpp2
-rw-r--r--libs/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp433
3 files changed, 291 insertions, 260 deletions
diff --git a/libs/JSystem/J2DGraph/J2DScreen.cpp b/libs/JSystem/J2DGraph/J2DScreen.cpp
index 1b750cad1f..f03e162e1d 100644
--- a/libs/JSystem/J2DGraph/J2DScreen.cpp
+++ b/libs/JSystem/J2DGraph/J2DScreen.cpp
@@ -7,6 +7,7 @@
#include "JSystem/J2DGraph/J2DPictureEx.h"
#include "JSystem/J2DGraph/J2DTextBoxEx.h"
#include "JSystem/J2DGraph/J2DWindowEx.h"
+#include "JSystem/J2DGraph/J2DOrthoGraph.h"
#include "JSystem/JKernel/JKRArchive.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "JSystem/JSupport/JSUMemoryStream.h"
@@ -135,78 +136,7 @@ extern "C" extern void* __vt__20JSUMemoryInputStream[9 + 1 /* padding */];
extern "C" extern void* __vt__14J2DGrafContext[10];
extern "C" extern void* __vt__13J2DOrthoGraph[10];
-//
-// Declarations:
-//
-
-/* ############################################################################################## */
-/* 803CD068-803CD108 02A188 009C+04 2/2 0/0 0/0 .data __vt__9J2DScreen */
-SECTION_DATA extern void* __vt__9J2DScreen[39 + 1 /* padding */] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__9J2DScreenFv,
- (void*)getTypeID__9J2DScreenCFv,
- (void*)move__7J2DPaneFff,
- (void*)add__7J2DPaneFff,
- (void*)resize__7J2DPaneFff,
- (void*)setCullBack__7J2DPaneFb,
- (void*)setCullBack__7J2DPaneF11_GXCullMode,
- (void*)setAlpha__7J2DPaneFUc,
- (void*)setConnectParent__7J2DPaneFb,
- (void*)calcMtx__9J2DScreenFv,
- (void*)update__7J2DPaneFv,
- (void*)drawSelf__7J2DPaneFff,
- (void*)drawSelf__9J2DScreenFffPA3_A4_f,
- (void*)search__9J2DScreenFUx,
- (void*)searchUserInfo__9J2DScreenFUx,
- (void*)makeMatrix__7J2DPaneFff,
- (void*)makeMatrix__7J2DPaneFffff,
- (void*)isUsed__9J2DScreenFPC7ResTIMG,
- (void*)isUsed__9J2DScreenFPC7ResFONT,
- (void*)clearAnmTransform__9J2DScreenFv,
- (void*)rewriteAlpha__7J2DPaneFv,
- (void*)setAnimation__9J2DScreenFP10J2DAnmBase,
- (void*)setAnimation__9J2DScreenFP15J2DAnmTransform,
- (void*)setAnimation__9J2DScreenFP11J2DAnmColor,
- (void*)setAnimation__9J2DScreenFP16J2DAnmTexPattern,
- (void*)setAnimation__9J2DScreenFP19J2DAnmTextureSRTKey,
- (void*)setAnimation__9J2DScreenFP15J2DAnmTevRegKey,
- (void*)setAnimation__9J2DScreenFP20J2DAnmVisibilityFull,
- (void*)setAnimation__9J2DScreenFP14J2DAnmVtxColor,
- (void*)animationTransform__7J2DPaneFPC15J2DAnmTransform,
- (void*)setVisibileAnimation__7J2DPaneFP20J2DAnmVisibilityFull,
- (void*)setAnimationVF__9J2DScreenFP20J2DAnmVisibilityFull,
- (void*)setVtxColorAnimation__7J2DPaneFP14J2DAnmVtxColor,
- (void*)setAnimationVC__9J2DScreenFP14J2DAnmVtxColor,
- (void*)animationPane__7J2DPaneFPC15J2DAnmTransform,
- (void*)createPane__9J2DScreenFRC18J2DScrnBlockHeaderP20JSURandomInputStreamP7J2DPaneUl,
- (void*)
- createPane__9J2DScreenFRC18J2DScrnBlockHeaderP20JSURandomInputStreamP7J2DPaneUlP10JKRArchive,
- /* padding */
- NULL,
-};
-
-/* 80456220-80456224 004820 0004+00 4/4 0/0 0/0 .sdata2 @1561 */
-SECTION_SDATA2 static u8 lit_1561[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
-};
-
-/* 80456224-80456228 004824 0004+00 2/2 0/0 0/0 .sdata2 @1562 */
-SECTION_SDATA2 static f32 lit_1562 = 640.0f;
-
-/* 80456228-80456230 004828 0004+04 2/2 0/0 0/0 .sdata2 @1563 */
-SECTION_SDATA2 static f32 lit_1563[1 + 1 /* padding */] = {
- 480.0f,
- /* padding */
- 0.0f,
-};
-
/* 802F8498-802F8540 2F2DD8 00A8+00 0/0 59/59 4/4 .text __ct__9J2DScreenFv */
-// Matches with literals
-#ifdef NONMATCHING
J2DScreen::J2DScreen()
: J2DPane(NULL, true, 'root', JGeometry::TBox2<f32>(JGeometry::TVec2<f32>(0.0f, 0.0f), JGeometry::TVec2<f32>(640.0f, 480.0f))), mColor() {
field_0x4 = -1;
@@ -217,16 +147,6 @@ J2DScreen::J2DScreen()
mFontRes = NULL;
mNameTable = NULL;
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm J2DScreen::J2DScreen() {
- nofralloc
-#include "asm/JSystem/J2DGraph/J2DScreen/__ct__9J2DScreenFv.s"
-}
-#pragma pop
-#endif
/* 802F8540-802F85A8 2F2E80 0068+00 1/0 0/0 0/0 .text __dt__9J2DScreenFv */
J2DScreen::~J2DScreen() {
@@ -326,8 +246,7 @@ bool J2DScreen::getScreenInformation(JSURandomInputStream* p_stream) {
return false;
}
- f32 tmp_0 = FLOAT_LABEL(lit_1561);
- JGeometry::TBox2<f32> dimensions(tmp_0, tmp_0, info.mWidth, info.mHeight);
+ JGeometry::TBox2<f32> dimensions(0.0f, 0.0f, info.mWidth, info.mHeight);
place(dimensions);
JUtility::TColor color(info.mColor);
@@ -457,16 +376,7 @@ J2DPane* J2DScreen::createPane(J2DScrnBlockHeader const& header, JSURandomInputS
return newPane;
}
-/* ############################################################################################## */
-/* 80456238-8045623C 004838 0004+00 1/1 0/0 0/0 .sdata2 @1829 */
-SECTION_SDATA2 static f32 lit_1829 = -1.0f;
-
-/* 8045623C-80456240 00483C 0004+00 1/1 0/0 0/0 .sdata2 @1830 */
-SECTION_SDATA2 static f32 lit_1830 = 1.0f;
-
/* 802F8ED4-802F90A0 2F3814 01CC+00 0/0 51/51 4/4 .text draw__9J2DScreenFffPC14J2DGrafContext */
-// matches with literals
-#ifdef NONMATCHING
void J2DScreen::draw(f32 x, f32 y, J2DGrafContext const* grafCtx) {
u32 l_x, l_y, width, height;
@@ -502,16 +412,6 @@ void J2DScreen::draw(f32 x, f32 y, J2DGrafContext const* grafCtx) {
GXSetTevSwapModeTable((GXTevSwapSel)i, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA);
}
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J2DScreen::draw(f32 param_0, f32 param_1, J2DGrafContext const* param_2) {
- nofralloc
-#include "asm/JSystem/J2DGraph/J2DScreen/draw__9J2DScreenFffPC14J2DGrafContext.s"
-}
-#pragma pop
-#endif
/* 802F90A0-802F90E0 2F39E0 0040+00 1/0 0/0 0/0 .text search__9J2DScreenFUx */
J2DPane* J2DScreen::search(u64 tag) {
@@ -532,8 +432,6 @@ J2DPane* J2DScreen::searchUserInfo(u64 tag) {
}
/* 802F9120-802F9280 2F3A60 0160+00 1/0 0/0 0/0 .text drawSelf__9J2DScreenFffPA3_A4_f */
-// matches with literals
-#ifdef NONMATCHING
void J2DScreen::drawSelf(f32 param_0, f32 param_1, Mtx* param_2) {
JUtility::TColor color(mColor);
u8 alpha = (color.a * mAlpha) / 255;
@@ -562,16 +460,6 @@ void J2DScreen::drawSelf(f32 param_0, f32 param_1, Mtx* param_2) {
GXEnd();
}
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J2DScreen::drawSelf(f32 param_0, f32 param_1, Mtx* param_2) {
- nofralloc
-#include "asm/JSystem/J2DGraph/J2DScreen/drawSelf__9J2DScreenFffPA3_A4_f.s"
-}
-#pragma pop
-#endif
/* 802F9280-802F937C 2F3BC0 00FC+00 1/1 0/0 0/0 .text
* getResReference__9J2DScreenFP20JSURandomInputStreamUl */
diff --git a/libs/JSystem/J3DGraphLoader/J3DModelLoader.cpp b/libs/JSystem/J3DGraphLoader/J3DModelLoader.cpp
index df18b83891..06d20148a8 100644
--- a/libs/JSystem/J3DGraphLoader/J3DModelLoader.cpp
+++ b/libs/JSystem/J3DGraphLoader/J3DModelLoader.cpp
@@ -3,6 +3,8 @@
// Translation Unit: J3DModelLoader
//
+#define NON_VIRTUAL_J3DModelLoader
+
#include "JSystem/J3DGraphLoader/J3DModelLoader.h"
#include "JSystem/J3DGraphLoader/J3DJointFactory.h"
#include "JSystem/J3DGraphLoader/J3DMaterialFactory.h"
diff --git a/libs/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp b/libs/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp
index 80824e84f4..82d0969822 100644
--- a/libs/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp
+++ b/libs/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp
@@ -4,67 +4,16 @@
//
#include "JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.h"
+#include "JSystem/J3DGraphLoader/J3DModelLoader.h"
+#include "JSystem/J3DGraphLoader/J3DShapeFactory.h"
+#include "JSystem/J3DGraphLoader/J3DMaterialFactory.h"
+#include "JSystem/J3DGraphBase/J3DMaterial.h"
+#include "JSystem/J3DGraphAnimator/J3DModelData.h"
+#include "JSystem/JSupport/JSupport.h"
+#include "dolphin/os.h"
#include "dol2asm.h"
//
-// Types:
-//
-
-struct J3DTextureBlock {};
-
-struct J3DShapeBlock {};
-
-struct J3DShapeFactory {
- /* 80337350 */ J3DShapeFactory(J3DShapeBlock const&);
- /* 80337944 */ void calcSize(int, u32);
- /* 803379D8 */ void calcSizeVcdVatCmdBuffer(u32);
-};
-
-struct J3DMaterialBlock {};
-
-struct J3DModelLoader_v26 {
- /* 80336DB4 */ void calcSizeMaterial(J3DMaterialBlock const*, u32);
- /* 80336F60 */ void calcSizeMaterialTable(J3DMaterialBlock const*, u32);
-};
-
-struct J3DDrawBlock {};
-
-struct J3DMaterialDLBlock {};
-
-struct J3DJointBlock {};
-
-struct J3DEnvelopeBlock {};
-
-struct J3DModelInfoBlock {};
-
-struct J3DModelLoader {
- /* 80336794 */ void countMaterialNum(void const*);
- /* 803367D4 */ void calcLoadSize(void const*, u32);
- /* 803369A0 */ void calcLoadMaterialTableSize(void const*);
- /* 80336A98 */ void calcLoadBinaryDisplayListSize(void const*, u32);
- /* 80336CD8 */ void calcSizeInformation(J3DModelInfoBlock const*, u32);
- /* 80336D64 */ void calcSizeJoint(J3DJointBlock const*);
- /* 80336D90 */ void calcSizeEnvelope(J3DEnvelopeBlock const*);
- /* 80336DA0 */ void calcSizeDraw(J3DDrawBlock const*);
- /* 80336EA0 */ void calcSizeShape(J3DShapeBlock const*, u32);
- /* 80336F44 */ void calcSizeTexture(J3DTextureBlock const*);
- /* 80336FF0 */ void calcSizeTextureTable(J3DTextureBlock const*);
- /* 80337010 */ void calcSizePatchedMaterial(J3DMaterialBlock const*, u32);
- /* 803370A0 */ void calcSizeMaterialDL(J3DMaterialDLBlock const*, u32);
-};
-
-struct J3DMaterial {};
-
-struct J3DMaterialFactory {
- struct MaterialType {};
-
- /* 8032FFEC */ J3DMaterialFactory(J3DMaterialBlock const&);
- /* 80330234 */ J3DMaterialFactory(J3DMaterialDLBlock const&);
- /* 803302BC */ void countUniqueMaterials();
- /* 80331A7C */ void calcSize(J3DMaterial*, J3DMaterialFactory::MaterialType, int, u32) const;
-};
-
-//
// Forward References:
//
@@ -89,7 +38,6 @@ extern "C" extern char const* const J3DModelLoaderCalcSize__stringBase0;
// External References:
//
-extern "C" void OSReport();
extern "C" void __ct__18J3DMaterialFactoryFRC16J3DMaterialBlock();
extern "C" void __ct__18J3DMaterialFactoryFRC18J3DMaterialDLBlock();
extern "C" void countUniqueMaterials__18J3DMaterialFactoryFv();
@@ -113,14 +61,17 @@ extern "C" void _restgpr_28();
//
/* 80336794-803367D4 3310D4 0040+00 0/0 3/0 0/0 .text countMaterialNum__14J3DModelLoaderFPCv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DModelLoader::countMaterialNum(void const* param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize/countMaterialNum__14J3DModelLoaderFPCv.s"
+u16 J3DModelLoader::countMaterialNum(const void* stream) {
+ const J3DModelFileData* header = (const J3DModelFileData*)stream;
+ const J3DModelBlock* block = header->mBlocks;
+ for (int i = 0; i < header->mBlockNum; block = (const J3DModelBlock*)((u8*)block + block->mBlockSize), i++)
+ {
+ if (block->mBlockType == 'MAT3') {
+ return ((const J3DMaterialBlock*)block)->mMaterialNum;
+ }
+ }
+ return 0;
}
-#pragma pop
/* ############################################################################################## */
/* 803A20E8-803A20E8 02E748 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@@ -132,156 +83,346 @@ SECTION_DEAD static char const* const pad_803A20FC = "\0\0\0";
#pragma pop
/* 803367D4-803369A0 331114 01CC+00 0/0 3/0 0/0 .text calcLoadSize__14J3DModelLoaderFPCvUl */
+// size load issue.
+#ifdef NONMATCHING
+u32 J3DModelLoader::calcLoadSize(void const* stream, u32 flags_) {
+ int flags = flags_;
+ const J3DModelFileData* header = static_cast<const J3DModelFileData*>(stream);
+ size_t size;
+ const J3DModelBlock* nextBlock = header->mBlocks;
+ u32 i = 0;
+ // TODO: What sizeof will get us a size of 0xE4?
+ size = 0xE4;
+ for (; i < header->mBlockNum; i++) {
+ switch (nextBlock->mBlockType) {
+ case 'INF1':
+ size += calcSizeInformation((const J3DModelInfoBlock*)nextBlock, flags);
+ break;
+ case 'JNT1':
+ size += calcSizeJoint((const J3DJointBlock*)nextBlock);
+ break;
+ case 'MAT2':
+ break;
+ case 'MAT3':
+ size += calcSizeMaterial((const J3DMaterialBlock*)nextBlock, flags);
+ break;
+ case 'SHP1':
+ size += calcSizeShape((const J3DShapeBlock*)nextBlock, flags);
+ break;
+ case 'TEX1':
+ size += calcSizeTexture((const J3DTextureBlock*)nextBlock);
+ break;
+ case 'EVP1':
+ size += calcSizeEnvelope((const J3DEnvelopeBlock*)nextBlock);
+ break;
+ case 'DRW1':
+ size += calcSizeDraw((const J3DDrawBlock*)nextBlock);
+ break;
+ case 'VTX1':
+ break;
+ default:
+ OSReport("Unknown data block\n");
+ break;
+ }
+ nextBlock = (const J3DModelBlock*)((u8*)nextBlock + nextBlock->mBlockSize);
+ }
+ return size;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void J3DModelLoader::calcLoadSize(void const* param_0, u32 param_1) {
+asm u32 J3DModelLoader::calcLoadSize(void const* param_0, u32 param_1) {
nofralloc
#include "asm/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize/calcLoadSize__14J3DModelLoaderFPCvUl.s"
}
#pragma pop
+#endif
/* 803369A0-80336A98 3312E0 00F8+00 0/0 3/0 0/0 .text
* calcLoadMaterialTableSize__14J3DModelLoaderFPCv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DModelLoader::calcLoadMaterialTableSize(void const* param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize/calcLoadMaterialTableSize__14J3DModelLoaderFPCv.s"
+u32 J3DModelLoader::calcLoadMaterialTableSize(const void* stream) {
+ size_t size;
+ const J3DModelBlock* nextBlock;
+ bool hasTextureTable;
+ u32 i;
+ const J3DModelFileData* header = reinterpret_cast<const J3DModelFileData*>(stream);
+ nextBlock = header->mBlocks;
+ hasTextureTable = false;
+ i = 0;
+ // TODO: What sizeof will get us a size of 0x20? Is this just the file header???
+ size = 0x20;
+ for (; i < header->mBlockNum; i++) {
+ switch (nextBlock->mBlockType) {
+ case 'MAT2':
+ break;
+ case 'MAT3':
+ size +=
+ calcSizeMaterialTable((const J3DMaterialBlock*)nextBlock,
+ J3DMLF_21 | J3DMLF_Material_UseIndirect |
+ J3DMLF_Material_PE_Full | J3DMLF_Material_Color_LightOn);
+ break;
+ case 'TEX1':
+ size += calcSizeTextureTable((const J3DTextureBlock*)nextBlock);
+ hasTextureTable = true;
+ break;
+ default:
+ OSReport("Unknown data block\n");
+ break;
+ }
+ nextBlock = (const J3DModelBlock*)((u8*)nextBlock + nextBlock->mBlockSize);
+ }
+
+ if (!hasTextureTable) {
+ size += 12;
+ }
+ return size;
}
-#pragma pop
/* 80336A98-80336CD8 3313D8 0240+00 0/0 3/0 0/0 .text
* calcLoadBinaryDisplayListSize__14J3DModelLoaderFPCvUl */
+// flags issue
+#ifdef NONMATCHING
+u32 J3DModelLoader::calcLoadBinaryDisplayListSize(const void* stream, u32 flags) {
+ const J3DModelFileData* header = (const J3DModelFileData*)stream;
+ const J3DModelBlock* nextBlock = header->mBlocks;
+ u32 i = 0;
+ u32 matFlags = flags & (J3DMLF_Material_UseIndirect | J3DMLF_26);
+ int size = sizeof(J3DModelData);
+ for (; i < header->mBlockNum; i++) {
+ switch (nextBlock->mBlockType) {
+ case 'INF1':
+ size += calcSizeInformation((const J3DModelInfoBlock*)nextBlock, flags);
+ break;
+ case 'JNT1':
+ size += calcSizeJoint((const J3DJointBlock*)nextBlock);
+ break;
+ case 'SHP1':
+ size += calcSizeShape((const J3DShapeBlock*)nextBlock, flags);
+ break;
+ case 'TEX1':
+ size += calcSizeTexture((const J3DTextureBlock*)nextBlock);
+ break;
+ case 'MDL3':
+ size += calcSizeMaterialDL((const J3DMaterialDLBlock*)nextBlock, flags);
+ break;
+ case 'MAT2':
+ break;
+ case 'MAT3':
+ u32 flags2 = (J3DMLF_21 | J3DMLF_Material_PE_Full | J3DMLF_Material_Color_LightOn);
+ flags2 |= matFlags;
+ mpMaterialBlock = (const J3DMaterialBlock*)nextBlock;
+ if ((flags & (J3DMLF_13 | J3DMLF_DoBdlMaterialCalc)) == 0) {
+ field_0x18 = 1;
+ size += calcSizeMaterial((const J3DMaterialBlock*)nextBlock, flags2);
+ } else if ((flags & (J3DMLF_13 | J3DMLF_DoBdlMaterialCalc)) == J3DMLF_DoBdlMaterialCalc) {
+ field_0x18 = 1;
+ size += calcSizePatchedMaterial((const J3DMaterialBlock*)nextBlock, matFlags);
+ }
+ break;
+ case 'EVP1':
+ size += calcSizeEnvelope((const J3DEnvelopeBlock*)nextBlock);
+ break;
+ case 'DRW1':
+ size += calcSizeDraw((const J3DDrawBlock*)nextBlock);
+ break;
+ case 'VTX1':
+ break;
+ default:
+ OSReport("Unknown data block\n");
+ break;
+ }
+ nextBlock = (const J3DModelBlock*)((u8*)nextBlock + nextBlock->mBlockSize);
+ }
+ return size;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void J3DModelLoader::calcLoadBinaryDisplayListSize(void const* param_0, u32 param_1) {
+asm u32 J3DModelLoader::calcLoadBinaryDisplayListSize(void const* param_0, u32 param_1) {
nofralloc
#include "asm/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize/calcLoadBinaryDisplayListSize__14J3DModelLoaderFPCvUl.s"
}
#pragma pop
+#endif
/* 80336CD8-80336D64 331618 008C+00 2/2 0/0 0/0 .text
* calcSizeInformation__14J3DModelLoaderFPC17J3DModelInfoBlockUl */
+// Matches with JSUConvertOffsetToPtr<J3DModelHierarchy>
+#ifdef NONMATCHING
+u32 J3DModelLoader::calcSizeInformation(const J3DModelInfoBlock* block, u32 flags) {
+ int size = 0;
+ switch ((flags | block->mFlags) & J3DMLF_MtxTypeMask) {
+ case J3DMLF_None: // Basic
+ size = 4;
+ break;
+ case J3DMLF_MtxSoftImageCalc:
+ size = 4;
+ break;
+ case J3DMLF_MtxMayaCalc:
+ size = 4;
+ break;
+ default:
+ break;
+ }
+ mpModelHierarchy = JSUConvertOffsetToPtr<J3DModelHierarchy>(block, block->mpHierarchy);
+ return size;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void J3DModelLoader::calcSizeInformation(J3DModelInfoBlock const* param_0, u32 param_1) {
+asm u32 J3DModelLoader::calcSizeInformation(J3DModelInfoBlock const* param_0, u32 param_1) {
nofralloc
#include "asm/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize/calcSizeInformation__14J3DModelLoaderFPC17J3DModelInfoBlockUl.s"
}
#pragma pop
+#endif
/* 80336D64-80336D90 3316A4 002C+00 2/2 0/0 0/0 .text
* calcSizeJoint__14J3DModelLoaderFPC13J3DJointBlock */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DModelLoader::calcSizeJoint(J3DJointBlock const* param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize/calcSizeJoint__14J3DModelLoaderFPC13J3DJointBlock.s"
+u32 J3DModelLoader::calcSizeJoint(const J3DJointBlock* block) {
+ int size = 0;
+ if (block->mpNameTable) {
+ size = 0x10;
+ }
+ size += (block->mJointNum * sizeof(J3DJoint*));
+ size += (block->mJointNum * sizeof(J3DJoint));
+ return size;
}
-#pragma pop
/* 80336D90-80336DA0 3316D0 0010+00 2/2 0/0 0/0 .text
* calcSizeEnvelope__14J3DModelLoaderFPC16J3DEnvelopeBlock */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DModelLoader::calcSizeEnvelope(J3DEnvelopeBlock const* param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize/calcSizeEnvelope__14J3DModelLoaderFPC16J3DEnvelopeBlock.s"
+u32 J3DModelLoader::calcSizeEnvelope(const J3DEnvelopeBlock* block) {
+ mEnvelopeSize = block->mWEvlpMtxNum;
+ return 0;
}
-#pragma pop
/* 80336DA0-80336DB4 3316E0 0014+00 2/2 0/0 0/0 .text
* calcSizeDraw__14J3DModelLoaderFPC12J3DDrawBlock */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DModelLoader::calcSizeDraw(J3DDrawBlock const* param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize/calcSizeDraw__14J3DModelLoaderFPC12J3DDrawBlock.s"
+u32 J3DModelLoader::calcSizeDraw(const J3DDrawBlock* block) {
+ return (block->mMtxNum - mEnvelopeSize) * 2;
}
-#pragma pop
/* 80336DB4-80336EA0 3316F4 00EC+00 0/0 1/0 0/0 .text
* calcSizeMaterial__18J3DModelLoader_v26FPC16J3DMaterialBlockUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DModelLoader_v26::calcSizeMaterial(J3DMaterialBlock const* param_0, u32 param_1) {
- nofralloc
-#include "asm/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize/calcSizeMaterial__18J3DModelLoader_v26FPC16J3DMaterialBlockUl.s"
+u32 J3DModelLoader_v26::calcSizeMaterial(const J3DMaterialBlock* block, u32 flags) {
+ int padding = 0;
+ J3DMaterialFactory factory(*block);
+ u32 count = block->mMaterialNum;
+ int uniqueCount = factory.countUniqueMaterials();
+ if (block->mpNameTable != NULL) {
+ padding = 0x10;
+ }
+ size_t size = padding + (count * sizeof(J3DMaterial*));
+
+ if ((flags & J3DMLF_UseUniqueMaterials) != 0) {
+ // calc for allocated materials as well
+ size += ALIGN_NEXT((u16)uniqueCount * sizeof(J3DMaterial), 0x20);
+ }
+ if ((flags & J3DMLF_UseUniqueMaterials) != 0) {
+ for (u32 i = 0; i < uniqueCount; i++) {
+ size += factory.calcSize(NULL, J3DMaterialFactory::MATERIAL_TYPE_NORMAL, i, flags);
+ }
+ }
+ for (u32 i = 0; i < count; i++) {
+ size += factory.calcSize(NULL, J3DMaterialFactory::MATERIAL_TYPE_NORMAL, i, flags);
+ }
+ return size;
}
-#pragma pop
/* 80336EA0-80336F44 3317E0 00A4+00 2/2 0/0 0/0 .text
* calcSizeShape__14J3DModelLoaderFPC13J3DShapeBlockUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DModelLoader::calcSizeShape(J3DShapeBlock const* param_0, u32 param_1) {
- nofralloc
-#include "asm/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize/calcSizeShape__14J3DModelLoaderFPC13J3DShapeBlockUl.s"
+u32 J3DModelLoader::calcSizeShape(const J3DShapeBlock* block, u32 flags) {
+ int size = 0;
+ J3DShapeFactory factory(*block);
+ int count = block->mShapeNum;
+ if (block->mpNameTable) {
+ size = 0x10;
+ }
+ size += count * sizeof(J3DShape*);
+ size += factory.calcSizeVcdVatCmdBuffer(count);
+ for (J3DModelHierarchy* hierarchy = mpModelHierarchy; hierarchy->mType != 0; hierarchy++) {
+ if (hierarchy->mType == 0x12) {
+ size += factory.calcSize(hierarchy->mValue, flags);
+ }
+ }
+ return size;
}
-#pragma pop
/* 80336F44-80336F60 331884 001C+00 3/3 0/0 0/0 .text
* calcSizeTexture__14J3DModelLoaderFPC15J3DTextureBlock */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DModelLoader::calcSizeTexture(J3DTextureBlock const* param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize/calcSizeTexture__14J3DModelLoaderFPC15J3DTextureBlock.s"
+u32 J3DModelLoader::calcSizeTexture(const J3DTextureBlock* block) {
+ // TODO: use sizeofs here.
+ int padding = 0;
+ if (block->mpNameTable) {
+ padding = 0x10;
+ }
+ return padding + 0xC;
}
-#pragma pop
/* 80336F60-80336FF0 3318A0 0090+00 0/0 1/0 0/0 .text
* calcSizeMaterialTable__18J3DModelLoader_v26FPC16J3DMaterialBlockUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DModelLoader_v26::calcSizeMaterialTable(J3DMaterialBlock const* param_0, u32 param_1) {
- nofralloc
-#include "asm/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize/calcSizeMaterialTable__18J3DModelLoader_v26FPC16J3DMaterialBlockUl.s"
+u32 J3DModelLoader_v26::calcSizeMaterialTable(const J3DMaterialBlock* block, u32 flags) {
+ int size = 0;
+ u32 count = block->mMaterialNum;
+ J3DMaterialFactory factory(*block);
+ if (block->mpNameTable) {
+ size = 0x10;
+ }
+ size += (count * sizeof(J3DMaterial*));
+ for (u16 i = 0; i < count; i++) {
+ size += factory.calcSize(NULL, J3DMaterialFactory::MATERIAL_TYPE_NORMAL, i, flags);
+ }
+ return size;
}
-#pragma pop
/* 80336FF0-80337010 331930 0020+00 1/1 0/0 0/0 .text
* calcSizeTextureTable__14J3DModelLoaderFPC15J3DTextureBlock */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DModelLoader::calcSizeTextureTable(J3DTextureBlock const* param_0) {
- nofralloc
-#include "asm/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize/calcSizeTextureTable__14J3DModelLoaderFPC15J3DTextureBlock.s"
+u32 J3DModelLoader::calcSizeTextureTable(const J3DTextureBlock* block) {
+ return calcSizeTexture(block);
}
-#pragma pop
/* 80337010-803370A0 331950 0090+00 1/1 0/0 0/0 .text
* calcSizePatchedMaterial__14J3DModelLoaderFPC16J3DMaterialBlockUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DModelLoader::calcSizePatchedMaterial(J3DMaterialBlock const* param_0, u32 param_1) {
- nofralloc
-#include "asm/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize/calcSizePatchedMaterial__14J3DModelLoaderFPC16J3DMaterialBlockUl.s"
+u32 J3DModelLoader::calcSizePatchedMaterial(const J3DMaterialBlock* block, u32 flags) {
+ int padding = 0;
+ u32 count = block->mMaterialNum;
+ J3DMaterialFactory factory(*block);
+ if (block->mpNameTable) {
+ padding = 0x10;
+ }
+ u32 size = padding + (count * sizeof(J3DMaterial*));
+ for (u16 i = 0; i < count; i++) {
+ size += factory.calcSize(NULL, J3DMaterialFactory::MATERIAL_TYPE_PATCHED, i, flags);
+ }
+ return size;
}
-#pragma pop
/* 803370A0-80337178 3319E0 00D8+00 1/1 0/0 0/0 .text
* calcSizeMaterialDL__14J3DModelLoaderFPC18J3DMaterialDLBlockUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DModelLoader::calcSizeMaterialDL(J3DMaterialDLBlock const* param_0, u32 param_1) {
- nofralloc
-#include "asm/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize/calcSizeMaterialDL__14J3DModelLoaderFPC18J3DMaterialDLBlockUl.s"
+u32 J3DModelLoader::calcSizeMaterialDL(const J3DMaterialDLBlock* block, u32 flags_) {
+ int flags = flags_;
+ size_t size = 0;
+ J3DMaterialFactory factory(*block);
+ ;
+ if (!field_0x18) {
+ u32 count = block->mMaterialNum;
+ if (block->mpNameTable) {
+ size = 0x10;
+ }
+ size += count * sizeof(J3DLockedMaterial*);
+ for (u16 i = 0; i < count; i++) {
+ size += factory.calcSize(NULL, J3DMaterialFactory::MATERIAL_TYPE_LOCKED, i, flags);
+ }
+ } else {
+ u32 count = block->mMaterialNum;
+ for (u16 i = 0; i < count; i++) {
+ size += factory.calcSize((J3DMaterial*)this, J3DMaterialFactory::MATERIAL_TYPE_LOCKED, i, flags);
+ }
+ }
+ return size;
}
-#pragma pop
/* 803A20E8-803A20E8 02E748 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */