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

Revision 2196, 8.0 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#include "gtp_shader_mainenum.h"
17#include "../../util/eng_util_gfxutil.h"
18#include "../../util/eng_util_shaderutil.h"
19#include "../../util/eng_util_mathutil.h"
20#include "../../../drv/interf/drv_vartypes.h"
21#include "../../../drv/util/drv_util_varutil.h"
22#include "../../../util/snk/util_snk_extractutil.h"
23#include "../../../util/math/util_geo_types.h"
24
25///////////////////////////////////////////////////////////////////////////////
26/*@{
27
28@declare{shadercomp.class}{eng_shader_special.worldmat}{}
29
30Provides a matrix which maps from view coordinates
31in world coordinates.
32@p
33
34Important warning!
35Usually, if you need this matrix something is wrong!
36See @ref{prog_man.shader.coord_systems}.
37@p
38
39@}*/
40///////////////////////////////////////////////////////////////////////////////
41
42S3D_UTIL_RTTI_TABLE_DEFINE_BEGIN(gtp_Shader_MainEnum)
43S3D_UTIL_RTTI_TABLE_DEFINE_BASE(s3d_CEngShader)
44S3D_UTIL_RTTI_TABLE_DEFINE_BASE(s3d_CCompUtilUniqueBase)
45S3D_UTIL_RTTI_TABLE_DEFINE_BASE(s3d_CCompSetup)
46S3D_UTIL_RTTI_TABLE_DEFINE_END
47
48gtp_Shader_MainEnum::gtp_Shader_MainEnum()
49{
50}
51
52void gtp_Shader_MainEnum::SetupInit(
53        s3d_CUtilMsgHandler *MsgHandler, s3d_CUtilStr_cr Info,
54        s3d_CCompSuppl *FetchSuppl, s3d_CUtilSnkChunk *Param)
55{
56    m_Data = S3D_SYS_NEW gtp_Shader_MainEnumData;
57
58    s3d_CUtilSnkExtract SnkExtract;
59    SnkExtract.Assign(MsgHandler, Param);
60    m_Data->m_Info = SnkExtract.GetInfo();
61
62    /*@{ @declare{shadercomp.param}{eng_shader_special.worldmat.env}{$ [str]}
63        See @ident{comp}{eng_shader_std.group.env}.
64    @}*/
65    s3d_CUtilStr EnvIdent, EnvInfo;
66    SnkExtract.ExtractStr(EnvInfo, EnvIdent, "env", true);
67
68    m_ShaderEnv = s3d_CompSupplObjT<s3d_CEngShaderEnv>(
69            MsgHandler, EnvInfo, FetchSuppl,
70            EnvIdent, S3D_GENERAL_INTEROP_INTERF);
71    if(!m_ShaderEnv)
72        return;
73
74    /*@{ @declare{shadercomp.param}{eng_shader_special.worldmat.methods}
75            {$ [str] .. [str]}
76        See @ref{prog_man.shader.methods}.
77    @}*/
78    s3d_CUtilSnkExtractUtil::ExtractAtomSortedArray(
79            m_Data->m_MethodArray, m_ShaderEnv->m_AtomMgr,
80            SnkExtract, "methods", true);
81
82    /*@{ @declare{shadercomp.param}
83            {eng_shader_special.worldmat.worldmat_var}{$ [str]}
84        The variable stores the resulting matrix.
85        The variable is of type mat4x4f.
86    @}*/
87    s3d_CUtilSnkExtractUtil::ExtractAtom(
88            m_Data->m_MainEnumVarInfo, m_Data->m_MainEnumVarAtom,
89            m_ShaderEnv->m_AtomMgr, SnkExtract, "coll_var", true);     
90
91    SnkExtract.CheckForUnknown();
92}
93
94void gtp_Shader_MainEnum::SetupDone()
95{
96}
97
98s3d_CUtilStr gtp_Shader_MainEnum::GetInfo()
99{
100    return m_Data->m_Info;
101}
102
103void gtp_Shader_MainEnum::RegisterNotif(s3d_CUtilNotifRecip *Recip)
104{
105}
106
107s3d_CEngShaderGfxPtr gtp_Shader_MainEnum::FindShaderGfx(
108        s3d_CUtilNotifGather *NotifGather, s3d_CEngGfxCtx *GfxCtx)
109{
110    if(!m_ShaderEnv)
111        return 0;
112
113    gtp_Shader_MainEnumGfxPtr ShaderGfx;
114
115    gtp_Shader_MainEnumGfxTree::CNode *Pos
116            = s3d_UtilTreeSortedGetStart(m_ShaderGfxTree, GfxCtx);
117    if(s3d_UtilTreeIsEqualAt(Pos, GfxCtx))
118        ShaderGfx = Pos->m_Data.m_Val;
119    else
120    {
121        ShaderGfx = S3D_SYS_NEW gtp_Shader_MainEnumGfx(
122                m_ShaderEnv, GfxCtx, m_Data);
123        gtp_Shader_MainEnumGfxTree::CNode *Node
124                = ShaderGfx->GetNode();
125        m_ShaderGfxTree.InsertBefore(Pos, Node);
126    }
127    return ShaderGfx.Get();
128}
129
130///////////////////////////////////////////////////////////////////////////////
131
132gtp_Shader_MainEnumGfx::gtp_Shader_MainEnumGfx(
133        s3d_CEngShaderEnv *ShaderEnv, s3d_CEngGfxCtx *GfxCtx,
134        gtp_Shader_MainEnumData *Data)
135{
136    m_Node.m_Data.m_Key = GfxCtx;
137    m_Node.m_Data.m_Val = this;
138    m_ShaderEnv = ShaderEnv;
139    m_Data = Data;
140}
141
142gtp_Shader_MainEnumGfxTree::CNode *
143        gtp_Shader_MainEnumGfx::GetNode()
144{
145    return &m_Node;
146}
147
148void gtp_Shader_MainEnumGfx::RegisterNotif(
149        s3d_CUtilNotifRecip *Recip)
150{
151}
152
153void gtp_Shader_MainEnumGfx::ExtractGfx()
154{
155    m_Node.Extract();
156}
157
158bool gtp_Shader_MainEnumGfx::IsValid()
159{
160    return true;
161}
162
163void gtp_Shader_MainEnumGfx::LinkCollect(
164        s3d_CUtilAtomSet &VarAtomSet)
165{
166    s3d_CDrvUtilVarUtil::LinkCollect(
167            VarAtomSet, m_Data->m_MainEnumVarAtom);
168}
169
170void gtp_Shader_MainEnumGfx::LinkAppoint(
171        s3d_CDrvVarDecl *VarDecl)
172{
173    s3d_CDrvUtilVarUtil::LinkAppoint(
174            m_MainEnumVarSlot.m_Val,
175            VarDecl, m_Data->m_MainEnumVarAtom);
176}
177
178s3d_CEngShaderInstPtr gtp_Shader_MainEnumGfx::CreateShaderInst(
179        s3d_CEngShaderHead *Head)
180{
181    return S3D_SYS_NEW gtp_Shader_MainEnumInst(
182            m_ShaderEnv, this);
183}
184
185///////////////////////////////////////////////////////////////////////////////
186
187gtp_Shader_MainEnumInst::gtp_Shader_MainEnumInst(
188        s3d_CEngShaderEnv *ShaderEnv,
189        gtp_Shader_MainEnumGfx *ShaderGfx)
190{
191    m_ShaderEnv = ShaderEnv;
192    m_ShaderGfx = ShaderGfx;
193}
194
195void gtp_Shader_MainEnumInst::RegisterNotif(
196        s3d_CUtilNotifRecip *Recip)
197{
198}
199
200void gtp_Shader_MainEnumInst::SetShaderCtx(
201        s3d_CEngShaderCtx *ShaderCtx)
202{
203}
204
205void gtp_Shader_MainEnumInst::SetGfxState(s3d_CEngGfxState *GfxState)
206{
207}
208
209void gtp_Shader_MainEnumInst::SetPos(s3d_CEngPos *Pos)
210{
211    m_Pos = Pos;
212}
213
214void gtp_Shader_MainEnumInst::SetModel(s3d_CEngModel *Model)
215{
216}
217
218void gtp_Shader_MainEnumInst::ArrangeCollect(
219        s3d_CUtilMemPool *MemPool,
220        s3d_CEngShaderScopeArray &ScopeArray)
221{
222}
223
224void gtp_Shader_MainEnumInst::ArrangeInit(
225        s3d_CUtilMemPool *MemPool,
226        s3d_CEngShaderScopeArray_cr ScopeArray)
227{
228    s3d_CSysIntps nScope = ScopeArray.GetCnt();
229    s3d_CSysIntps iScope;
230    for(iScope = 0; iScope < nScope; iScope++)
231    {
232        s3d_CEngShaderScope *Scope = ScopeArray.GetAt(iScope);
233        SetVars(MemPool, Scope);
234    }
235}
236
237void gtp_Shader_MainEnumInst::ArrangePerform(
238        s3d_CUtilMemPool *MemPool,
239        s3d_CEngShaderScopeArray_cr ScopeArray)
240{
241}
242
243void gtp_Shader_MainEnumInst::ArrangeFeedback(
244        s3d_CUtilMemPool *MemPool,
245        s3d_CEngShaderScopeArray_cr ScopeArray)
246{
247}
248
249void gtp_Shader_MainEnumInst::ArrangeGather(
250        s3d_CEngShaderExecArray &ExecArray)
251{
252    gtp_Shader_MainEnumData *Data = m_ShaderGfx->m_Data;
253
254    s3d_CEngUtilShaderUtil::ArrangeGather(
255            ExecArray, Data->m_MethodArray, this);
256}
257
258void gtp_Shader_MainEnumInst::ShaderExecPerform(
259        s3d_CEngShaderScope *Scope,
260        s3d_CUtilAtom *Method,
261        s3d_CEngGfxTaskArray &TaskArray)
262{
263    SetVars(m_ShaderEnv->m_MemPool, Scope);
264}
265
266void gtp_Shader_MainEnumInst::SetVars(
267        s3d_CUtilMemPool *MemPool, s3d_CEngShaderScope *Scope)
268{
269    gtp_Shader_MainEnumGfx *ShaderGfx = m_ShaderGfx;
270    gtp_Shader_MainEnumData *Data = ShaderGfx->m_Data;
271
272    s3d_CDrvVarSlot MainEnumVarSlot = ShaderGfx->m_MainEnumVarSlot;
273    if(MainEnumVarSlot >= 0)
274    {
275        s3d_CEngGfxPortion *Portion = Scope->m_Portion;
276                if(Portion)
277                {
278                        s3d_CEngGfxVarColl *MainEnumVar = new(MemPool) s3d_CEngGfxVarColl;
279                        MainEnumVar->m_Val.m_GfxElemArray.Reset();
280                        int size = Portion->m_VisibleGfxElemArrayMain.GetCntInt();
281                        for(int i = 0; i< size ; i++)
282               MainEnumVar->m_Val.m_GfxElemArray.InsertBack(
283                                        MemPool,Portion->m_VisibleGfxElemArrayMain[i]);
284                        s3d_DrvVarSet(Scope->m_VarBlk, MainEnumVarSlot, MainEnumVar);
285                }
286    }
287}
288
289///////////////////////////////////////////////////////////////////////////////
290
Note: See TracBrowser for help on using the repository browser.