NW4F G3d
Loading...
Searching...
No Matches
g3d_TexPatternAnimObj.h
Go to the documentation of this file.
1#ifndef NW_G3D_TEXPATTERNANIMOBJ_H_
2#define NW_G3D_TEXPATTERNANIMOBJ_H_
3
4#include <nw/g3d/g3d_config.h>
5#include <nw/g3d/g3d_AnimObj.h>
6#include <nw/g3d/res/g3d_ResTexPatternAnim.h>
7
8namespace nw { namespace g3d {
9
10class ModelObj;
11class MaterialObj;
12
14{
15public:
16 class InitArg;
17
19 {
21 };
22
24
25 bool Init(const InitArg& arg, void* pBuffer, size_t bufferSize);
26
27 static size_t CalcBufferSize(const InitArg& arg);
28
29 virtual BindResult Bind(const ResModel* pModel);
30 virtual BindResult Bind(const ModelObj* pModel);
31 virtual void BindFast(const ResModel* pModel);
32
33 void SetBindFlag(int materialIndex, BindFlag flag)
34 {
36 SetBindFlagImpl(materialIndex, flag);
37 }
38
39 BindFlag GetBindFlag(int materialIndex)
40 {
42 return GetBindFlagImpl(materialIndex);
43 }
44
45 virtual void ClearResult();
46 virtual void Calc();
47 virtual void ApplyTo(ModelObj* pModelObj) const;
48
49 const ResTexPatternAnim* GetResource() const { return m_pRes; };
50
52
54 {
55 m_pRes = NULL;
57 }
58
59 bool IsAcceptable(const ResModel* pModel) const
60 {
63 return pModel->GetMaterialCount() <= GetBindTable().GetSize();
64 }
65
66 bool IsAcceptable(const ResTexPatternAnim* pRes) const
67 {
69 return pRes->GetMatAnimCount() <= m_MaxMatAnim && pRes->GetPatAnimCount() <= m_MaxSubBind
70 ;
71 }
72
73protected:
75 {
76 return ResTexPatternMatAnim::ResCast(&m_pMatAnimArray[animIndex]);
77 }
78
79 const ResTexPatternMatAnim* GetMatAnim(int animIndex) const
80 {
81 return ResTexPatternMatAnim::ResCast(&m_pMatAnimArray[animIndex]);
82 }
83
84 BindResult SubBind(const ResTexPatternMatAnim* pMatAnim, const ResMaterial* pMaterial);
85
87
88 void ApplyTo(MaterialObj* pMaterialObj, int animIndex) const;
89
90private:
91 class Sizer;
96
98
100};
101
103{
104public:
106
107 void Calc(const InitArg& arg);
108
109 enum
110 {
115
117 };
118
120};
121
123{
124public:
126
127 void Clear()
128 {
130 m_ContextEnabled = true;
131 m_ContextAvailable = false;
132 }
133
134 void Reserve(const ResModel* pResModel)
135 {
136 NW_G3D_ASSERT_NOT_NULL(pResModel);
137 m_NumMat = std::max(m_NumMat, pResModel->GetMaterialCount());
138 m_Sizer.Invalidate();
139 }
140
141 void Reserve(const ResTexPatternAnim* pResAnim)
142 {
143 NW_G3D_ASSERT_NOT_NULL(pResAnim);
144 m_NumMatAnim = std::max(m_NumMatAnim, pResAnim->GetMatAnimCount());
145 m_NumPatAnim = std::max(m_NumPatAnim, pResAnim->GetPatAnimCount());
146 m_NumCurve = std::max(m_NumCurve, pResAnim->GetCurveCount());
147
149 m_Sizer.Invalidate();
150 }
151
152 void EnableContext() { m_ContextEnabled = true; m_Sizer.Invalidate(); }
153
154 void DisableContext() { m_ContextEnabled = false; m_Sizer.Invalidate(); }
155
157
158 void SetMaxMatCount(int matCount)
159 {
160 NW_G3D_ASSERT(matCount >= 0);
161 m_NumMat = matCount;
162 m_Sizer.Invalidate();
163 }
164
165 int GetMaxMatCount() const { return m_NumMat; }
166
167 void SetMaxMatAnimCount(int matAnimCount)
168 {
169 NW_G3D_ASSERT(matAnimCount >= 0);
170 m_NumMatAnim = matAnimCount;
171 m_Sizer.Invalidate();
172 }
173
174 int GetMaxMatAnimCount() const { return m_NumMatAnim; }
175
176 void SetMaxPatAnimCount(int patAnimCount)
177 {
178 NW_G3D_ASSERT(patAnimCount >= 0);
179 m_NumPatAnim = patAnimCount;
180 m_Sizer.Invalidate();
181 }
182
183 int GetMaxPatAnimCount() const { return m_NumPatAnim; }
184
185 void SetMaxCurveCount(int curveCount)
186 {
187 NW_G3D_ASSERT(curveCount >= 0);
188 m_NumCurve = curveCount;
189 m_ContextAvailable = true;
190 m_Sizer.Invalidate();
191 }
192
193 int GetMaxCurveCount() const { return m_NumCurve; }
194
195 bool IsValid() const
196 {
197 return m_NumMat >= 0 && m_NumMatAnim >= 0 && m_NumPatAnim >= 0 && m_NumCurve >= 0;
198 }
199
200 Sizer& GetSizer() const { return m_Sizer; }
201
202private:
207
210 mutable Sizer m_Sizer;
211};
212
213} } // namespace nw::g3d
214
215#endif // NW_G3D_TEXPATTERNANIMOBJ_H_
BindFlag
Definition g3d_AnimObj.h:279
Definition g3d_MaterialObj.h:11
Definition g3d_AnimObj.h:343
ModelAnimObj()
Definition g3d_AnimObj.h:364
BindFlag GetBindFlagImpl(int targetIndex) const
void SetBindFlagImpl(int targetIndex, BindFlag flag)
void SetTargetUnbound()
Definition g3d_AnimObj.h:372
Definition g3d_ModelObj.h:15
Definition g3d_Sizer.h:10
Sizer()
Definition g3d_Sizer.h:18
Definition g3d_TexPatternAnimObj.h:123
void SetMaxPatAnimCount(int patAnimCount)
Definition g3d_TexPatternAnimObj.h:176
void Clear()
Definition g3d_TexPatternAnimObj.h:127
bool IsValid() const
Definition g3d_TexPatternAnimObj.h:195
bool m_ContextEnabled
Definition g3d_TexPatternAnimObj.h:208
void SetMaxMatAnimCount(int matAnimCount)
Definition g3d_TexPatternAnimObj.h:167
int GetMaxMatCount() const
Definition g3d_TexPatternAnimObj.h:165
int m_NumMatAnim
Definition g3d_TexPatternAnimObj.h:204
Sizer & GetSizer() const
Definition g3d_TexPatternAnimObj.h:200
void DisableContext()
Definition g3d_TexPatternAnimObj.h:154
bool IsContextEnabled() const
Definition g3d_TexPatternAnimObj.h:156
int GetMaxCurveCount() const
Definition g3d_TexPatternAnimObj.h:193
int GetMaxMatAnimCount() const
Definition g3d_TexPatternAnimObj.h:174
void Reserve(const ResModel *pResModel)
Definition g3d_TexPatternAnimObj.h:134
void SetMaxCurveCount(int curveCount)
Definition g3d_TexPatternAnimObj.h:185
void Reserve(const ResTexPatternAnim *pResAnim)
Definition g3d_TexPatternAnimObj.h:141
bool m_ContextAvailable
Definition g3d_TexPatternAnimObj.h:209
void SetMaxMatCount(int matCount)
Definition g3d_TexPatternAnimObj.h:158
InitArg()
Definition g3d_TexPatternAnimObj.h:125
int m_NumPatAnim
Definition g3d_TexPatternAnimObj.h:205
Sizer m_Sizer
Definition g3d_TexPatternAnimObj.h:210
int m_NumCurve
Definition g3d_TexPatternAnimObj.h:206
int m_NumMat
Definition g3d_TexPatternAnimObj.h:203
void EnableContext()
Definition g3d_TexPatternAnimObj.h:152
int GetMaxPatAnimCount() const
Definition g3d_TexPatternAnimObj.h:183
Definition g3d_TexPatternAnimObj.h:103
void Calc(const InitArg &arg)
Definition g3d_TexPatternAnimObj.cpp:8
Chunk chunk[NUM_CHUNK]
Definition g3d_TexPatternAnimObj.h:119
Sizer()
Definition g3d_TexPatternAnimObj.h:105
@ SUBBIND_TABLE
Definition g3d_TexPatternAnimObj.h:113
@ FRAMECACHE_ARRAY
Definition g3d_TexPatternAnimObj.h:114
@ NUM_CHUNK
Definition g3d_TexPatternAnimObj.h:116
@ RESULT_BUFFER
Definition g3d_TexPatternAnimObj.h:111
@ BIND_TABLE
Definition g3d_TexPatternAnimObj.h:112
Definition g3d_TexPatternAnimObj.h:14
ResTexPatternMatAnimData * m_pMatAnimArray
Definition g3d_TexPatternAnimObj.h:93
bool IsAcceptable(const ResTexPatternAnim *pRes) const
Definition g3d_TexPatternAnimObj.h:66
TexPatternAnimObj()
Definition g3d_TexPatternAnimObj.h:23
s8 * m_pSubBindIndexArray
Definition g3d_TexPatternAnimObj.h:97
ResTexPatternAnim * m_pRes
Definition g3d_TexPatternAnimObj.h:92
virtual void Calc()
Definition g3d_TexPatternAnimObj.cpp:224
void ResetResource()
Definition g3d_TexPatternAnimObj.h:53
BindResult SubBind(const ResTexPatternMatAnim *pMatAnim, const ResMaterial *pMaterial)
Definition g3d_TexPatternAnimObj.cpp:173
const ResTexPatternAnim * GetResource() const
Definition g3d_TexPatternAnimObj.h:49
static size_t CalcBufferSize(const InitArg &arg)
Definition g3d_TexPatternAnimObj.cpp:27
virtual void ApplyTo(ModelObj *pModelObj) const
Definition g3d_TexPatternAnimObj.cpp:274
void ApplyTo(MaterialObj *pMaterialObj, int animIndex) const
Definition g3d_TexPatternAnimObj.cpp:295
virtual void BindFast(const ResModel *pModel)
Definition g3d_TexPatternAnimObj.cpp:146
virtual BindResult Bind(const ResModel *pModel)
Definition g3d_TexPatternAnimObj.cpp:81
bool Init(const InitArg &arg, void *pBuffer, size_t bufferSize)
Definition g3d_TexPatternAnimObj.cpp:34
BindFlag GetBindFlag(int materialIndex)
Definition g3d_TexPatternAnimObj.h:39
BindResult SubBindFast(const ResTexPatternMatAnim *pMatAnim)
Definition g3d_TexPatternAnimObj.cpp:193
ResTexPatternMatAnim * GetMatAnim(int animIndex)
Definition g3d_TexPatternAnimObj.h:74
const ResTexPatternMatAnim * GetMatAnim(int animIndex) const
Definition g3d_TexPatternAnimObj.h:79
bool IsAcceptable(const ResModel *pModel) const
Definition g3d_TexPatternAnimObj.h:59
s32 m_MaxSubBind
Definition g3d_TexPatternAnimObj.h:95
Alignment
Definition g3d_TexPatternAnimObj.h:19
@ BUFFER_ALIGNMENT
Definition g3d_TexPatternAnimObj.h:20
virtual void ClearResult()
Definition g3d_TexPatternAnimObj.cpp:211
void SetResource(ResTexPatternAnim *pRes)
Definition g3d_TexPatternAnimObj.cpp:66
s32 m_MaxMatAnim
Definition g3d_TexPatternAnimObj.h:94
virtual BindResult Bind(const ModelObj *pModel)
Definition g3d_TexPatternAnimObj.cpp:113
void SetBindFlag(int materialIndex, BindFlag flag)
Definition g3d_TexPatternAnimObj.h:33
Definition g3d_Binding.h:16
Definition g3d_ResMaterial.h:375
Definition g3d_ResModel.h:38
Definition g3d_ResTexPatternAnim.h:83
bool IsCurveBaked() const
Definition g3d_ResTexPatternAnim.h:113
int GetCurveCount() const
Definition g3d_ResTexPatternAnim.h:119
int GetPatAnimCount() const
Definition g3d_ResTexPatternAnim.h:117
Definition g3d_ResTexPatternAnim.h:31
#define NW_G3D_ASSERT_NOT_NULL(exp)
Definition g3d_assert.h:20
#define NW_G3D_ASSERT(exp)
Definition g3d_assert.h:17
#define NW_G3D_DISALLOW_COPY_AND_ASSIGN(TypeName)
Definition g3d_defs.h:81
Definition g3d_GfxManage.cpp:10
Definition g3d_Sizer.h:13
Definition g3d_ResTexPatternAnim.h:17