Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
Loading...
Searching...
No Matches
material.h
Go to the documentation of this file.
1#ifndef NW4HBM_LYT_MATERIAL_H
2#define NW4HBM_LYT_MATERIAL_H
3
4#include <revolution/types.h>
5#include <revolution/tpl.h>
6#include <revolution/gx.h>
7
8#include "animation.h"
9#include "lyt_types.h"
10#include "resources.h"
11
12#include "../ut/Color.h"
13
14namespace nw4hbm {
15 namespace lyt {
16 class Material;
17
18 namespace detail {
19 typedef struct BitGXNums {
20 u32 texMap : 4; // 11110000000000000000000000000000
21 u32 texSRT : 4; // 00001111000000000000000000000000
22 u32 texCoordGen : 4; // 00000000111100000000000000000000
23 u32 indSRT : 2; // 00000000000011000000000000000000
24 u32 indStage : 3; // 00000000000000111000000000000000
25 u32 tevSwap : 1; // 00000000000000000100000000000000
26 u32 tevStage : 5; // 00000000000000000011111000000000
27 u32 chanCtrl : 1; // 00000000000000000000000100000000
28 u32 matCol : 1; // 00000000000000000000000010000000
29 u32 alpComp : 1; // 00000000000000000000000001000000
30 u32 blendMode : 1; // 00000000000000000000000000100000
32 Size GetTextureSize(Material* pMaterial, u8 texMapIdx);
33 } // namespace detail
34
35 class Material {
36 public:
37 Material();
38 Material(const res::Material* pRes, const ResBlockSet& resBlockSet);
39
40 /* 0x08 */ virtual ~Material();
41 /* 0x0C */ virtual bool SetupGX(bool bModVtxCol, u8 alpha);
42 /* 0x10 */ virtual void BindAnimation(AnimTransform* animTrans);
43 /* 0x14 */ virtual void UnbindAnimation(AnimTransform* animTrans);
44 /* 0x18 */ virtual void UnbindAllAnimation();
45 /* 0x1C */ virtual void Animate();
46 /* 0x20 */ virtual AnimationLink* FindAnimationLink(AnimTransform* animTrans);
47 /* 0x24 */ virtual void SetAnimationEnable(AnimTransform* animTrans, bool bEnable);
48
49 const char* GetName() const { return mName; }
50 GXColorS10 GetTevColor(u32 idx) const { return mTevCols[idx]; }
51
52 u8 GetTextureCap() const { return mGXMemCap.texMap; }
53
54 u8 GetTexSRTCap() const { return mGXMemCap.texSRT; }
55
57
58 u8 GetIndTexSRTCap() const { return mGXMemCap.indSRT; }
59
60 bool IsTevSwapCap() const { return static_cast<bool>(mGXMemCap.tevSwap); }
61 bool IsBlendModeCap() const { return static_cast<bool>(mGXMemCap.blendMode); }
62 bool IsAlphaCompareCap() const { return static_cast<bool>(mGXMemCap.alpComp); }
63
64 bool IsMatColorCap() const { return static_cast<bool>(mGXMemCap.matCol); }
65 bool IsChanCtrlCap() const { return static_cast<bool>(mGXMemCap.chanCtrl); }
66
67 u8 GetTextureNum() const { return mGXMemNum.texMap; }
68
69 bool IsUserAllocated() const { return mbUserAllocated; }
70
71 void SetName(const char* name);
72
73 const GXTexObj* GetTexMapAry() const;
74 const TexSRT* GetTexSRTAry() const;
75 const TexCoordGen* GetTexCoordGenAry() const;
76 const ChanCtrl* GetChanCtrlAry() const;
77 const ut::Color* GetMatColAry() const;
78 const TevSwapMode* GetTevSwapAry() const;
79 const AlphaCompare* GetAlphaComparePtr() const;
80 const BlendMode* GetBlendModePtr() const;
82 const TexSRT* GetIndTexSRTAry() const;
83 const TevStage* GetTevStageAry() const;
84
96
97 void GetTexture(GXTexObj* pTexObj, u8 texMapIdx) const;
98
99 void SetTextureNum(u8 num);
100 void SetTexCoordGenNum(u8 num);
101 void SetIndStageNum(u8 num);
102 void SetTevStageNum(u8 num);
103
104 void SetTexture(u8 texMapIdx, const GXTexObj& texObj);
105 void SetTexture(u8 texMapIdx, TPLPalette* pTplRes);
106 void SetTextureNoWrap(u8 texMapIdx, TPLPalette* pTplRes);
107
108 void SetColorElement(u32 colorType, s16 value);
109
110 void SetTexCoordGen(u32 idx, TexCoordGen value) {
111 NW4HBM_ASSERT(180, idx < mGXMemNum.texCoordGen);
112 GetTexCoordGenAry()[idx] = value;
113 }
114
115 void SetTexSRTElement(u32 texSRTIdx, u32 eleIdx, f32 value) {
116 NW4HBM_ASSERT(293, texSRTIdx < mGXMemNum.texSRT);
117 f32* srtAry = reinterpret_cast<f32*>(&GetTexSRTAry()[texSRTIdx]);
118 srtAry[eleIdx] = value;
119 }
120
121 void SetIndTexSRTElement(u32 texSRTIdx, u32 eleIdx, f32 value) {
122 NW4HBM_ASSERT(309, texSRTIdx < mGXMemNum.indSRT);
123 f32* srtAry = reinterpret_cast<f32*>(&GetIndTexSRTAry()[texSRTIdx]);
124 srtAry[eleIdx] = value;
125 }
126
127 void Init();
129
130 void ReserveGXMem(u8 texMapNum, u8 texSRTNum, u8 texCoordGenNum, u8 tevStageNum,
131 bool allocTevSwap, u8 indStageNum, u8 indSRTNum, bool allocChanCtrl,
132 bool allocMatCol, bool allocAlpComp, bool allocBlendMode);
133
134 void AddAnimationLink(AnimationLink* animationLink);
135
136 private:
137 static const int MAX_TEX_SRT = (GX_TEXMTX9 - GX_TEXMTX0) / 3 + 1;
138 static const int MAX_IND_SRT = (GX_ITM_2 - GX_ITM_0) + 1;
139
140 /* 0x00 (vtable) */
141 /* 0x04 */ char mName[20];
147 /* 0x54 */ bool mbUserAllocated;
148 /* 0x58 */ void* mpGXMem;
149 };
150
151 } // namespace lyt
152} // namespace nw4hbm
153
154#endif
Definition lyt_types.h:396
Definition animation.h:127
Definition lyt_types.h:422
Definition lyt_types.h:377
Definition lyt_types.h:168
Definition material.h:35
u8 GetTexSRTCap() const
Definition material.h:54
virtual ~Material()
Definition lyt_material.cpp:417
detail::BitGXNums mGXMemNum
Definition material.h:146
void SetIndStageNum(u8 num)
Definition lyt_material.cpp:675
void AddAnimationLink(AnimationLink *animationLink)
Definition lyt_material.cpp:1173
GXColorS10 GetTevColor(u32 idx) const
Definition material.h:50
const ut::Color * GetMatColAry() const
Definition lyt_material.cpp:566
const IndirectStage * GetIndirectStageAry() const
Definition lyt_material.cpp:600
void GetTexture(GXTexObj *pTexObj, u8 texMapIdx) const
Definition lyt_material.cpp:690
virtual void UnbindAnimation(AnimTransform *animTrans)
Definition lyt_material.cpp:1145
bool IsUserAllocated() const
Definition material.h:69
void SetTevStageNum(u8 num)
Definition lyt_material.cpp:660
const TexCoordGen * GetTexCoordGenAry() const
Definition lyt_material.cpp:548
bool IsTevSwapCap() const
Definition material.h:60
virtual AnimationLink * FindAnimationLink(AnimTransform *animTrans)
Definition lyt_material.cpp:1177
char mName[20]
Definition material.h:141
u8 GetTextureNum() const
Definition material.h:67
void * mpGXMem
Definition material.h:148
void SetTextureNum(u8 num)
Definition lyt_material.cpp:630
void InitBitGXNums(detail::BitGXNums *ptr)
Definition lyt_material.cpp:426
const ChanCtrl * GetChanCtrlAry() const
Definition lyt_material.cpp:558
u8 GetTextureCap() const
Definition material.h:52
static const int MAX_IND_SRT
Definition material.h:138
Material()
Definition lyt_material.cpp:237
virtual void Animate()
Definition lyt_material.cpp:1162
const TevStage * GetTevStageAry() const
Definition lyt_material.cpp:618
const char * GetName() const
Definition material.h:49
void SetName(const char *name)
Definition lyt_material.cpp:626
AnimationLinkList mAnimList
Definition material.h:142
virtual void SetAnimationEnable(AnimTransform *animTrans, bool bEnable)
Definition lyt_material.cpp:1181
bool IsChanCtrlCap() const
Definition material.h:65
virtual bool SetupGX(bool bModVtxCol, u8 alpha)
Definition lyt_material.cpp:786
void SetTextureNoWrap(u8 texMapIdx, TPLPalette *pTplRes)
Definition lyt_material.cpp:702
void SetTexSRTElement(u32 texSRTIdx, u32 eleIdx, f32 value)
Definition material.h:115
bool IsAlphaCompareCap() const
Definition material.h:62
void SetTexCoordGen(u32 idx, TexCoordGen value)
Definition material.h:110
u8 GetTexCoordGenCap() const
Definition material.h:56
static const int MAX_TEX_SRT
Definition material.h:137
const TexSRT * GetTexSRTAry() const
Definition lyt_material.cpp:540
u8 GetIndTexSRTCap() const
Definition material.h:58
bool mbUserAllocated
Definition material.h:147
bool IsMatColorCap() const
Definition material.h:64
GXColorS10 mTevCols[TEVCOLOR_MAX]
Definition material.h:143
void ReserveGXMem(u8 texMapNum, u8 texSRTNum, u8 texCoordGenNum, u8 tevStageNum, bool allocTevSwap, u8 indStageNum, u8 indSRTNum, bool allocChanCtrl, bool allocMatCol, bool allocAlpComp, bool allocBlendMode)
Definition lyt_material.cpp:440
void SetTexCoordGenNum(u8 num)
Definition lyt_material.cpp:645
const TevSwapMode * GetTevSwapAry() const
Definition lyt_material.cpp:574
void SetColorElement(u32 colorType, s16 value)
Definition lyt_material.cpp:717
virtual void UnbindAllAnimation()
Definition lyt_material.cpp:1158
detail::BitGXNums mGXMemCap
Definition material.h:145
virtual void BindAnimation(AnimTransform *animTrans)
Definition lyt_material.cpp:1141
bool IsBlendModeCap() const
Definition material.h:61
void Init()
Definition lyt_material.cpp:405
const GXTexObj * GetTexMapAry() const
Definition lyt_material.cpp:532
const BlendMode * GetBlendModePtr() const
Definition lyt_material.cpp:592
const AlphaCompare * GetAlphaComparePtr() const
Definition lyt_material.cpp:582
void SetTexture(u8 texMapIdx, const GXTexObj &texObj)
Definition lyt_material.cpp:711
ut::Color mTevKCols[GX_MAX_KCOLOR]
Definition material.h:144
const TexSRT * GetIndTexSRTAry() const
Definition lyt_material.cpp:610
void SetIndTexSRTElement(u32 texSRTIdx, u32 eleIdx, f32 value)
Definition material.h:121
Definition lyt_types.h:242
Definition lyt_types.h:195
Definition lyt_types.h:146
s16 name
Definition d_a_e_pz.cpp:1757
Material
Definition d_a_npc_moir.cpp:87
@ GX_ITM_2
Definition GXEnum.h:694
@ GX_ITM_0
Definition GXEnum.h:692
@ GX_MAX_KCOLOR
Definition GXEnum.h:652
@ GX_TEXMTX9
Definition GXEnum.h:287
@ GX_TEXMTX0
Definition GXEnum.h:278
unsigned long u32
Definition types.h:12
signed short int s16
Definition types.h:9
float f32
Definition types.h:25
unsigned char u8
Definition types.h:8
Size GetTextureSize(Material *pMaterial, u8 texMapIdx)
Definition lyt_material.cpp:1187
struct nw4hbm::lyt::detail::BitGXNums BitGXNums
@ TEVCOLOR_MAX
Definition lyt_types.h:32
Definition HBMAnmController.h:6
Definition tpl.h:39
Definition GXStruct.h:34
Definition GXStruct.h:38
Definition resources.h:282
Definition lyt_types.h:125
Definition lyt_types.h:140
Definition material.h:19
u32 chanCtrl
Definition material.h:27
u32 texSRT
Definition material.h:21
u32 alpComp
Definition material.h:29
u32 indSRT
Definition material.h:23
u32 tevSwap
Definition material.h:25
u32 texCoordGen
Definition material.h:22
u32 blendMode
Definition material.h:30
u32 indStage
Definition material.h:24
u32 texMap
Definition material.h:20
u32 matCol
Definition material.h:28
u32 tevStage
Definition material.h:26
Definition resources.h:140
Definition Color.h:10