mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-08-04 00:38:59 -04:00
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:
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user