NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
g3d_state.h
1#ifndef NW4R_G3D_STATE_H
2#define NW4R_G3D_STATE_H
3#include <nw4r/types_nw4r.h>
4
5#include <nw4r/g3d/g3d_camera.h>
6#include <nw4r/g3d/g3d_fog.h>
7#include <nw4r/g3d/res/g3d_resmat.h>
8
9#include <nw4r/math.h>
10
11#include <revolution/GX.h>
12
13namespace nw4r {
14namespace g3d {
15
16// Forward declarations
17struct AmbLightObj;
18class LightObj;
19class LightSetting;
20class ResShp;
21
22namespace detail {
23
24/******************************************************************************
25 *
26 * ScnDependentMtxFunc
27 *
28 ******************************************************************************/
29namespace ScnDependentMtxFunc {
30
31void EnvironmentMapping(math::MTX34* pMtx, s8 camRef, s8 lightRef);
32void ProjectionMapping(math::MTX34* pMtx, s8 camRef, s8 lightRef);
33void EnvironmentSpecularMapping(math::MTX34* pMtx, s8 camRef, s8 lightRef);
34void DefaultMapping(math::MTX34* pMtx, s8 camRef, s8 lightRef);
35
36} // namespace ScnDependentMtxFunc
37} // namespace detail
38
39/******************************************************************************
40 *
41 * G3DState
42 *
43 ******************************************************************************/
44namespace G3DState {
45
46static const int NUM_LIGHT = 128;
47static const int NUM_LIGHT_SET = 128;
48
49static const int NUM_LIGHT_IN_LIGHT_SET = 8;
50
51static const int NUM_CAMERA = 32;
52static const int NUM_FOG = 32;
53
54static const int NUM_SCNDEPENDENT_TEXMTX_FUNCTYPE = 256;
55
56enum InvalidateFlag {
57 INVALIDATE_TEX = (1 << 0),
58 INVALIDATE_TLUT = (1 << 1),
59 INVALIDATE_TEV = (1 << 2),
60 INVALIDATE_GENMODE = (1 << 3),
61 INVALIDATE_SHP = (1 << 4),
62 INVALIDATE_CURRMTX = (1 << 5),
63 INVALIDATE_TEXMTX = (1 << 6),
64 INVALIDATE_MISC = (1 << 7),
65 INVALIDATE_FOG = (1 << 8),
66 INVALIDATE_LIGHT = (1 << 9),
67 INVALIDATE_POSMTX = (1 << 10),
68
69 INVALIDATE_ALL = INVALIDATE_TEX | INVALIDATE_TLUT | INVALIDATE_TEV |
70 INVALIDATE_GENMODE | INVALIDATE_SHP | INVALIDATE_CURRMTX |
71 INVALIDATE_TEXMTX | INVALIDATE_MISC | INVALIDATE_FOG |
72 INVALIDATE_LIGHT | INVALIDATE_POSMTX
73};
74
75enum ScnDependentTexMtxFuncType {
76 SCNDEPENDENT_TEXMTX_FUNCTYPE_SRC_TEXCOORD,
77 SCNDEPENDENT_TEXMTX_FUNCTYPE_SRC_NRM,
78 SCNDEPENDENT_TEXMTX_FUNCTYPE_SRC_POS,
79 SCNDEPENDENT_TEXMTX_FUNCTYPE_SRC_COLOR,
80
81 MAX_SCNDEPENDENT_TEXMTX_FUNCTYPE,
82
83 SCNDEPENDENT_TEXMTX_FUNCTYPE_TEXMTX_NOT_EXIST =
84 SCNDEPENDENT_TEXMTX_FUNCTYPE_SRC_TEXCOORD,
85};
86
87typedef void (*ScnDependentTexMtxFuncPtr)(math::MTX34* pMtx, s8 camRef,
88 s8 lightRef);
89
90/******************************************************************************
91 *
92 * IndTexMtxInfo
93 *
94 ******************************************************************************/
95struct IndTexMtxInfo {
96 ulong flag; // at 0x0
97 math::MTX34 offset_mtx[GX_ITM_2 - GX_ITM_0 + 1]; // at 0x4
98
99 IndTexMtxInfo() : flag(0) {}
100 explicit IndTexMtxInfo(const ResMatIndMtxAndScale ind);
101
102 void FifoSend() const;
103 void SetMtx(GXIndTexMtxID id, const math::MTX34& rMtx);
104};
105
106/******************************************************************************
107 *
108 * IndMtxOp
109 *
110 ******************************************************************************/
111class IndMtxOp {
112public:
113 virtual void operator()(IndTexMtxInfo* pInfo) = 0; // at 0x8
114
115 virtual ~IndMtxOp() {} // at 0xC
116 virtual void Reset() = 0; // at 0x10
117
118 virtual void
119 SetNrmMapMtx(GXIndTexMtxID id, const math::VEC3* pLightVec,
120 const math::MTX34* pNrmMtx,
121 ResMatMiscData::IndirectMethod method) = 0; // at 0x14
122};
123
124/******************************************************************************
125 *
126 * IndMtxOpStd
127 *
128 ******************************************************************************/
129class IndMtxOpStd : public IndMtxOp {
130public:
131 IndMtxOpStd();
132
133 virtual void operator()(IndTexMtxInfo* pInfo); // at 0x8
134
135 virtual ~IndMtxOpStd() {} // at 0xC
136 virtual void Reset(); // at 0x10
137
138 virtual void SetNrmMapMtx(GXIndTexMtxID id, const math::VEC3* pLightVec,
139 const math::MTX34* pNrmMtx,
140 ResMatMiscData::IndirectMethod method); // at 0x14
141
142private:
143 bool mIsValidMtx[GX_ITM_2 - GX_ITM_0 + 1]; // at 0x4
144 u8 PADDING_0x7; // at 0x7
145 math::MTX34 mIndMtx[GX_ITM_2 - GX_ITM_0 + 1]; // at 0x8
146};
147
148/******************************************************************************
149 *
150 * Functions
151 *
152 ******************************************************************************/
153void LoadResMatMisc(const ResMatMisc misc);
154void LoadResTexObj(const ResTexObj texObj);
155void LoadResTlutObj(const ResTlutObj tlutObj);
156void LoadResGenMode(const ResGenMode mode);
157void LoadResTev(const ResTev tev);
158void LoadResMatPix(const ResMatPix pix);
159void LoadResMatTevColor(const ResMatTevColor color);
160void LoadResMatIndMtxAndScale(const ResMatIndMtxAndScale ind);
161void LoadResMatIndMtxAndScale(const ResMatIndMtxAndScale ind, IndMtxOp& rOp);
162void LoadResMatChan(const ResMatChan chan, ulong maskDiffColor, ulong maskDiffAlpha,
163 ulong maskSpecColor, ulong maskSpecAlpha, GXColor amb,
164 bool lightOff);
165void LoadResMatTexCoordGen(const ResMatTexCoordGen gen);
166void LoadResTexSrt(const ResTexSrt srt);
167void LoadResShpPrePrimitive(const ResShp shp);
168void LoadResShpPrimitive(const ResShp shp, const math::MTX34* pViewPos,
169 const math::MTX34* pViewNrm);
170
171void SetViewPosNrmMtxArray(const math::MTX34* pViewPosMtxArray,
172 const math::MTX33* pViewNrmMtxArray,
173 const math::MTX34* pViewEnvTexMtxArray);
174const math::MTX33* GetViewNrmMtxPtr(ulong id);
175
176void SetScnDependentTexMtxFunc(ulong id, ScnDependentTexMtxFuncPtr func,
177 ScnDependentTexMtxFuncType type);
178bool GetScnDependentTexMtxFunc(ulong id, ScnDependentTexMtxFuncPtr* pFunc,
179 ScnDependentTexMtxFuncType* pType);
180
181IndMtxOp* GetIndMtxOp();
182
183void SetFog(const Fog fog, int id);
184void LoadFog(int id);
185
186void SetLightSetting(const LightSetting& rSetting);
187const LightObj* GetLightObj(int id);
188void LoadLightSet(int id, ulong* pDiffColorMask, ulong* pDiffAlphaMask,
189 ulong* pSpecColorMask, ulong* pSpecAlphaMask, AmbLightObj* pAmb);
190void LoadLightSet(int id, ulong* pDiffMask, ulong* pSpecMask, AmbLightObj* pAmb);
191
192void SetCameraProjMtx(const Camera& rCam, int id, bool view);
193const math::MTX34* GetCameraMtxPtr();
194const math::MTX34* GetInvCameraMtxPtr();
195const math::MTX34* GetCameraMtxPtr(int id);
196const math::MTX34* GetProjectionTexMtxPtr();
197const math::MTX34* GetProjectionTexMtxPtr(int id);
198const math::MTX34* GetEnvironmentTexMtxPtr();
199
200void SetRenderModeObj(const GXRenderModeObj& rObj);
201const GXRenderModeObj* GetRenderModeObj();
202
203void Invalidate(ulong flag = INVALIDATE_ALL);
204
205} // namespace G3DState
206} // namespace g3d
207} // namespace nw4r
208
209#endif
3D graphics drawing library.
Definition g3d_3dsmax.h:10