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

Revision 2196, 7.4 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_CUBETEXFILTER_H
17#define GTP_SHADER_CUBETEXFILTER_H
18
19#include "../../interf/eng_gfxvar.h"
20#include "../../interf/eng_shader.h"
21#include "../../interf/eng_shaderenv.h"
22#include "../../util/eng_util_shaderdest.h"
23#include "../../util/eng_util_shaderexec.h"
24#include "../../../comp/core/comp_setup.h"
25#include "../../../comp/util/comp_util_uniquebase.h"
26#include "../../../util/mempool/util_mempool_array_types.h"
27
28///////////////////////////////////////////////////////////////////////////////
29
30struct gtp_Shader_CubeTexFilterDestGfx
31{
32    s3d_CDrvVarSlot m_FromVarSlot;
33    s3d_CDrvVarSlot m_ToVarSlot;
34    int m_TexProp;
35};
36
37typedef s3d_CUtilArray<gtp_Shader_CubeTexFilterDestGfx>
38        gtp_Shader_CubeTexFilterDestGfxArray;
39
40typedef const gtp_Shader_CubeTexFilterDestGfxArray &
41        gtp_Shader_CubeTexFilterDestGfxArray_cr;
42
43///////////////////////////////////////////////////////////////////////////////
44
45class gtp_Shader_CubeTexFilterGfx;
46
47//@
48typedef s3d_CUtilKeyEntry<s3d_CEngGfxCtxPtr, gtp_Shader_CubeTexFilterGfx*>
49        gtp_Shader_CubeTexFilterGfxEntry;
50
51//@
52typedef s3d_CUtilTree<gtp_Shader_CubeTexFilterGfxEntry>
53        gtp_Shader_CubeTexFilterGfxTree;
54
55///////////////////////////////////////////////////////////////////////////////
56
57struct gtp_Shader_CubeTexFilterData: s3d_CUtilPtrBase
58{
59    s3d_CUtilStr m_Info;
60    s3d_CUtilAtomArray m_MethodArray;
61    s3d_CUtilStr m_RankInfo;
62    int m_Rank;
63    int m_IterStart;
64    int m_IterEnd;
65    int m_IterStep;
66    float m_IterWidthScale;
67    float m_IterHeightScale;
68    int m_DestProp;
69    float m_WidthScale;
70    float m_HeightScale;
71    s3d_CUtilStr m_TaskInfoVarInfo;
72    s3d_CUtilAtomPtr m_TaskInfoVarAtom;
73    s3d_CUtilStr m_SrcVarInfo;
74    s3d_CUtilAtomArray m_SrcVarAtomArray;
75    s3d_CEngUtilShaderDest m_Dest;
76    s3d_CUtilStr m_ProgInfo;
77    s3d_CUtilStr m_ProgIdent;
78    s3d_CUtilStr m_ProgParamInfo;
79    s3d_CUtilAtomPairArray m_ProgParamMapArray;
80
81        int m_UpdateInterval;
82        int m_StartFrame;
83        bool m_UpdateAllFace;   
84};
85
86typedef s3d_CUtilPtr<gtp_Shader_CubeTexFilterData>
87        gtp_Shader_CubeTexFilterDataPtr;
88
89///////////////////////////////////////////////////////////////////////////////
90
91//@
92class gtp_Shader_CubeTexFilter
93    : public s3d_CEngShader,
94    public s3d_CCompUtilUniqueBase,
95    public s3d_CCompSetup
96{
97public:
98    S3D_UTIL_RTTI_TABLE_DECLARE
99
100    //@
101    gtp_Shader_CubeTexFilter();
102
103    //@
104    void SetupInit(
105            s3d_CUtilMsgHandler *MsgHandler, s3d_CUtilStr_cr Info,
106            s3d_CCompSuppl *FetchSuppl, s3d_CUtilSnkChunk *Param);
107
108    //@
109    void SetupDone();
110
111    //@
112    s3d_CUtilStr GetInfo();
113
114    //@
115    void RegisterNotif(s3d_CUtilNotifRecip *Recip);
116
117    //@
118    s3d_CEngShaderGfxPtr FindShaderGfx(
119            s3d_CUtilNotifGather *NotifGather, s3d_CEngGfxCtx *GfxCtx);
120
121private:
122    s3d_CEngShaderEnvPtr m_ShaderEnv;
123    gtp_Shader_CubeTexFilterGfxTree m_ShaderGfxTree;
124    gtp_Shader_CubeTexFilterDataPtr m_Data;
125
126    friend class gtp_Shader_CubeTexFilterGfx;
127    friend class gtp_Shader_CubeTexFilterInst;
128};
129
130//@
131typedef s3d_CUtilPtr<gtp_Shader_CubeTexFilter>
132        gtp_Shader_CubeTexFilterPtr;
133
134///////////////////////////////////////////////////////////////////////////////
135
136//@
137class gtp_Shader_CubeTexFilterGfx: public s3d_CEngShaderGfx
138{
139public:
140    //@
141    gtp_Shader_CubeTexFilterGfx(
142            s3d_CEngShaderEnv *ShaderEnv,
143            s3d_CUtilNotifGather *NotifGather,
144            s3d_CEngGfxCtx *GfxCtx,
145            gtp_Shader_CubeTexFilterData *Data);
146
147    //@
148    gtp_Shader_CubeTexFilterGfxTree::CNode *GetNode();
149
150    //@
151    void RegisterNotif(s3d_CUtilNotifRecip *Recip);
152
153    //@
154    void ExtractGfx();
155
156    //@
157    bool IsValid();
158
159    //@
160    void LinkCollect(s3d_CUtilAtomSet &VarAtomSet);
161
162    //@
163    void LinkAppoint(s3d_CDrvVarDecl *VarDecl);
164
165    //@
166    s3d_CEngShaderInstPtr CreateShaderInst(
167            s3d_CEngShaderHead *Head);
168
169private:
170    gtp_Shader_CubeTexFilterGfxTree::CNode m_Node;
171    s3d_CEngShaderEnvPtr m_ShaderEnv;
172    gtp_Shader_CubeTexFilterDataPtr m_Data;
173
174    // ShaderGfx-Data Variables:
175    s3d_CEngGfxProgPtr m_GfxProg;
176    s3d_CDrvVarSlotArray m_SrcVarSlotArray;
177    s3d_CEngUtilShaderDestGfx m_FilterDestGfx;
178    s3d_CDrvVarSlotInit m_TaskInfoVarSlot;
179    s3d_CDrvVarDeclPtr m_ProgParamDecl;
180
181    friend class gtp_Shader_CubeTexFilterInst;
182};
183
184//@
185typedef s3d_CUtilPtr<gtp_Shader_CubeTexFilterGfx>
186        gtp_Shader_CubeTexFilterGfxPtr;
187
188///////////////////////////////////////////////////////////////////////////////
189
190//@
191
192class gtp_Shader_CubeTexFilterInst
193    : public s3d_CEngShaderInst,
194    public s3d_CEngShaderExec
195{
196public:
197    //@
198    gtp_Shader_CubeTexFilterInst(
199            s3d_CEngShaderEnv *ShaderEnv,
200            s3d_CEngGfxCtx *GfxCtx,
201            gtp_Shader_CubeTexFilterGfx *ShaderGfx,
202            s3d_CEngGfxProg *GfxProg);
203
204    //@
205    void RegisterNotif(s3d_CUtilNotifRecip *Recip);
206
207    //@
208    void SetShaderCtx(s3d_CEngShaderCtx *ShaderCtx);
209
210    //@
211    void SetGfxState(s3d_CEngGfxState *GfxState);
212
213    //@
214    void SetPos(s3d_CEngPos *Pos);
215
216    //@
217    void SetModel(s3d_CEngModel *Model);
218
219    //@
220    void ArrangeCollect(
221            s3d_CUtilMemPool *MemPool,
222            s3d_CEngShaderScopeArray &ScopeArray);
223
224    //@
225    void ArrangeInit(
226            s3d_CUtilMemPool *MemPool,
227            s3d_CEngShaderScopeArray_cr ScopeArray);
228
229    //@
230    void ArrangePerform(
231            s3d_CUtilMemPool *MemPool,
232            s3d_CEngShaderScopeArray_cr ScopeArray);
233
234    //@
235    void ArrangeFeedback(
236            s3d_CUtilMemPool *MemPool,
237            s3d_CEngShaderScopeArray_cr ScopeArray);
238
239    //@
240    void ArrangeGather(
241            s3d_CEngShaderExecArray &ExecArray);
242
243    //@
244    void ShaderExecPerform(
245            s3d_CEngShaderScope *Scope,
246            s3d_CUtilAtom *Method,
247            s3d_CEngGfxTaskArray &TaskArray);
248
249    //@
250    void *GfxElemJobExec(
251            s3d_CEngShaderScope *Scope,
252            void *GfxMark);
253
254private:
255    int m_FrameCount;
256    int m_CurrentFace;
257           
258        s3d_CEngShaderEnvPtr m_ShaderEnv;
259    s3d_CEngGfxCtxPtr m_GfxCtx;
260    gtp_Shader_CubeTexFilterGfxPtr m_ShaderGfx;
261    s3d_CEngGfxProgPtr m_GfxProg;
262
263    void Iteration(
264            s3d_CEngShaderScope *Scope, int Iter,
265            int DestProp, float WantWidth, float WantHeight);
266
267       
268    void FetchSrcArray(
269            s3d_CUtilMemPool *MemPool, s3d_CEngShaderScope *Scope,
270            const s3d_CSysChar *Info,
271            s3d_CEngGfxVarTexChanArray &FilterSrcTexArray,
272            s3d_CDrvVarSlotArray &SrcVarSlotArray);
273
274    void CalcSrcTexSize(
275            s3d_CUtilMemPool *MemPool, s3d_CEngShaderScope *Scope,
276            s3d_CDrvGfxEng *GfxEng, int &Width, int &Height,
277            s3d_CEngGfxVarTexChanArray &FilterSrcTexArray);
278};
279
280///////////////////////////////////////////////////////////////////////////////
281
282#endif
Note: See TracBrowser for help on using the repository browser.