NW4F G3d
Loading...
Searching...
No Matches
g3d_VisibilityAnimObj.h
Go to the documentation of this file.
1#ifndef NW_G3D_VISIBILITYANIMOBJ_H_
2#define NW_G3D_VISIBILITYANIMOBJ_H_
3
4#include <nw/g3d/g3d_config.h>
5#include <nw/g3d/g3d_AnimObj.h>
6#include <nw/g3d/res/g3d_ResVisibilityAnim.h>
7
8namespace nw { namespace g3d {
9
10class ModelObj;
11
13{
14public:
15 class InitArg;
16
18 {
20 };
21
23
24 bool Init(const InitArg& arg, void* pBuffer, size_t bufferSize);
25
26 static size_t CalcBufferSize(const InitArg& arg);
27
28 virtual BindResult Bind(const ResModel* pModel);
29 virtual BindResult Bind(const ModelObj* pModel);
30 virtual void BindFast(const ResModel* pModel);
31
32 void SetBindFlag(int targetIndex, BindFlag flag)
33 {
35 SetBindFlagImpl(targetIndex, flag);
36 }
37
38 BindFlag GetBindFlag(int targetIndex)
39 {
41 return GetBindFlagImpl(targetIndex);
42 }
43
44 virtual void ClearResult();
45 virtual void Calc();
46 virtual void ApplyTo(ModelObj* pModelObj) const;
47
48 const ResVisibilityAnim* GetResource() const { return m_pRes; };
49
51
53 {
54 m_pRes = NULL;
56 }
57
58 bool IsAcceptable(const ResModel* pModel) const
59 {
63 {
64 return pModel->GetSkeleton()->GetBoneCount() <= GetBindTable().GetSize();
65 }
66 else
67 {
68 return pModel->GetMaterialCount() <= GetBindTable().GetSize();
69 }
70 }
71
72 bool IsAcceptable(const ResVisibilityAnim* pRes) const
73 {
76 {
77 return pRes->GetAnimCount() <= m_MaxBoneAnim;
78 }
79 else
80 {
81 return pRes->GetAnimCount() <= m_MaxMatAnim;
82 }
83 }
84
85protected:
86 const ResAnimCurve* GetCurve(int curveIndex) const
87 {
88 return ResAnimCurve::ResCast(&m_pCurveArray[curveIndex]);
89 }
90
91private:
92 class Sizer;
98
100};
101
103{
104public:
106
107 void Calc(const InitArg& arg);
108
109 enum
110 {
115 };
116
118};
119
121{
122public:
124
125 void Clear()
126 {
128 m_ContextEnabled = true;
129 m_ContextAvailable = false;
130 }
131
132 void Reserve(const ResModel* pResModel)
133 {
134 NW_G3D_ASSERT_NOT_NULL(pResModel);
135 m_NumBone = std::max(m_NumBone, pResModel->GetSkeleton()->GetBoneCount());
136 m_NumMat = std::max(m_NumMat, pResModel->GetMaterialCount());
137 m_Sizer.Invalidate();
138 }
139
140 void Reserve(const ResVisibilityAnim* pResAnim)
141 {
142 NW_G3D_ASSERT_NOT_NULL(pResAnim);
144 {
145 m_NumBoneAnim = std::max(m_NumBoneAnim, pResAnim->GetAnimCount());
146 }
147 else
148 {
149 m_NumMatAnim = std::max(m_NumMatAnim, pResAnim->GetAnimCount());
150 }
151 m_NumCurve = std::max(m_NumCurve, pResAnim->GetCurveCount());
153 m_Sizer.Invalidate();
154 }
155
156 void EnableContext() { m_ContextEnabled = true; m_Sizer.Invalidate(); }
157
158 void DisableContext() { m_ContextEnabled = false; m_Sizer.Invalidate(); }
159
161
162 void SetMaxBoneCount(int boneCount)
163 {
164 NW_G3D_ASSERT(boneCount >= 0);
165 m_NumBone = boneCount;
166 m_Sizer.Invalidate();
167 }
168
169 int GetMaxBoneCount() const { return m_NumBone; }
170
171 void SetMaxMatCount(int matCount)
172 {
173 NW_G3D_ASSERT(matCount >= 0);
174 m_NumMat = matCount;
175 m_Sizer.Invalidate();
176 }
177
178 int GetMaxMatCount() const { return m_NumMat; }
179
180 void SetMaxBoneAnimCount(int boneAnimCount)
181 {
182 NW_G3D_ASSERT(boneAnimCount >= 0);
183 m_NumBoneAnim = boneAnimCount;
184 m_Sizer.Invalidate();
185 }
186
187 int GetMaxBoneAnimCount() const { return m_NumBoneAnim; }
188
189 void SetMaxMatAnimCount(int matAnimCount)
190 {
191 NW_G3D_ASSERT(matAnimCount >= 0);
192 m_NumMatAnim = matAnimCount;
193 m_Sizer.Invalidate();
194 }
195
196 int GetMaxMatAnimCount() const { return m_NumMatAnim; }
197
198 void SetMaxCurveCount(int curveCount)
199 {
200 NW_G3D_ASSERT(curveCount >= 0);
201 m_NumCurve = curveCount;
202 m_ContextAvailable = true;
203 m_Sizer.Invalidate();
204 }
205
206 int GetMaxCurveCount() const { return m_NumCurve; }
207
208 bool IsValid() const
209 {
210 return ((m_NumBone >= 0 && m_NumBoneAnim >= 0) ||
211 (m_NumMat >= 0 && m_NumMatAnim >= 0)) && m_NumCurve >= 0;
212 }
213
214 Sizer& GetSizer() const { return m_Sizer; }
215
216private:
224 mutable Sizer m_Sizer;
225};
226
227} } // namespace nw::g3d
228
229#endif // NW_G3D_VISIBILITYANIMOBJ_H_
BindFlag
Definition g3d_AnimObj.h:279
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_VisibilityAnimObj.h:121
int m_NumMat
Definition g3d_VisibilityAnimObj.h:218
bool IsContextEnabled() const
Definition g3d_VisibilityAnimObj.h:160
void SetMaxCurveCount(int curveCount)
Definition g3d_VisibilityAnimObj.h:198
int GetMaxCurveCount() const
Definition g3d_VisibilityAnimObj.h:206
int GetMaxMatCount() const
Definition g3d_VisibilityAnimObj.h:178
bool m_ContextEnabled
Definition g3d_VisibilityAnimObj.h:222
int GetMaxMatAnimCount() const
Definition g3d_VisibilityAnimObj.h:196
int m_NumCurve
Definition g3d_VisibilityAnimObj.h:221
InitArg()
Definition g3d_VisibilityAnimObj.h:123
void SetMaxMatCount(int matCount)
Definition g3d_VisibilityAnimObj.h:171
void Clear()
Definition g3d_VisibilityAnimObj.h:125
void Reserve(const ResVisibilityAnim *pResAnim)
Definition g3d_VisibilityAnimObj.h:140
int GetMaxBoneCount() const
Definition g3d_VisibilityAnimObj.h:169
void SetMaxBoneAnimCount(int boneAnimCount)
Definition g3d_VisibilityAnimObj.h:180
int GetMaxBoneAnimCount() const
Definition g3d_VisibilityAnimObj.h:187
void SetMaxBoneCount(int boneCount)
Definition g3d_VisibilityAnimObj.h:162
int m_NumMatAnim
Definition g3d_VisibilityAnimObj.h:220
bool IsValid() const
Definition g3d_VisibilityAnimObj.h:208
bool m_ContextAvailable
Definition g3d_VisibilityAnimObj.h:223
Sizer & GetSizer() const
Definition g3d_VisibilityAnimObj.h:214
int m_NumBoneAnim
Definition g3d_VisibilityAnimObj.h:219
void EnableContext()
Definition g3d_VisibilityAnimObj.h:156
Sizer m_Sizer
Definition g3d_VisibilityAnimObj.h:224
void Reserve(const ResModel *pResModel)
Definition g3d_VisibilityAnimObj.h:132
void DisableContext()
Definition g3d_VisibilityAnimObj.h:158
int m_NumBone
Definition g3d_VisibilityAnimObj.h:217
void SetMaxMatAnimCount(int matAnimCount)
Definition g3d_VisibilityAnimObj.h:189
Definition g3d_VisibilityAnimObj.h:103
void Calc(const InitArg &arg)
Definition g3d_VisibilityAnimObj.cpp:9
@ FRAMECACHE_ARRAY
Definition g3d_VisibilityAnimObj.h:113
@ NUM_CHUNK
Definition g3d_VisibilityAnimObj.h:114
@ RESULT_BUFFER
Definition g3d_VisibilityAnimObj.h:111
@ BIND_TABLE
Definition g3d_VisibilityAnimObj.h:112
Chunk chunk[NUM_CHUNK]
Definition g3d_VisibilityAnimObj.h:117
Sizer()
Definition g3d_VisibilityAnimObj.h:105
Definition g3d_VisibilityAnimObj.h:13
Alignment
Definition g3d_VisibilityAnimObj.h:18
@ BUFFER_ALIGNMENT
Definition g3d_VisibilityAnimObj.h:19
void SetBindFlag(int targetIndex, BindFlag flag)
Definition g3d_VisibilityAnimObj.h:32
VisibilityAnimObj()
Definition g3d_VisibilityAnimObj.h:22
BindFlag GetBindFlag(int targetIndex)
Definition g3d_VisibilityAnimObj.h:38
bool IsAcceptable(const ResModel *pModel) const
Definition g3d_VisibilityAnimObj.h:58
ResVisibilityAnim * m_pRes
Definition g3d_VisibilityAnimObj.h:93
void ResetResource()
Definition g3d_VisibilityAnimObj.h:52
virtual void ApplyTo(ModelObj *pModelObj) const
Definition g3d_VisibilityAnimObj.cpp:221
const ResAnimCurve * GetCurve(int curveIndex) const
Definition g3d_VisibilityAnimObj.h:86
u16 m_MaxMatAnim
Definition g3d_VisibilityAnimObj.h:95
void SetResource(ResVisibilityAnim *pRes)
Definition g3d_VisibilityAnimObj.cpp:86
static size_t CalcBufferSize(const InitArg &arg)
Definition g3d_VisibilityAnimObj.cpp:37
virtual BindResult Bind(const ResModel *pModel)
Definition g3d_VisibilityAnimObj.cpp:102
ResAnimCurveData * m_pCurveArray
Definition g3d_VisibilityAnimObj.h:97
virtual void Calc()
Definition g3d_VisibilityAnimObj.cpp:174
const ResVisibilityAnim * GetResource() const
Definition g3d_VisibilityAnimObj.h:48
virtual void ClearResult()
Definition g3d_VisibilityAnimObj.cpp:166
virtual void BindFast(const ResModel *pModel)
Definition g3d_VisibilityAnimObj.cpp:151
virtual BindResult Bind(const ModelObj *pModel)
Definition g3d_VisibilityAnimObj.cpp:145
s32 m_NumCurve
Definition g3d_VisibilityAnimObj.h:96
u16 m_MaxBoneAnim
Definition g3d_VisibilityAnimObj.h:94
bool Init(const InitArg &arg, void *pBuffer, size_t bufferSize)
Definition g3d_VisibilityAnimObj.cpp:44
bool IsAcceptable(const ResVisibilityAnim *pRes) const
Definition g3d_VisibilityAnimObj.h:72
Definition g3d_Binding.h:16
Definition g3d_ResAnimCurve.h:73
Definition g3d_ResModel.h:38
Definition g3d_ResVisibilityAnim.h:36
int GetAnimCount() const
Definition g3d_ResVisibilityAnim.h:67
int GetVisibilityType() const
Definition g3d_ResVisibilityAnim.h:61
@ BONE_VISIBILITY
Definition g3d_ResVisibilityAnim.h:48
bool IsCurveBaked() const
Definition g3d_ResVisibilityAnim.h:65
#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_ResAnimCurve.h:51