source: GTP/trunk/App/Demos/Geom/Shark3D/src/shader_paintmesh_clod/eng_shader_std_paintmesh_clod.h @ 2236

Revision 2236, 9.0 KB checked in by gumbau, 17 years ago (diff)
Line 
1///////////////////////////////////////////////////////////////////////////////
2//
3//      ##  ######
4//       ######  ###
5//  ## ###############        Shark 3D Engine (www.shark3d.com)
6//   ########## # # #
7//    ########                Copyright (c) 1996-2006 Spinor GmbH.
8//   ######### # # #          All rights reserved.
9//  ##   ##########
10//      ##
11//
12///////////////////////////////////////////////////////////////////////////////
13
14//@cpp
15
16#ifndef S3D_ENG_SHADER_STD_PAINTMESH_CLOD_H
17#define S3D_ENG_SHADER_STD_PAINTMESH_CLOD_H
18
19#include "eng/interf/eng_shader.h"
20#include "eng/interf/eng_shaderenv.h"
21#include "eng/util/eng_util_lightutil.h"
22#include "comp/core/comp_setup.h"
23#include "comp/util/comp_util_uniquebase.h"
24
25namespace Geometry
26{
27        class LodStripsLibrary;
28        class IndexData;
29}
30
31///////////////////////////////////////////////////////////////////////////////
32
33//@
34struct s3d_CEngShaderStdPaintMeshBatch
35{
36    bool m_Complete;
37    s3d_CEngGfxBatchArray m_BatchArray;
38};
39
40//@
41typedef s3d_CUtilKeyEntry<s3d_CDrvSigPtr, s3d_CEngShaderStdPaintMeshBatch>
42                s3d_CEngShaderStdPaintMeshBatchKeyEntry;
43
44//@
45typedef s3d_CUtilArray<s3d_CEngShaderStdPaintMeshBatchKeyEntry>
46        s3d_CEngShaderStdPaintMeshBatchKeyArray;
47
48///////////////////////////////////////////////////////////////////////////////
49
50class s3d_CEngShaderStdPaintMeshGfx;
51
52//@
53typedef s3d_CUtilKeyEntry<s3d_CEngGfxCtxPtr, s3d_CEngShaderStdPaintMeshGfx*>
54        s3d_CEngShaderStdPaintMeshGfxEntry;
55
56//@
57typedef s3d_CUtilTree<s3d_CEngShaderStdPaintMeshGfxEntry>
58        s3d_CEngShaderStdPaintMeshGfxTree;
59
60///////////////////////////////////////////////////////////////////////////////
61
62struct s3d_CEngShaderStdPaintMeshData: s3d_CUtilPtrBase
63{
64    s3d_CUtilStr m_Info;
65    s3d_CUtilAtomArray m_MethodArray;
66    int m_Rank;
67    bool m_BackToFront;
68    bool m_FrontToBack;
69    int m_PaintMode;
70    float m_PaintExt;
71    int m_CullMode;
72    int m_DepthTest;
73    bool m_DepthWrite;
74    float m_DepthBiasOverlay;
75    float m_DepthBiasOffs;
76    bool m_FogEnabled;
77    bool m_FogBlack;
78    int m_BlendColSrcFac;
79    int m_BlendColDestFac;
80    int m_BlendColOp;
81    int m_BlendAlphaSrcFac;
82    int m_BlendAlphaDestFac;
83    int m_BlendAlphaOp;
84    float m_Alpha;
85    s3d_CUtilVec3f m_Color;
86    s3d_CUtilStr m_AlphaVarInfo;
87    s3d_CUtilAtomPtr m_AlphaVarAtom;
88    s3d_CUtilStr m_ColorVarInfo;
89    s3d_CUtilAtomPtr m_ColorVarAtom;
90    int m_AlphaTestMode;
91    float m_AlphaRef;
92    s3d_CUtilStr m_LightArrayVarInfo;
93    s3d_CUtilAtomPtr m_LightArrayVarAtom;
94    s3d_CEngUtilMtlPtr m_Mtl;
95    bool m_UseVertexBoneWgh;
96    bool m_UseVertexBoneSubscr;
97    bool m_UseVertexPoint;
98    bool m_UseVertexNormal;
99    bool m_UseVertexColorAlpha;
100    s3d_CUtilStr m_ProgIdent, m_ProgInfo;
101    s3d_CUtilStr m_ProgParamInfo;
102    s3d_CUtilAtomPairArray m_ProgParamMapArray;
103    s3d_CUtilStr m_TexChanVarInfo;
104    s3d_CUtilAtomArray m_TexChanVarAtomArray;
105    s3d_CUtilStr m_AttrVarInfo;
106    s3d_CUtilAtomArray m_AttrVarAtomArray;
107    s3d_CUtilStr m_AttrMatVarInfo;
108    s3d_CUtilAtomArray m_AttrMatVarAtomArray;
109    s3d_CUtilStr m_MeshVarInfo;
110    s3d_CUtilAtomPtr m_MeshVarAtom;
111    s3d_CUtilAtomPtr m_InspAtom;
112
113        // GAMETOOLS: declare the name of the .mesh
114        s3d_CUtilStr m_LODMeshFileIdent, m_LODMeshFileInfo;
115
116    bool m_Dyn;
117};
118
119typedef s3d_CUtilPtr<s3d_CEngShaderStdPaintMeshData>
120        s3d_CEngShaderStdPaintMeshDataPtr;
121
122///////////////////////////////////////////////////////////////////////////////
123
124//@
125class s3d_CEngShaderStdPaintMesh
126    : public s3d_CEngShader,
127    public s3d_CCompUtilUniqueBase,
128    public s3d_CCompSetup
129{
130public:
131    S3D_UTIL_RTTI_TABLE_DECLARE
132
133    //@
134    s3d_CEngShaderStdPaintMesh();
135
136    //@
137    void SetupInit(
138            s3d_CUtilMsgHandler *MsgHandler, s3d_CUtilStr_cr Info,
139            s3d_CCompSuppl *FetchSuppl, s3d_CUtilSnkChunk *Param);
140
141    //@
142    void SetupDone();
143
144    //@
145    s3d_CUtilStr GetInfo();
146
147    //@
148    void RegisterNotif(s3d_CUtilNotifRecip *Recip);
149
150    //@
151    s3d_CEngShaderGfxPtr FindShaderGfx(
152            s3d_CUtilNotifGather *NotifGather,
153            s3d_CEngGfxCtx *GfxCtx);
154
155private:
156    s3d_CEngShaderEnvPtr m_ShaderEnv;
157    s3d_CEngShaderStdPaintMeshGfxTree m_ShaderGfxTree;
158    s3d_CEngShaderStdPaintMeshDataPtr m_Data;
159};
160
161//@
162typedef s3d_CUtilPtr<s3d_CEngShaderStdPaintMesh> s3d_CEngShaderStdPaintMeshPtr;
163
164///////////////////////////////////////////////////////////////////////////////
165
166//@
167class s3d_CEngShaderStdPaintMeshGfx: public s3d_CEngShaderGfx
168{
169public:
170    //@
171    s3d_CEngShaderStdPaintMeshGfx(
172            s3d_CEngShaderEnv *ShaderEnv,
173            s3d_CUtilNotifGather *NotifGather,
174            s3d_CEngGfxCtx *GfxCtx, s3d_CEngShaderStdPaintMeshData *Data);
175
176    //@
177    s3d_CEngShaderStdPaintMeshGfxTree::CNode *GetNode();
178   
179    //@
180    void RegisterNotif(s3d_CUtilNotifRecip *Recip);
181
182    //@
183    void ExtractGfx();
184
185    //@
186    bool IsValid();
187
188    //@
189    void LinkCollect(s3d_CUtilAtomSet &VarAtomSet);
190
191    //@
192    void LinkAppoint(s3d_CDrvVarDecl *VarDecl);
193
194    //@
195    s3d_CEngShaderInstPtr CreateShaderInst(
196            s3d_CEngShaderHead *Head);
197
198private:
199    s3d_CEngShaderStdPaintMeshGfxTree::CNode m_Node;
200    s3d_CEngShaderEnvPtr m_ShaderEnv;
201    s3d_CEngShaderStdPaintMeshDataPtr m_Data;
202   
203    // ShaderGfx-Data Variables:
204    s3d_CEngGfxProgPtr m_GfxProg;
205    s3d_CDrvVarSlotInit m_AlphaVarSlot;
206    s3d_CDrvVarSlotInit m_ColorVarSlot;
207    s3d_CDrvVarSlotInit m_LightArrayVarSlot;
208    s3d_CDrvVarSlotInit m_MeshVarSlot;
209    s3d_CDrvVarDeclPtr m_ProgParamDecl;
210    s3d_CDrvVarSlotArray m_TexChanVarSlotArray;
211    s3d_CDrvVarSlotArray m_AttrVarSlotArray;
212    s3d_CDrvVarSlotArray m_AttrMatVarSlotArray;
213
214    friend class s3d_CEngShaderStdPaintMeshInst;
215};
216
217//@
218typedef s3d_CUtilPtr<s3d_CEngShaderStdPaintMeshGfx>
219        s3d_CEngShaderStdPaintMeshGfxPtr;
220
221///////////////////////////////////////////////////////////////////////////////
222
223//@
224class s3d_CEngShaderStdPaintMeshInst
225    : public s3d_CEngShaderInst,
226    public s3d_CEngShaderExec
227{
228public:
229    //@
230    s3d_CEngShaderStdPaintMeshInst(
231            s3d_CEngShaderEnv *ShaderEnv,
232            s3d_CEngGfxCtx *GfxCtx, s3d_CEngShaderHead *Head,
233            s3d_CEngShaderStdPaintMeshGfx *ShaderGfx,
234            s3d_CEngGfxProg *GfxProg);
235
236    //@
237    void RegisterNotif(s3d_CUtilNotifRecip *Recip);
238
239    //@
240    void SetShaderCtx(s3d_CEngShaderCtx *ShaderCtx);
241
242    //@
243    void SetGfxState(s3d_CEngGfxState *GfxState);
244
245    //@
246    void SetPos(s3d_CEngPos *Pos);
247
248    //@
249    void SetModel(s3d_CEngModel *Model);
250
251    //@
252    void ArrangeCollect(
253            s3d_CUtilMemPool *MemPool,
254            s3d_CEngShaderScopeArray &ScopeArray);
255
256    //@
257    void ArrangeInit(
258            s3d_CUtilMemPool *MemPool,
259            s3d_CEngShaderScopeArray_cr ScopeArray);
260
261    //@
262    void ArrangePerform(
263            s3d_CUtilMemPool *MemPool,
264            s3d_CEngShaderScopeArray_cr ScopeArray);
265
266    //@
267    void ArrangeFeedback(
268            s3d_CUtilMemPool *MemPool,
269            s3d_CEngShaderScopeArray_cr ScopeArray);
270
271    //@
272    void ArrangeGather(
273            s3d_CEngShaderExecArray &ExecArray);
274
275    //@
276    void ShaderExecPerform(
277            s3d_CEngShaderScope *Scope,
278            s3d_CUtilAtom *Method,
279            s3d_CEngGfxTaskArray &TaskArray);
280
281    //@
282    void *GfxElemJobExec(
283        s3d_CEngShaderScope *Scope,
284        void *GfxMark);
285
286private:
287    s3d_CDrvGfxCharge *CreateChargeArray(
288            s3d_CUtilMemPool *MemPool, s3d_CEngShaderScope *Scope,
289            const s3d_CEngMeshData *MeshData, bool Quiet);
290
291    void ExecStatic(
292            s3d_CEngShaderScope *Scope, s3d_CDrvGfxEng *GfxEng);
293    void ExecDyn(
294            s3d_CEngShaderScope *Scope, s3d_CDrvGfxEng *GfxEng,
295            s3d_CUtilVec3f &Color, float &Alpha);
296    void ExecLighting(
297            s3d_CEngShaderScope *Scope, s3d_CDrvGfxEng *GfxEng,
298            float Alpha);
299
300    void ErrorNoBoneWghBank(
301            s3d_CUtilStr_cr Info, const s3d_CEngMeshData *MeshData);
302    void ErrorNoBoneSubscrBank(
303            s3d_CUtilStr_cr Info, const s3d_CEngMeshData *MeshData);
304    void ErrorNoPointBank(
305            s3d_CUtilStr_cr Info, const s3d_CEngMeshData *MeshData);
306    void ErrorNoNormalBank(
307            s3d_CUtilStr_cr Info, const s3d_CEngMeshData *MeshData);
308    void ErrorNoColorAlphaBank(
309            s3d_CUtilStr_cr Info, const s3d_CEngMeshData *MeshData);
310
311    s3d_CEngShaderEnvPtr m_ShaderEnv;
312    s3d_CEngGfxCtxPtr m_GfxCtx;
313   
314    s3d_CEngShaderStdPaintMeshGfxPtr m_ShaderGfx;
315    s3d_CEngShaderStdPaintMeshBatchKeyArray m_BatchArray;
316    s3d_CEngGfxProgPtr m_ProgGfx;
317
318        // GAMETOOLS
319        s3d_CEngGfxState *theGfxState;
320        Geometry::LodStripsLibrary *lodStrips;
321        Geometry::IndexData *geoIndexData;
322};
323
324//@
325typedef s3d_CUtilPtr<s3d_CEngShaderStdPaintMeshGfx>
326        s3d_CEngShaderStdPaintMeshGfxPtr;
327
328///////////////////////////////////////////////////////////////////////////////
329
330
331#endif
332
Note: See TracBrowser for help on using the repository browser.