NW4F G3d
Loading...
Searching...
No Matches
g3d_ShaderParamAnimObj.h
Go to the documentation of this file.
1#ifndef NW_G3D_SHADERPARAMANIMOBJ_H_
2#define NW_G3D_SHADERPARAMANIMOBJ_H_
3
4#include <nw/g3d/g3d_config.h>
5#include <nw/g3d/g3d_AnimObj.h>
6#include <nw/g3d/res/g3d_ResShaderParamAnim.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 ResShaderParamAnim* 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 ResShaderParamAnim* pRes) const
67 {
69 return pRes->GetMatAnimCount() <= m_MaxMatAnim && pRes->GetParamAnimCount() <= m_MaxSubBind;
70 }
71
72protected:
74 {
75 return ResShaderParamMatAnim::ResCast(&m_pMatAnimArray[animIndex]);
76 }
77
78 const ResShaderParamMatAnim* GetMatAnim(int animIndex) const
79 {
80 return ResShaderParamMatAnim::ResCast(&m_pMatAnimArray[animIndex]);
81 }
82
83 BindResult SubBind(const ResShaderParamMatAnim* pMatAnim, const ResMaterial* pMaterial);
84
86
87 void ApplyTo(MaterialObj* pMaterialObj, int animIndex) const;
88
89private:
90 class Sizer;
96
98};
99
101{
102public:
104
105 void Calc(const InitArg& arg);
106
107 enum
108 {
114 };
115
117};
118
120{
121public:
123
124 void Clear()
125 {
127 m_ContextEnabled = true;
128 m_ContextAvailable = false;
129 }
130
131 void Reserve(const ResModel* pResModel)
132 {
133 NW_G3D_ASSERT_NOT_NULL(pResModel);
134 m_NumMat = std::max(m_NumMat, pResModel->GetMaterialCount());
135 m_Sizer.Invalidate();
136 }
137
138 void Reserve(const ResShaderParamAnim* pResAnim)
139 {
140 NW_G3D_ASSERT_NOT_NULL(pResAnim);
141 m_NumMatAnim = std::max(m_NumMatAnim, pResAnim->GetMatAnimCount());
143 m_NumCurve = std::max(m_NumCurve, pResAnim->GetCurveCount());
145 m_Sizer.Invalidate();
146 }
147
148 void EnableContext() { m_ContextEnabled = true; m_Sizer.Invalidate(); }
149
150 void DisableContext() { m_ContextEnabled = false; m_Sizer.Invalidate(); }
151
153
154 void SetMaxMatCount(int matCount)
155 {
156 NW_G3D_ASSERT(matCount >= 0);
157 m_NumMat = matCount;
158 m_Sizer.Invalidate();
159 }
160
161 int GetMaxMatCount() const { return m_NumMat; }
162
163 void SetMaxMatAnimCount(int matAnimCount)
164 {
165 NW_G3D_ASSERT(matAnimCount >= 0);
166 m_NumMatAnim = matAnimCount;
167 m_Sizer.Invalidate();
168 }
169
170 int GetMaxMatAnimCount() const { return m_NumMatAnim; }
171
172 void SetMaxParamAnimCount(int paramAnimCount)
173 {
174 NW_G3D_ASSERT(paramAnimCount >= 0);
175 m_NumParamAnim = paramAnimCount;
176 m_Sizer.Invalidate();
177 }
178
179 int GetMaxParamAnimCount() const { return m_NumParamAnim; }
180
181 void SetMaxCurveCount(int curveCount)
182 {
183 NW_G3D_ASSERT(curveCount >= 0);
184 m_NumCurve = curveCount;
185 m_ContextAvailable = true;
186 m_Sizer.Invalidate();
187 }
188
189 int GetMaxCurveCount() const { return m_NumCurve; }
190
191 bool IsValid() const
192 {
193 return m_NumMat >= 0 && m_NumMatAnim >= 0 && m_NumParamAnim >= 0 && m_NumCurve >= 0;
194 }
195
196 Sizer& GetSizer() const { return m_Sizer; }
197
198private:
205 mutable Sizer m_Sizer;
206};
207
208} } // namespace nw::g3d
209
210#endif // NW_G3D_SHADERPARAMANIMOBJ_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_ShaderParamAnimObj.h:120
void SetMaxMatAnimCount(int matAnimCount)
Definition g3d_ShaderParamAnimObj.h:163
bool IsContextEnabled() const
Definition g3d_ShaderParamAnimObj.h:152
bool m_ContextAvailable
Definition g3d_ShaderParamAnimObj.h:204
int GetMaxParamAnimCount() const
Definition g3d_ShaderParamAnimObj.h:179
int m_NumParamAnim
Definition g3d_ShaderParamAnimObj.h:201
int m_NumCurve
Definition g3d_ShaderParamAnimObj.h:202
InitArg()
Definition g3d_ShaderParamAnimObj.h:122
int GetMaxCurveCount() const
Definition g3d_ShaderParamAnimObj.h:189
Sizer m_Sizer
Definition g3d_ShaderParamAnimObj.h:205
void Reserve(const ResModel *pResModel)
Definition g3d_ShaderParamAnimObj.h:131
int GetMaxMatCount() const
Definition g3d_ShaderParamAnimObj.h:161
int GetMaxMatAnimCount() const
Definition g3d_ShaderParamAnimObj.h:170
void DisableContext()
Definition g3d_ShaderParamAnimObj.h:150
void Clear()
Definition g3d_ShaderParamAnimObj.h:124
void Reserve(const ResShaderParamAnim *pResAnim)
Definition g3d_ShaderParamAnimObj.h:138
void SetMaxMatCount(int matCount)
Definition g3d_ShaderParamAnimObj.h:154
void SetMaxParamAnimCount(int paramAnimCount)
Definition g3d_ShaderParamAnimObj.h:172
int m_NumMat
Definition g3d_ShaderParamAnimObj.h:199
bool IsValid() const
Definition g3d_ShaderParamAnimObj.h:191
int m_NumMatAnim
Definition g3d_ShaderParamAnimObj.h:200
void SetMaxCurveCount(int curveCount)
Definition g3d_ShaderParamAnimObj.h:181
bool m_ContextEnabled
Definition g3d_ShaderParamAnimObj.h:203
Sizer & GetSizer() const
Definition g3d_ShaderParamAnimObj.h:196
void EnableContext()
Definition g3d_ShaderParamAnimObj.h:148
Definition g3d_ShaderParamAnimObj.h:101
@ BIND_TABLE
Definition g3d_ShaderParamAnimObj.h:110
@ RESULT_BUFFER
Definition g3d_ShaderParamAnimObj.h:109
@ FRAMECACHE_ARRAY
Definition g3d_ShaderParamAnimObj.h:112
@ NUM_CHUNK
Definition g3d_ShaderParamAnimObj.h:113
@ SUBBIND_TABLE
Definition g3d_ShaderParamAnimObj.h:111
void Calc(const InitArg &arg)
Definition g3d_ShaderParamAnimObj.cpp:8
Sizer()
Definition g3d_ShaderParamAnimObj.h:103
Chunk chunk[NUM_CHUNK]
Definition g3d_ShaderParamAnimObj.h:116
Definition g3d_ShaderParamAnimObj.h:14
void ResetResource()
Definition g3d_ShaderParamAnimObj.h:53
const ResShaderParamAnim * GetResource() const
Definition g3d_ShaderParamAnimObj.h:49
BindFlag GetBindFlag(int materialIndex)
Definition g3d_ShaderParamAnimObj.h:39
virtual BindResult Bind(const ModelObj *pModel)
Definition g3d_ShaderParamAnimObj.cpp:109
virtual void Calc()
Definition g3d_ShaderParamAnimObj.cpp:205
ResShaderParamMatAnim * GetMatAnim(int animIndex)
Definition g3d_ShaderParamAnimObj.h:73
s32 m_MaxSubBind
Definition g3d_ShaderParamAnimObj.h:94
ResShaderParamAnim * m_pRes
Definition g3d_ShaderParamAnimObj.h:91
bool IsAcceptable(const ResShaderParamAnim *pRes) const
Definition g3d_ShaderParamAnimObj.h:66
bool IsAcceptable(const ResModel *pModel) const
Definition g3d_ShaderParamAnimObj.h:59
bool Init(const InitArg &arg, void *pBuffer, size_t bufferSize)
Definition g3d_ShaderParamAnimObj.cpp:32
void ApplyTo(MaterialObj *pMaterialObj, int animIndex) const
Definition g3d_ShaderParamAnimObj.cpp:277
u16 * m_pSubBindIndexArray
Definition g3d_ShaderParamAnimObj.h:95
BindResult SubBind(const ResShaderParamMatAnim *pMatAnim, const ResMaterial *pMaterial)
Definition g3d_ShaderParamAnimObj.cpp:167
virtual BindResult Bind(const ResModel *pModel)
Definition g3d_ShaderParamAnimObj.cpp:78
void SetResource(ResShaderParamAnim *pRes)
Definition g3d_ShaderParamAnimObj.cpp:63
void SetBindFlag(int materialIndex, BindFlag flag)
Definition g3d_ShaderParamAnimObj.h:33
virtual void BindFast(const ResModel *pModel)
Definition g3d_ShaderParamAnimObj.cpp:141
BindResult SubBindFast(const ResShaderParamMatAnim *pMatAnim)
Definition g3d_ShaderParamAnimObj.cpp:187
static size_t CalcBufferSize(const InitArg &arg)
Definition g3d_ShaderParamAnimObj.cpp:25
const ResShaderParamMatAnim * GetMatAnim(int animIndex) const
Definition g3d_ShaderParamAnimObj.h:78
s32 m_MaxMatAnim
Definition g3d_ShaderParamAnimObj.h:93
virtual void ApplyTo(ModelObj *pModelObj) const
Definition g3d_ShaderParamAnimObj.cpp:256
Alignment
Definition g3d_ShaderParamAnimObj.h:19
@ BUFFER_ALIGNMENT
Definition g3d_ShaderParamAnimObj.h:20
ResShaderParamMatAnimData * m_pMatAnimArray
Definition g3d_ShaderParamAnimObj.h:92
virtual void ClearResult()
Definition g3d_ShaderParamAnimObj.h:45
ShaderParamAnimObj()
Definition g3d_ShaderParamAnimObj.h:23
Definition g3d_Sizer.h:10
Sizer()
Definition g3d_Sizer.h:18
Definition g3d_Binding.h:16
Definition g3d_ResMaterial.h:375
Definition g3d_ResModel.h:38
Definition g3d_ResShaderParamAnim.h:92
int GetParamAnimCount() const
Definition g3d_ResShaderParamAnim.h:118
int GetCurveCount() const
Definition g3d_ResShaderParamAnim.h:120
bool IsCurveBaked() const
Definition g3d_ResShaderParamAnim.h:114
Definition g3d_ResShaderParamAnim.h:30
#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_ResShaderParamAnim.h:14