Files
tp/include/JSystem/J3DGraphBase/J3DShapeMtx.h
T

166 lines
4.1 KiB
C++
Raw Normal View History

2021-03-28 22:49:05 +02:00
#ifndef J3DSHAPEMTX_H
#define J3DSHAPEMTX_H
2025-06-20 02:41:43 -04:00
#include "JSystem/J3DGraphBase/J3DShape.h"
2025-09-04 07:56:59 -07:00
#include "JSystem/J3DAssert.h"
2024-01-19 16:22:19 -08:00
#include "dolphin/mtx.h"
2021-03-28 22:49:05 +02:00
2021-12-06 06:51:53 -05:00
class J3DTexMtx;
class J3DTexGenBlock;
2024-04-12 00:10:30 -06:00
/**
* @ingroup jsystem-j3d
*
*/
class J3DTexMtxObj {
public:
2025-08-08 05:56:18 -04:00
Mtx& getMtx(u16 idx) {
2025-09-04 07:56:59 -07:00
J3D_ASSERT_RANGE(275, idx < mTexMtxNum);
2025-08-08 05:56:18 -04:00
return mpTexMtx[idx];
}
2025-09-04 07:56:59 -07:00
void setMtx(u16 idx, const Mtx mtx) {
J3D_ASSERT_RANGE(288, idx < mTexMtxNum);
MTXCopy(mtx, mpTexMtx[idx]);
}
2025-08-08 05:56:18 -04:00
Mtx44& getEffectMtx(u16 idx) {
2025-09-04 07:56:59 -07:00
J3D_ASSERT_RANGE(293, idx < mTexMtxNum);
2025-08-08 05:56:18 -04:00
return mpEffectMtx[idx];
}
2025-09-04 07:56:59 -07:00
2025-08-08 05:56:18 -04:00
u16 getNumTexMtx() const { return mTexMtxNum; }
2023-12-12 23:42:38 -05:00
/* 0x00 */ Mtx* mpTexMtx;
/* 0x04 */ Mtx44* mpEffectMtx;
/* 0x08 */ u16 mTexMtxNum;
};
2024-04-12 00:10:30 -06:00
/**
* @ingroup jsystem-j3d
*
*/
2021-12-06 06:51:53 -05:00
class J3DDifferedTexMtx {
public:
2025-11-30 14:23:42 -08:00
static void loadExecute(f32 const (*)[4]);
2022-04-23 22:17:28 -07:00
2025-09-04 07:56:59 -07:00
static inline void load(const Mtx m) {
2022-04-23 22:17:28 -07:00
if (sTexGenBlock != NULL)
loadExecute(m);
}
2021-12-06 06:51:53 -05:00
static J3DTexGenBlock* sTexGenBlock;
static J3DTexMtxObj* sTexMtxObj;
2021-12-06 06:51:53 -05:00
};
2023-12-12 23:42:38 -05:00
class J3DShapeMtxConcatView;
typedef void (J3DShapeMtxConcatView::*J3DShapeMtxConcatView_LoadFunc)(int, u16) const;
2024-04-12 00:10:30 -06:00
/**
* @ingroup jsystem-j3d
*
*/
2021-10-11 09:38:53 -07:00
class J3DShapeMtxConcatView : public J3DShapeMtx {
public:
2022-10-04 17:29:53 -07:00
J3DShapeMtxConcatView(u16 useMtxIndex)
: J3DShapeMtx(useMtxIndex)
{}
2025-11-30 14:23:42 -08:00
virtual ~J3DShapeMtxConcatView() {}
virtual u32 getType() const { return 'SMCV'; }
virtual void load() const;
virtual void loadNrmMtx(int, u16) const {}
virtual void loadNrmMtx(int, u16, f32 (*)[4]) const;
2021-10-11 09:38:53 -07:00
2025-11-30 14:23:42 -08:00
void loadMtxConcatView_PNGP(int, u16) const;
void loadMtxConcatView_PCPU(int, u16) const;
void loadMtxConcatView_NCPU(int, u16) const;
void loadMtxConcatView_PNCPU(int, u16) const;
void loadMtxConcatView_PNGP_LOD(int, u16) const;
2021-10-11 09:38:53 -07:00
2023-12-12 23:42:38 -05:00
static J3DShapeMtxConcatView_LoadFunc sMtxLoadPipeline[4];
static J3DShapeMtxConcatView_LoadFunc sMtxLoadLODPipeline[4];
static MtxP sMtxPtrTbl[2];
2021-10-11 09:38:53 -07:00
};
2024-04-12 00:10:30 -06:00
/**
* @ingroup jsystem-j3d
*
*/
2021-10-11 09:38:53 -07:00
class J3DShapeMtxYBBoardConcatView : public J3DShapeMtxConcatView {
public:
2022-10-04 17:29:53 -07:00
J3DShapeMtxYBBoardConcatView(u16 useMtxIndex)
: J3DShapeMtxConcatView(useMtxIndex)
{}
2025-11-30 14:23:42 -08:00
virtual ~J3DShapeMtxYBBoardConcatView() {}
virtual u32 getType() const { return 'SMYB'; }
virtual void load() const;
2021-10-11 09:38:53 -07:00
};
2024-04-12 00:10:30 -06:00
/**
* @ingroup jsystem-j3d
*
*/
2021-10-11 09:38:53 -07:00
class J3DShapeMtxBBoardConcatView : public J3DShapeMtxConcatView {
public:
2022-10-04 17:29:53 -07:00
J3DShapeMtxBBoardConcatView(u16 useMtxIndex)
: J3DShapeMtxConcatView(useMtxIndex)
{}
2025-11-30 14:23:42 -08:00
virtual ~J3DShapeMtxBBoardConcatView() {}
virtual u32 getType() const { return 'SMBB'; }
virtual void load() const;
2021-10-11 09:38:53 -07:00
};
2024-04-12 00:10:30 -06:00
/**
* @ingroup jsystem-j3d
*
*/
2021-10-11 09:38:53 -07:00
class J3DShapeMtxMulti : public J3DShapeMtx {
public:
2022-10-04 17:29:53 -07:00
J3DShapeMtxMulti(u16 useMtxIndex, u16 useMtxNum, u16* useMtxIndexTable)
: J3DShapeMtx(useMtxIndex)
, mUseMtxNum(useMtxNum)
, mUseMtxIndexTable(useMtxIndexTable)
{}
2025-11-30 14:23:42 -08:00
virtual ~J3DShapeMtxMulti() {}
virtual u32 getType() const { return 'SMML'; }
virtual u16 getUseMtxNum() const { return mUseMtxNum; }
virtual u16 getUseMtxIndex(u16 no) const { return mUseMtxIndexTable[no]; }
virtual void load() const;
virtual void calcNBTScale(Vec const&, f32 (*)[3][3], f32 (*)[3][3]);
2021-10-11 09:38:53 -07:00
private:
2023-12-12 23:42:38 -05:00
/* 0x8 */ u16 mUseMtxNum;
/* 0xC */ u16* mUseMtxIndexTable;
2021-10-11 09:38:53 -07:00
};
2024-04-12 00:10:30 -06:00
/**
* @ingroup jsystem-j3d
*
*/
2022-10-04 17:29:53 -07:00
class J3DShapeMtxMultiConcatView : public J3DShapeMtxConcatView {
2021-10-11 09:38:53 -07:00
public:
2022-10-04 17:29:53 -07:00
J3DShapeMtxMultiConcatView(u16 useMtxIndex, u16 useMtxNum, u16* useMtxIndexTable)
: J3DShapeMtxConcatView(useMtxIndex)
, mUseMtxNum(useMtxNum)
, mUseMtxIndexTable(useMtxIndexTable)
{}
2025-11-30 14:23:42 -08:00
virtual ~J3DShapeMtxMultiConcatView() {}
virtual u32 getType() const { return 'SMMC'; }
virtual u16 getUseMtxNum() const { return mUseMtxNum; }
virtual u16 getUseMtxIndex(u16 no) const { return mUseMtxIndexTable[no]; }
virtual void load() const;
virtual void loadNrmMtx(int, u16) const {}
virtual void loadNrmMtx(int, u16, f32 (*)[4]) const;
2021-10-11 09:38:53 -07:00
private:
2023-12-12 23:42:38 -05:00
/* 0x8 */ u16 mUseMtxNum;
/* 0xC */ u16* mUseMtxIndexTable;
2021-10-11 09:38:53 -07:00
};
#endif /* J3DSHAPEMTX_H */