Fix endianness & 64-bit in 3D asset loading code

Combination of plumbing BE(T) through everything, making BE<T> have template specializations, and inverting at load time where more practical.
This commit is contained in:
PJB3005
2026-02-25 20:20:45 +01:00
parent 31149794f1
commit e7861f1ee3
32 changed files with 830 additions and 553 deletions
@@ -3,6 +3,15 @@
#include "JSystem/J3DGraphAnimator/J3DAnimation.h"
#include "JSystem/J3DGraphAnimator/J3DAnimation.h"
#include "dusk/endian.h"
#if TARGET_PC
#define OFFSET_PTR BE(u32)
#else
#define OFFSET_PTR void*
#endif
/**
* @ingroup jsystem-j3d
*
@@ -17,18 +26,18 @@ struct J3DClusterLoaderDataBase {
*/
class J3DClusterBlock : public JUTDataBlockHeader {
public:
/* 0x08 */ u16 mClusterNum;
/* 0x0A */ u16 mClusterKeyNum;
/* 0x0C */ u16 mClusterVertexNum;
/* 0x0E */ u16 mVtxPosNum;
/* 0x10 */ u16 mVtxNrmNum;
/* 0x14 */ void* mClusterPointer;
/* 0x18 */ void* mClusterKeyPointer;
/* 0x1C */ void* mClusterVertex;
/* 0x20 */ void* mVtxPos;
/* 0x24 */ void* mVtxNrm;
/* 0x28 */ void* mClusterName;
/* 0x2C */ void* mClusterKeyName;
/* 0x08 */ BE(u16) mClusterNum;
/* 0x0A */ BE(u16) mClusterKeyNum;
/* 0x0C */ BE(u16) mClusterVertexNum;
/* 0x0E */ BE(u16) mVtxPosNum;
/* 0x10 */ BE(u16) mVtxNrmNum;
/* 0x14 */ OFFSET_PTR mClusterPointer;
/* 0x18 */ OFFSET_PTR mClusterKeyPointer;
/* 0x1C */ OFFSET_PTR mClusterVertex;
/* 0x20 */ OFFSET_PTR mVtxPos;
/* 0x24 */ OFFSET_PTR mVtxNrm;
/* 0x28 */ OFFSET_PTR mClusterName;
/* 0x2C */ OFFSET_PTR mClusterKeyName;
};
/**
@@ -58,4 +67,6 @@ public:
/* 0x04 */ J3DDeformData* mpDeformData;
};
#undef OFFSET_PTR
#endif /* J3DCLUSTERLOADER_H */
@@ -7,6 +7,8 @@
class J3DMaterial;
#define MAX_TEXTURES 8
/**
* @ingroup jsystem-j3d
*
@@ -20,28 +22,28 @@ struct J3DMaterialInitData {
/* 0x005 */ u8 mZCompLocIdx;
/* 0x006 */ u8 mZModeIdx;
/* 0x007 */ u8 mDitherIdx;
/* 0x008 */ u16 mMatColorIdx[2];
/* 0x00C */ u16 mColorChanIdx[4];
/* 0x014 */ u16 mAmbColorIdx[2];
/* 0x008 */ BE(u16) mMatColorIdx[2];
/* 0x00C */ BE(u16) mColorChanIdx[4];
/* 0x014 */ BE(u16) mAmbColorIdx[2];
/* 0x018 */ u8 field_0x018[0x10];
/* 0x028 */ u16 mTexCoordIdx[8];
/* 0x028 */ BE(u16) mTexCoordIdx[MAX_TEXTURES];
/* 0x038 */ u8 field_0x038[0x10];
/* 0x048 */ u16 mTexMtxIdx[8];
/* 0x048 */ BE(u16) mTexMtxIdx[MAX_TEXTURES];
/* 0x058 */ u8 field_0x058[0x2c];
/* 0x084 */ u16 mTexNoIdx[8];
/* 0x094 */ u16 mTevKColorIdx[4];
/* 0x084 */ BE(u16) mTexNoIdx[MAX_TEXTURES];
/* 0x094 */ BE(u16) mTevKColorIdx[4];
/* 0x09C */ u8 mTevKColorSel[0x10];
/* 0x0AC */ u8 mTevKAlphaSel[0x10];
/* 0x0BC */ u16 mTevOrderIdx[0x10];
/* 0x0DC */ u16 mTevColorIdx[4];
/* 0x0E4 */ u16 mTevStageIdx[0x10];
/* 0x104 */ u16 mTevSwapModeIdx[0x10];
/* 0x124 */ u16 mTevSwapModeTableIdx[4];
/* 0x0BC */ BE(u16) mTevOrderIdx[0x10];
/* 0x0DC */ BE(u16) mTevColorIdx[4];
/* 0x0E4 */ BE(u16) mTevStageIdx[0x10];
/* 0x104 */ BE(u16) mTevSwapModeIdx[0x10];
/* 0x124 */ BE(u16) mTevSwapModeTableIdx[4];
/* 0x12C */ u8 field_0x12c[0x18];
/* 0x144 */ u16 mFogIdx;
/* 0x146 */ u16 mAlphaCompIdx;
/* 0x148 */ u16 mBlendIdx;
/* 0x14A */ u16 mNBTScaleIdx;
/* 0x144 */ BE(u16) mFogIdx;
/* 0x146 */ BE(u16) mAlphaCompIdx;
/* 0x148 */ BE(u16) mBlendIdx;
/* 0x14A */ BE(u16) mNBTScaleIdx;
}; // size 0x14C
/**
@@ -84,7 +86,7 @@ struct J3DDisplayListInit {
}; // size 8
struct J3DTexCoord2Info;
struct J3DCurrentMtxInfo;
class J3DCurrentMtxInfo;
/**
* @ingroup jsystem-j3d
@@ -145,7 +147,7 @@ public:
/* 0x00 */ u16 mMaterialNum;
/* 0x04 */ J3DMaterialInitData* mpMaterialInitData;
/* 0x08 */ u16* mpMaterialID;
/* 0x08 */ BE(u16)* mpMaterialID;
/* 0x0C */ J3DIndInitData* mpIndInitData;
/* 0x10 */ GXColor* mpMatColor;
/* 0x14 */ u8* mpColorChanNum;
@@ -157,10 +159,10 @@ public:
/* 0x2C */ J3DTexCoord2Info* mpTexCoord2Info;
/* 0x30 */ J3DTexMtxInfo* mpTexMtxInfo;
/* 0x34 */ J3DTexMtxInfo* field_0x34;
/* 0x38 */ u16* mpTexNo;
/* 0x3C */ GXCullMode* mpCullMode;
/* 0x38 */ BE(u16)* mpTexNo;
/* 0x3C */ BE(GXCullMode)* mpCullMode;
/* 0x40 */ J3DTevOrderInfo* mpTevOrderInfo;
/* 0x44 */ GXColorS10* mpTevColor;
/* 0x44 */ BE(GXColorS10)* mpTevColor;
/* 0x48 */ GXColor* mpTevKColor;
/* 0x4C */ u8* mpTevStageNum;
/* 0x50 */ J3DTevStageInfo* mpTevStageInfo;
@@ -7,7 +7,7 @@
class J3DMaterial;
struct J3DTexCoord2Info;
struct J3DCurrentMtxInfo;
class J3DCurrentMtxInfo;
/**
* @ingroup jsystem-j3d
+115 -105
View File
@@ -4,17 +4,25 @@
#include "JSystem/J3DGraphBase/J3DSys.h"
#include <dolphin/mtx.h>
#include "dusk/endian.h"
class J3DModelData;
class J3DMaterialTable;
class J3DModelHierarchy;
#if TARGET_PC
#define OFFSET_PTR BE(u32)
#else
#define OFFSET_PTR void*
#endif
/**
* @ingroup jsystem-j3d
*
*/
struct J3DModelBlock {
/* 0x00 */ u32 mBlockType;
/* 0x04 */ u32 mBlockSize;
/* 0x00 */ BE(u32) mBlockType;
/* 0x04 */ BE(u32) mBlockSize;
};
/**
@@ -22,10 +30,10 @@ struct J3DModelBlock {
*
*/
struct J3DModelFileData {
/* 0x00 */ u32 mMagic1;
/* 0x04 */ u32 mMagic2;
/* 0x00 */ BE(u32) mMagic1;
/* 0x04 */ BE(u32) mMagic2;
/* 0x08 */ u8 field_0x08[4];
/* 0x0C */ u32 mBlockNum;
/* 0x0C */ BE(u32) mBlockNum;
/* 0x10 */ u8 field_0x10[0x10];
/* 0x20 */ J3DModelBlock mBlocks[1];
};
@@ -35,10 +43,10 @@ struct J3DModelFileData {
*
*/
struct J3DModelInfoBlock : public J3DModelBlock {
/* 0x08 */ u16 mFlags;
/* 0x0C */ u32 mPacketNum;
/* 0x10 */ u32 mVtxNum;
/* 0x14 */ void* mpHierarchy;
/* 0x08 */ BE(u16) mFlags;
/* 0x0C */ BE(u32) mPacketNum;
/* 0x10 */ BE(u32) mVtxNum;
/* 0x14 */ OFFSET_PTR mpHierarchy;
}; // size 0x18
/**
@@ -46,12 +54,12 @@ struct J3DModelInfoBlock : public J3DModelBlock {
*
*/
struct J3DVertexBlock : public J3DModelBlock {
/* 0x08 */ void* mpVtxAttrFmtList;
/* 0x0C */ void* mpVtxPosArray;
/* 0x10 */ void* mpVtxNrmArray;
/* 0x14 */ void* mpVtxNBTArray;
/* 0x18 */ void* mpVtxColorArray[2];
/* 0x20 */ void* mpVtxTexCoordArray[8];
/* 0x08 */ OFFSET_PTR mpVtxAttrFmtList;
/* 0x0C */ OFFSET_PTR mpVtxPosArray;
/* 0x10 */ OFFSET_PTR mpVtxNrmArray;
/* 0x14 */ OFFSET_PTR mpVtxNBTArray;
/* 0x18 */ OFFSET_PTR mpVtxColorArray[2];
/* 0x20 */ OFFSET_PTR mpVtxTexCoordArray[8];
}; // size 0x40
/**
@@ -59,11 +67,11 @@ struct J3DVertexBlock : public J3DModelBlock {
*
*/
struct J3DEnvelopeBlock : public J3DModelBlock {
/* 0x08 */ u16 mWEvlpMtxNum;
/* 0x0C */ void* mpWEvlpMixMtxNum;
/* 0x10 */ void* mpWEvlpMixIndex;
/* 0x14 */ void* mpWEvlpMixWeight;
/* 0x18 */ void* mpInvJointMtx;
/* 0x08 */ BE(u16) mWEvlpMtxNum;
/* 0x0C */ OFFSET_PTR mpWEvlpMixMtxNum;
/* 0x10 */ OFFSET_PTR mpWEvlpMixIndex;
/* 0x14 */ OFFSET_PTR mpWEvlpMixWeight;
/* 0x18 */ OFFSET_PTR mpInvJointMtx;
}; // size 0x1C
/**
@@ -71,9 +79,9 @@ struct J3DEnvelopeBlock : public J3DModelBlock {
*
*/
struct J3DDrawBlock : public J3DModelBlock {
/* 0x08 */ u16 mMtxNum;
/* 0x0C */ void* mpDrawMtxFlag;
/* 0x10 */ void* mpDrawMtxIndex;
/* 0x08 */ BE(u16) mMtxNum;
/* 0x0C */ OFFSET_PTR mpDrawMtxFlag;
/* 0x10 */ OFFSET_PTR mpDrawMtxIndex;
}; // size 0x14
/**
@@ -81,10 +89,10 @@ struct J3DDrawBlock : public J3DModelBlock {
*
*/
struct J3DJointBlock : public J3DModelBlock {
/* 0x08 */ u16 mJointNum;
/* 0x0C */ void* mpJointInitData;
/* 0x10 */ void* mpIndexTable;
/* 0x14 */ void* mpNameTable;
/* 0x08 */ BE(u16) mJointNum;
/* 0x0C */ OFFSET_PTR mpJointInitData;
/* 0x10 */ OFFSET_PTR mpIndexTable;
/* 0x14 */ OFFSET_PTR mpNameTable;
}; // size 0x18
/**
@@ -92,37 +100,37 @@ struct J3DJointBlock : public J3DModelBlock {
*
*/
struct J3DMaterialBlock : public J3DModelBlock {
/* 0x08 */ u16 mMaterialNum;
/* 0x0C */ void* mpMaterialInitData;
/* 0x10 */ void* mpMaterialID;
/* 0x14 */ void* mpNameTable;
/* 0x18 */ void* mpIndInitData;
/* 0x1C */ void* mpCullMode;
/* 0x20 */ void* mpMatColor;
/* 0x24 */ void* mpColorChanNum;
/* 0x28 */ void* mpColorChanInfo;
/* 0x2C */ void* mpAmbColor;
/* 0x30 */ void* mpLightInfo;
/* 0x34 */ void* mpTexGenNum;
/* 0x38 */ void* mpTexCoordInfo;
/* 0x3C */ void* mpTexCoord2Info;
/* 0x40 */ void* mpTexMtxInfo;
/* 0x44 */ void* field_0x44;
/* 0x48 */ void* mpTexNo;
/* 0x4C */ void* mpTevOrderInfo;
/* 0x50 */ void* mpTevColor;
/* 0x54 */ void* mpTevKColor;
/* 0x58 */ void* mpTevStageNum;
/* 0x5C */ void* mpTevStageInfo;
/* 0x60 */ void* mpTevSwapModeInfo;
/* 0x64 */ void* mpTevSwapModeTableInfo;
/* 0x68 */ void* mpFogInfo;
/* 0x6C */ void* mpAlphaCompInfo;
/* 0x70 */ void* mpBlendInfo;
/* 0x74 */ void* mpZModeInfo;
/* 0x78 */ void* mpZCompLoc;
/* 0x7C */ void* mpDither;
/* 0x80 */ void* mpNBTScaleInfo;
/* 0x08 */ BE(u16) mMaterialNum;
/* 0x0C */ OFFSET_PTR mpMaterialInitData;
/* 0x10 */ OFFSET_PTR mpMaterialID;
/* 0x14 */ OFFSET_PTR mpNameTable;
/* 0x18 */ OFFSET_PTR mpIndInitData;
/* 0x1C */ OFFSET_PTR mpCullMode;
/* 0x20 */ OFFSET_PTR mpMatColor;
/* 0x24 */ OFFSET_PTR mpColorChanNum;
/* 0x28 */ OFFSET_PTR mpColorChanInfo;
/* 0x2C */ OFFSET_PTR mpAmbColor;
/* 0x30 */ OFFSET_PTR mpLightInfo;
/* 0x34 */ OFFSET_PTR mpTexGenNum;
/* 0x38 */ OFFSET_PTR mpTexCoordInfo;
/* 0x3C */ OFFSET_PTR mpTexCoord2Info;
/* 0x40 */ OFFSET_PTR mpTexMtxInfo;
/* 0x44 */ OFFSET_PTR field_0x44;
/* 0x48 */ OFFSET_PTR mpTexNo;
/* 0x4C */ OFFSET_PTR mpTevOrderInfo;
/* 0x50 */ OFFSET_PTR mpTevColor;
/* 0x54 */ OFFSET_PTR mpTevKColor;
/* 0x58 */ OFFSET_PTR mpTevStageNum;
/* 0x5C */ OFFSET_PTR mpTevStageInfo;
/* 0x60 */ OFFSET_PTR mpTevSwapModeInfo;
/* 0x64 */ OFFSET_PTR mpTevSwapModeTableInfo;
/* 0x68 */ OFFSET_PTR mpFogInfo;
/* 0x6C */ OFFSET_PTR mpAlphaCompInfo;
/* 0x70 */ OFFSET_PTR mpBlendInfo;
/* 0x74 */ OFFSET_PTR mpZModeInfo;
/* 0x78 */ OFFSET_PTR mpZCompLoc;
/* 0x7C */ OFFSET_PTR mpDither;
/* 0x80 */ OFFSET_PTR mpNBTScaleInfo;
};
/**
@@ -130,34 +138,34 @@ struct J3DMaterialBlock : public J3DModelBlock {
*
*/
struct J3DMaterialBlock_v21 : public J3DModelBlock {
/* 0x08 */ u16 mMaterialNum;
/* 0x0C */ void* mpMaterialInitData;
/* 0x10 */ void* mpMaterialID;
/* 0x14 */ void* mpNameTable;
/* 0x18 */ void* mpCullMode;
/* 0x1C */ void* mpMatColor;
/* 0x20 */ void* mpColorChanNum;
/* 0x24 */ void* mpColorChanInfo;
/* 0x28 */ void* mpTexGenNum;
/* 0x2C */ void* mpTexCoordInfo;
/* 0x30 */ void* mpTexCoord2Info;
/* 0x34 */ void* mpTexMtxInfo;
/* 0x38 */ void* field_0x38;
/* 0x3C */ void* mpTexNo;
/* 0x40 */ void* mpTevOrderInfo;
/* 0x44 */ void* mpTevColor;
/* 0x48 */ void* mpTevKColor;
/* 0x4C */ void* mpTevStageNum;
/* 0x50 */ void* mpTevStageInfo;
/* 0x54 */ void* mpTevSwapModeInfo;
/* 0x58 */ void* mpTevSwapModeTableInfo;
/* 0x5C */ void* mpFogInfo;
/* 0x60 */ void* mpAlphaCompInfo;
/* 0x64 */ void* mpBlendInfo;
/* 0x68 */ void* mpZModeInfo;
/* 0x6C */ void* mpZCompLoc;
/* 0x70 */ void* mpDither;
/* 0x74 */ void* mpNBTScaleInfo;
/* 0x08 */ BE(u16) mMaterialNum;
/* 0x0C */ OFFSET_PTR mpMaterialInitData;
/* 0x10 */ OFFSET_PTR mpMaterialID;
/* 0x14 */ OFFSET_PTR mpNameTable;
/* 0x18 */ OFFSET_PTR mpCullMode;
/* 0x1C */ OFFSET_PTR mpMatColor;
/* 0x20 */ OFFSET_PTR mpColorChanNum;
/* 0x24 */ OFFSET_PTR mpColorChanInfo;
/* 0x28 */ OFFSET_PTR mpTexGenNum;
/* 0x2C */ OFFSET_PTR mpTexCoordInfo;
/* 0x30 */ OFFSET_PTR mpTexCoord2Info;
/* 0x34 */ OFFSET_PTR mpTexMtxInfo;
/* 0x38 */ OFFSET_PTR field_0x38;
/* 0x3C */ OFFSET_PTR mpTexNo;
/* 0x40 */ OFFSET_PTR mpTevOrderInfo;
/* 0x44 */ OFFSET_PTR mpTevColor;
/* 0x48 */ OFFSET_PTR mpTevKColor;
/* 0x4C */ OFFSET_PTR mpTevStageNum;
/* 0x50 */ OFFSET_PTR mpTevStageInfo;
/* 0x54 */ OFFSET_PTR mpTevSwapModeInfo;
/* 0x58 */ OFFSET_PTR mpTevSwapModeTableInfo;
/* 0x5C */ OFFSET_PTR mpFogInfo;
/* 0x60 */ OFFSET_PTR mpAlphaCompInfo;
/* 0x64 */ OFFSET_PTR mpBlendInfo;
/* 0x68 */ OFFSET_PTR mpZModeInfo;
/* 0x6C */ OFFSET_PTR mpZCompLoc;
/* 0x70 */ OFFSET_PTR mpDither;
/* 0x74 */ OFFSET_PTR mpNBTScaleInfo;
};
/**
@@ -165,13 +173,13 @@ struct J3DMaterialBlock_v21 : public J3DModelBlock {
*
*/
struct J3DMaterialDLBlock : public J3DModelBlock {
/* 0x08 */ u16 mMaterialNum;
/* 0x0C */ void* mpDisplayListInit;
/* 0x10 */ void* mpPatchingInfo;
/* 0x14 */ void* mpCurrentMtxInfo;
/* 0x18 */ void* mpMaterialMode;
/* 0x1C */ void* field_0x1c;
/* 0x20 */ void* mpNameTable;
/* 0x08 */ BE(u16) mMaterialNum;
/* 0x0C */ OFFSET_PTR mpDisplayListInit;
/* 0x10 */ OFFSET_PTR mpPatchingInfo;
/* 0x14 */ OFFSET_PTR mpCurrentMtxInfo;
/* 0x18 */ OFFSET_PTR mpMaterialMode;
/* 0x1C */ OFFSET_PTR field_0x1c;
/* 0x20 */ OFFSET_PTR mpNameTable;
};
/**
@@ -179,15 +187,15 @@ struct J3DMaterialDLBlock : public J3DModelBlock {
*
*/
struct J3DShapeBlock : public J3DModelBlock {
/* 0x08 */ u16 mShapeNum;
/* 0x0C */ void* mpShapeInitData;
/* 0x10 */ void* mpIndexTable;
/* 0x14 */ void* mpNameTable;
/* 0x18 */ void* mpVtxDescList;
/* 0x1C */ void* mpMtxTable;
/* 0x20 */ void* mpDisplayListData;
/* 0x24 */ void* mpMtxInitData;
/* 0x28 */ void* mpDrawInitData;
/* 0x08 */ BE(u16) mShapeNum;
/* 0x0C */ OFFSET_PTR mpShapeInitData;
/* 0x10 */ OFFSET_PTR mpIndexTable;
/* 0x14 */ OFFSET_PTR mpNameTable;
/* 0x18 */ OFFSET_PTR mpVtxDescList;
/* 0x1C */ OFFSET_PTR mpMtxTable;
/* 0x20 */ OFFSET_PTR mpDisplayListData;
/* 0x24 */ OFFSET_PTR mpMtxInitData;
/* 0x28 */ OFFSET_PTR mpDrawInitData;
}; // size 0x2C
/**
@@ -195,9 +203,9 @@ struct J3DShapeBlock : public J3DModelBlock {
*
*/
struct J3DTextureBlock : public J3DModelBlock {
/* 0x08 */ u16 mTextureNum;
/* 0x0C */ void* mpTextureRes;
/* 0x10 */ void* mpNameTable;
/* 0x08 */ BE(u16) mTextureNum;
/* 0x0C */ OFFSET_PTR mpTextureRes;
/* 0x10 */ OFFSET_PTR mpNameTable;
};
enum J3DModelLoaderFlagTypes {
@@ -347,4 +355,6 @@ struct J3DMtxCalcJ3DSysInitSoftimage {
}
};
#undef OFFSET_PTR
#endif /* J3DMODELLOADER_H */
@@ -15,13 +15,13 @@ struct ResNTAB;
*/
struct J3DShapeInitData {
/* 0x00 */ u8 mShapeMtxType;
/* 0x02 */ u16 mMtxGroupNum;
/* 0x04 */ u16 mVtxDescListIndex;
/* 0x06 */ u16 mMtxInitDataIndex;
/* 0x08 */ u16 mDrawInitDataIndex;
/* 0x0C */ f32 mRadius;
/* 0x10 */ Vec mMin;
/* 0x1C */ Vec mMax;
/* 0x02 */ BE(u16) mMtxGroupNum;
/* 0x04 */ BE(u16) mVtxDescListIndex;
/* 0x06 */ BE(u16) mMtxInitDataIndex;
/* 0x08 */ BE(u16) mDrawInitDataIndex;
/* 0x0C */ BE(f32) mRadius;
/* 0x10 */ BE(Vec) mMin;
/* 0x1C */ BE(Vec) mMax;
};
/**
@@ -29,9 +29,9 @@ struct J3DShapeInitData {
*
*/
struct J3DShapeMtxInitData {
/* 0x00 */ u16 mUseMtxIndex;
/* 0x02 */ u16 mUseMtxCount;
/* 0x04 */ u32 mFirstUseMtxIndex;
/* 0x00 */ BE(u16) mUseMtxIndex;
/* 0x02 */ BE(u16) mUseMtxCount;
/* 0x04 */ BE(u32) mFirstUseMtxIndex;
};
/**
@@ -39,8 +39,8 @@ struct J3DShapeMtxInitData {
*
*/
struct J3DShapeDrawInitData {
/* 0x00 */ u32 mDisplayListSize;
/* 0x04 */ u32 mDisplayListIndex;
/* 0x00 */ BE(u32) mDisplayListSize;
/* 0x04 */ BE(u32) mDisplayListIndex;
};
/**
@@ -49,7 +49,7 @@ struct J3DShapeDrawInitData {
*/
struct J3DShapeFactory {
J3DShapeFactory(J3DShapeBlock const&);
J3DShape* create(int, u32, GXVtxDescList*);
J3DShape* create(int, u32, BE(GXVtxDescList)*);
J3DShapeMtx* newShapeMtx(u32, int, int) const;
J3DShapeDraw* newShapeDraw(int, int) const;
void allocVcdVatCmdBuffer(u32);
@@ -58,19 +58,25 @@ struct J3DShapeFactory {
s32 calcSizeShapeMtx(u32, int, int) const;
/* 0x00 */ J3DShapeInitData* mShapeInitData;
/* 0x04 */ u16* mIndexTable;
/* 0x08 */ GXVtxDescList* mVtxDescList;
/* 0x0C */ u16* mMtxTable;
/* 0x04 */ BE(u16)* mIndexTable;
/* 0x08 */ BE(GXVtxDescList)* mVtxDescList;
/* 0x0C */ BE(u16)* mMtxTable;
/* 0x10 */ u8* mDisplayListData;
/* 0x14 */ J3DShapeMtxInitData* mMtxInitData;
/* 0x18 */ J3DShapeDrawInitData* mDrawInitData;
/* 0x1C */ u8* mVcdVatCmdBuffer;
u16 getMtxGroupNum(int no) const { return mShapeInitData[mIndexTable[no]].mMtxGroupNum; }
GXVtxDescList* getVtxDescList(int no) const { return (GXVtxDescList*)((u8*)mVtxDescList + mShapeInitData[mIndexTable[no]].mVtxDescListIndex); }
BE(GXVtxDescList)* getVtxDescList(int no) const { return (BE(GXVtxDescList)*)((u8*)mVtxDescList + mShapeInitData[mIndexTable[no]].mVtxDescListIndex); }
f32 getRadius(int no) const { return mShapeInitData[mIndexTable[no]].mRadius; }
#if TARGET_PC
// Reference return only used for reading, messes with endian handling
Vec getMin[[nodiscard]](int no) const { return mShapeInitData[mIndexTable[no]].mMin; }
Vec getMax[[nodiscard]](int no) const { return mShapeInitData[mIndexTable[no]].mMax; }
#else
Vec& getMin(int no) const { return mShapeInitData[mIndexTable[no]].mMin; }
Vec& getMax(int no) const { return mShapeInitData[mIndexTable[no]].mMax; }
#endif
};