summaryrefslogtreecommitdiff
path: root/include/JSystem/J3DGraphBase/J3DShapeMtx.h
blob: 482c1588746cebfaa87299d84400f0bf14cd22a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#ifndef J3DSHAPEMTX_H
#define J3DSHAPEMTX_H

#include "JSystem/J3DGraphBase/J3DShape.h"
#include "dolphin/mtx/mtx.h"

class J3DShapeMtxImm : public J3DShapeMtx {
public:
    typedef void (J3DShapeMtxImm::*MtxLoadImm)(int mtxNo, u16 index) const;

    J3DShapeMtxImm(u16 useMtxIndex) : J3DShapeMtx(useMtxIndex) {}

    virtual ~J3DShapeMtxImm() {}
    virtual u32 getType() const { return 'SMIM'; }
    virtual void load() const;
    virtual void loadNrmMtx(int, u16) const;

    void loadMtxImm_PNGP(int, u16) const;
    void loadMtxImm_PCPU(int, u16) const;
    void loadMtxImm_NCPU(int, u16) const;
    void loadMtxImm_PNCPU(int, u16) const;
    void loadMtxImm_PNGP_LOD(int, u16) const;

    static MtxLoadImm sMtxLoadPipeline[4];
};

class J3DShapeMtxMultiImm : public J3DShapeMtxImm {
public:
    J3DShapeMtxMultiImm(u16 useMtxIndex, u16 useMtxNum, u16* useMtxIndexTable)
        : J3DShapeMtxImm(useMtxIndex), mUseMtxNum(useMtxNum), mUseMtxIndexTable(useMtxIndexTable) {}

    virtual ~J3DShapeMtxMultiImm() {}
    virtual u32 getType() const { return 'SMMI'; }
    virtual u32 getUseMtxNum() const { return mUseMtxNum; }
    virtual u16 getUseMtxIndex(u16 i) const { return mUseMtxIndexTable[i]; }
    virtual void load() const;
    virtual void loadNrmMtx(int, u16) const;

private:
    /* 0x8 */ u16 mUseMtxNum;
    /* 0xC */ u16* mUseMtxIndexTable;
};

class J3DShapeMtxConcatView : public J3DShapeMtxImm {
public:
    typedef void (J3DShapeMtxConcatView::*MtxLoadConcatView)(int mtxNo, u16 index) const;

    J3DShapeMtxConcatView(u16 useMtxIndex) : J3DShapeMtxImm(useMtxIndex) {}

    virtual ~J3DShapeMtxConcatView() {}
    virtual u32 getType() const { return 'SMCV'; }
    virtual void load() const;
    virtual void loadNrmMtx(int, u16) const {}
    virtual void loadNrmMtx(int, u16, Mtx) const;

    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;

    static MtxLoadConcatView sMtxLoadPipeline[4];
    static Mtx * sMtxPtrTbl[2];
};

class J3DShapeMtxBBoardImm : public J3DShapeMtxImm {
public:
    J3DShapeMtxBBoardImm(u16 useMtxIndex) : J3DShapeMtxImm(useMtxIndex) {}

    virtual ~J3DShapeMtxBBoardImm() {}
    virtual u32 getType() const { return 'SMBB'; }
    virtual void load() const;
};

class J3DShapeMtxYBBoardImm : public J3DShapeMtxImm {
public:
    J3DShapeMtxYBBoardImm(u16 useMtxIndex) : J3DShapeMtxImm(useMtxIndex) {}

    virtual ~J3DShapeMtxYBBoardImm() {}
    virtual u32 getType() const { return 'SMYB'; }
    virtual void load() const;
};

class J3DShapeMtxYBBoardConcatView : public J3DShapeMtxYBBoardImm {
public:
    J3DShapeMtxYBBoardConcatView(u16 useMtxIndex) : J3DShapeMtxYBBoardImm(useMtxIndex) {}

    virtual ~J3DShapeMtxYBBoardConcatView() {}
    virtual void load() const;
};

class J3DShapeMtxBBoardConcatView : public J3DShapeMtxBBoardImm {
public:
    J3DShapeMtxBBoardConcatView(u16 useMtxIndex) : J3DShapeMtxBBoardImm(useMtxIndex) {}

    virtual ~J3DShapeMtxBBoardConcatView() {}
    virtual void load() const;
};

class J3DShapeMtxMulti : public J3DShapeMtx {
public:
    J3DShapeMtxMulti(u16 useMtxIndex, u16 useMtxNum, u16* useMtxIndexTable)
        : J3DShapeMtx(useMtxIndex), mUseMtxNum(useMtxNum), mUseMtxIndexTable(useMtxIndexTable) {}

    virtual ~J3DShapeMtxMulti() {}
    virtual u32 getType() const { return 'SMML'; }
    virtual u32 getUseMtxNum() const { return mUseMtxNum; }
    virtual u16 getUseMtxIndex(u16 i) const { return mUseMtxIndexTable[i]; }
    virtual void load() const;
    virtual void calcNBTScale(Vec const&, Mtx33*, Mtx33*);

private:
    /* 0x8 */ u16 mUseMtxNum;
    /* 0xC */ u16* mUseMtxIndexTable;
};

class J3DShapeMtxMultiConcatView : public J3DShapeMtxConcatView {
public:
    J3DShapeMtxMultiConcatView(u16 useMtxIndex, u16 useMtxNum, u16* useMtxIndexTable)
        : J3DShapeMtxConcatView(useMtxIndex), mUseMtxNum(useMtxNum),
          mUseMtxIndexTable(useMtxIndexTable) {}

    virtual ~J3DShapeMtxMultiConcatView() {}
    virtual u32 getType() const { return 'SMMI'; }
    virtual u32 getUseMtxNum() const { return mUseMtxNum; }
    virtual u16 getUseMtxIndex(u16 i) const { return mUseMtxIndexTable[i]; }
    virtual void load() const;
    virtual void loadNrmMtx(int, u16) const {}
    virtual void loadNrmMtx(int, u16, Mtx) const;

private:
    /* 0x8 */ u16 mUseMtxNum;
    /* 0xC */ u16* mUseMtxIndexTable;
};

#endif /* J3DSHAPEMTX_H */