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.