source: GTP/trunk/App/Demos/Illum/Shark3D/version164x12u/IllumDemo/src/gtp_shader/gtp_shader_focusedprojmat.h @ 2196

Revision 2196, 5.6 KB checked in by szirmay, 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 GTP_SHADER_FOCUSEPROJMAT_H
17#define GTP_SHADER_FOCUSEDPROJMAT_H
18
19#include "../../interf/eng_shader.h"
20#include "../../interf/eng_shaderenv.h"
21#include "../../interf/eng_pos.h"
22#include "../../../comp/core/comp_setup.h"
23#include "../../../comp/util/comp_util_uniquebase.h"
24
25///////////////////////////////////////////////////////////////////////////////
26
27class gtp_Shader_FocusedProjMatGfx;
28
29//@
30typedef s3d_CUtilKeyEntry<s3d_CEngGfxCtxPtr, gtp_Shader_FocusedProjMatGfx*>
31        gtp_Shader_FocusedProjMatGfxEntry;
32
33//@
34typedef s3d_CUtilTree<gtp_Shader_FocusedProjMatGfxEntry>
35        gtp_Shader_FocusedProjMatGfxTree;
36
37///////////////////////////////////////////////////////////////////////////////
38
39struct gtp_Shader_FocusedProjMatData: s3d_CUtilPtrBase
40{
41    s3d_CUtilStr m_Info;
42    s3d_CUtilAtomArray m_MethodArray;
43    s3d_CUtilStr m_FocusedProjMatVarInfo;
44    s3d_CUtilAtomPtr m_FocusedProjMatVarAtom;
45        s3d_CUtilStr m_CenterPointVarInfo;
46    s3d_CUtilAtomPtr m_CenterPointVarAtom;     
47        s3d_CUtilStr m_MeshVarInfo;
48    s3d_CUtilAtomPtr m_MeshVarAtom;
49   
50};
51
52typedef s3d_CUtilPtr<gtp_Shader_FocusedProjMatData>
53        gtp_Shader_FocusedProjMatDataPtr;
54
55///////////////////////////////////////////////////////////////////////////////
56
57//@
58class gtp_Shader_FocusedProjMat
59    : public s3d_CEngShader,
60    public s3d_CCompUtilUniqueBase,
61    public s3d_CCompSetup
62{
63public:
64    S3D_UTIL_RTTI_TABLE_DECLARE
65
66    //@
67    gtp_Shader_FocusedProjMat();
68
69    //@
70    void SetupInit(
71            s3d_CUtilMsgHandler *MsgHandler, s3d_CUtilStr_cr Info,
72            s3d_CCompSuppl *FetchSuppl, s3d_CUtilSnkChunk *Param);
73
74    //@
75    void SetupDone();
76
77    //@
78    s3d_CUtilStr GetInfo();
79
80    //@
81    void RegisterNotif(s3d_CUtilNotifRecip *Recip);
82
83    //@
84    s3d_CEngShaderGfxPtr FindShaderGfx(
85            s3d_CUtilNotifGather *NotifGather, s3d_CEngGfxCtx *GfxCtx);
86
87private:
88    s3d_CEngShaderEnvPtr m_ShaderEnv;
89    gtp_Shader_FocusedProjMatGfxTree m_ShaderGfxTree;
90    gtp_Shader_FocusedProjMatDataPtr m_Data;
91};
92
93//@
94typedef s3d_CUtilPtr<gtp_Shader_FocusedProjMat>
95        gtp_Shader_FocusedProjMatPtr;
96
97///////////////////////////////////////////////////////////////////////////////
98
99//@
100class gtp_Shader_FocusedProjMatGfx: public s3d_CEngShaderGfx
101{
102public:
103    //@
104    gtp_Shader_FocusedProjMatGfx(
105            s3d_CEngShaderEnv *ShaderEnv, s3d_CEngGfxCtx *GfxCtx,
106            gtp_Shader_FocusedProjMatData *Data);
107
108    //@
109    gtp_Shader_FocusedProjMatGfxTree::CNode *GetNode();
110
111    //@
112    void RegisterNotif(s3d_CUtilNotifRecip *Recip);
113
114    //@
115    void ExtractGfx();
116
117    //@
118    bool IsValid();
119
120    //@
121    void LinkCollect(s3d_CUtilAtomSet &VarAtomSet);
122
123    //@
124    void LinkAppoint(s3d_CDrvVarDecl *VarDecl);
125
126    //@
127    s3d_CEngShaderInstPtr CreateShaderInst(
128            s3d_CEngShaderHead *Head);
129
130private:
131    gtp_Shader_FocusedProjMatGfxTree::CNode m_Node;
132    s3d_CEngShaderEnvPtr m_ShaderEnv;
133    gtp_Shader_FocusedProjMatDataPtr m_Data;
134
135    // ShaderGfx-Data Variables:
136    s3d_CDrvVarSlotInit m_FocusedProjMatVarSlot;
137        s3d_CDrvVarSlotInit m_CenterPointVarSlot;
138        s3d_CDrvVarSlotInit m_MeshVarSlot;
139   
140    friend class gtp_Shader_FocusedProjMatInst;
141};
142
143//@
144typedef s3d_CUtilPtr<gtp_Shader_FocusedProjMatGfx>
145        gtp_Shader_FocusedProjMatGfxPtr;
146
147///////////////////////////////////////////////////////////////////////////////
148
149//@
150class gtp_Shader_FocusedProjMatInst
151    : public s3d_CEngShaderInst,
152    public s3d_CEngShaderExec
153{
154public:
155    //@
156    gtp_Shader_FocusedProjMatInst(
157            s3d_CEngShaderEnv *ShaderEnv,
158            gtp_Shader_FocusedProjMatGfx *ShaderGfx);
159
160    //@
161    void RegisterNotif(s3d_CUtilNotifRecip *Recip);
162
163    //@
164    void SetShaderCtx(s3d_CEngShaderCtx *ShaderCtx);
165
166    //@
167    void SetGfxState(s3d_CEngGfxState *GfxState);
168
169    //@
170    void SetPos(s3d_CEngPos *Pos);
171
172    //@
173    void SetModel(s3d_CEngModel *Model);
174
175    //@
176    void ArrangeCollect(
177            s3d_CUtilMemPool *MemPool,
178            s3d_CEngShaderScopeArray &ScopeArray);
179
180    //@
181    void ArrangeInit(
182            s3d_CUtilMemPool *MemPool,
183            s3d_CEngShaderScopeArray_cr ScopeArray);
184
185    //@
186    void ArrangePerform(
187            s3d_CUtilMemPool *MemPool,
188            s3d_CEngShaderScopeArray_cr ScopeArray);
189
190    //@
191    void ArrangeFeedback(
192            s3d_CUtilMemPool *MemPool,
193            s3d_CEngShaderScopeArray_cr ScopeArray);
194
195    //@
196    void ArrangeGather(
197            s3d_CEngShaderExecArray &ExecArray);
198
199    //@
200    void ShaderExecPerform(
201            s3d_CEngShaderScope *Scope,
202            s3d_CUtilAtom *Method,
203            s3d_CEngGfxTaskArray &TaskArray);
204
205private:
206    s3d_CEngShaderEnvPtr m_ShaderEnv;
207    gtp_Shader_FocusedProjMatGfxPtr m_ShaderGfx;
208    s3d_CEngPosPtr m_Pos;
209
210    void SetVars(
211            s3d_CUtilMemPool *MemPool, s3d_CEngShaderScope *Scope);
212};
213
214//@
215typedef s3d_CUtilPtr<gtp_Shader_FocusedProjMatInst>
216        gtp_Shader_FocusedProjMatInstPtr;
217
218///////////////////////////////////////////////////////////////////////////////
219
220#endif
Note: See TracBrowser for help on using the repository browser.