1#ifndef NW4R_G3D_STATE_H
2#define NW4R_G3D_STATE_H
3#include <nw4r/types_nw4r.h>
5#include <nw4r/g3d/g3d_camera.h>
6#include <nw4r/g3d/g3d_fog.h>
7#include <nw4r/g3d/res/g3d_resmat.h>
11#include <revolution/GX.h>
29namespace ScnDependentMtxFunc {
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);
46static const int NUM_LIGHT = 128;
47static const int NUM_LIGHT_SET = 128;
49static const int NUM_LIGHT_IN_LIGHT_SET = 8;
51static const int NUM_CAMERA = 32;
52static const int NUM_FOG = 32;
54static const int NUM_SCNDEPENDENT_TEXMTX_FUNCTYPE = 256;
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),
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
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,
81 MAX_SCNDEPENDENT_TEXMTX_FUNCTYPE,
83 SCNDEPENDENT_TEXMTX_FUNCTYPE_TEXMTX_NOT_EXIST =
84 SCNDEPENDENT_TEXMTX_FUNCTYPE_SRC_TEXCOORD,
87typedef void (*ScnDependentTexMtxFuncPtr)(math::MTX34* pMtx, s8 camRef,
99 IndTexMtxInfo() : flag(0) {}
102 void FifoSend()
const;
103 void SetMtx(GXIndTexMtxID
id,
const math::MTX34& rMtx);
116 virtual void Reset() = 0;
119 SetNrmMapMtx(GXIndTexMtxID
id,
const math::VEC3* pLightVec,
121 ResMatMiscData::IndirectMethod method) = 0;
135 virtual ~IndMtxOpStd() {}
136 virtual void Reset();
138 virtual void SetNrmMapMtx(GXIndTexMtxID
id,
const math::VEC3* pLightVec,
140 ResMatMiscData::IndirectMethod method);
143 bool mIsValidMtx[GX_ITM_2 - GX_ITM_0 + 1];
154void LoadResTexObj(
const ResTexObj texObj);
157void LoadResTev(
const ResTev tev);
162void LoadResMatChan(
const ResMatChan chan, ulong maskDiffColor, ulong maskDiffAlpha,
163 ulong maskSpecColor, ulong maskSpecAlpha, GXColor amb,
167void LoadResShpPrePrimitive(
const ResShp shp);
171void SetViewPosNrmMtxArray(
const math::MTX34* pViewPosMtxArray,
176void SetScnDependentTexMtxFunc(ulong
id, ScnDependentTexMtxFuncPtr func,
177 ScnDependentTexMtxFuncType type);
178bool GetScnDependentTexMtxFunc(ulong
id, ScnDependentTexMtxFuncPtr* pFunc,
179 ScnDependentTexMtxFuncType* pType);
183void SetFog(
const Fog fog,
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);
192void SetCameraProjMtx(
const Camera& rCam,
int id,
bool view);
200void SetRenderModeObj(
const GXRenderModeObj& rObj);
201const GXRenderModeObj* GetRenderModeObj();
203void Invalidate(ulong flag = INVALIDATE_ALL);
3D graphics drawing library.