source: GTP/trunk/App/Demos/Geom/Shark3D/src/shark_mesh_loader/shark_mesh_loader_model.h @ 2236

Revision 2236, 17.2 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_SHARK_MESH_LOADER_MODEL_H
17#define S3D_SHARK_MESH_LOADER_MODEL_H
18
19#include "../../interf/eng_model.h"
20#include "../../../comp/core/comp_setup.h"
21#include "../../../comp/core/comp_module.h"
22#include "../../../comp/util/comp_util_serutil.h"
23#include "../../../comp/util/comp_util_uniquebase.h"
24
25#include <GeoLodLibraryDLL.h>
26
27
28///////////////////////////////////////////////////////////////////////////////
29
30typedef s3d_CSysInt32u s3d_CSharkMeshLoaderIdx;
31
32typedef s3d_CDrvInt32uX4 s3d_CSharkMeshLoaderSubscr;
33
34///////////////////////////////////////////////////////////////////////////////
35
36class s3d_CSharkMeshLoaderLoader: public virtual s3d_CUtilEyeBase
37{
38public:
39    virtual void LoaderPerform() = 0;
40};
41
42typedef s3d_CUtilEye<s3d_CSharkMeshLoaderLoader> s3d_CSharkMeshLoaderLoaderEye;
43
44///////////////////////////////////////////////////////////////////////////////
45
46class s3d_CSharkMeshLoaderChanged: public virtual s3d_CUtilEyeBase
47{
48public:
49    virtual void ChangedPerform() = 0;
50};
51
52typedef s3d_CUtilEye<s3d_CSharkMeshLoaderChanged> s3d_CSharkMeshLoaderChangedEye;
53
54///////////////////////////////////////////////////////////////////////////////
55
56template<typename T>
57struct s3d_CSharkMeshLoaderBank
58        : public s3d_CUtilPtrBase,
59        public s3d_CDrvBank
60{
61    s3d_CSysIntps m_Cnt;
62    s3d_CUtilOwnArray<T> m_Data;
63    s3d_CSharkMeshLoaderLoaderEye m_Loader;
64
65    void Fetch(
66            s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
67            s3d_CDrvBankContent &BankContent);
68    s3d_CUtilPtrBase *GetOwner(
69            s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info);
70};
71
72///////////////////////////////////////////////////////////////////////////////
73
74typedef s3d_CSharkMeshLoaderBank<s3d_CUtilVec2f> s3d_CSharkMeshLoaderBankVec2f;
75typedef s3d_CUtilPtr<s3d_CSharkMeshLoaderBankVec2f> s3d_CSharkMeshLoaderBankVec2fPtr;
76
77typedef s3d_CSharkMeshLoaderBank<s3d_CUtilVec3f> s3d_CSharkMeshLoaderBankVec3f;
78typedef s3d_CUtilPtr<s3d_CSharkMeshLoaderBankVec3f> s3d_CSharkMeshLoaderBankVec3fPtr;
79
80typedef s3d_CSharkMeshLoaderBank<s3d_CUtilVec4f> s3d_CSharkMeshLoaderBankVec4f;
81typedef s3d_CUtilPtr<s3d_CSharkMeshLoaderBankVec4f> s3d_CSharkMeshLoaderBankVec4fPtr;
82
83typedef s3d_CSharkMeshLoaderBank<s3d_CSharkMeshLoaderIdx> s3d_CSharkMeshLoaderBankMeshIdx;
84typedef s3d_CUtilPtr<s3d_CSharkMeshLoaderBankMeshIdx>
85        s3d_CSharkMeshLoaderBankMeshIdxPtr;
86
87typedef s3d_CSharkMeshLoaderBank<s3d_CUtilVec4f> s3d_CSharkMeshLoaderBankBoneWgh;
88typedef s3d_CUtilPtr<s3d_CSharkMeshLoaderBankBoneWgh>
89        s3d_CSharkMeshLoaderBankBoneWghPtr;
90
91typedef s3d_CSharkMeshLoaderBank<s3d_CSharkMeshLoaderSubscr>
92        s3d_CSharkMeshLoaderBankBoneSubscr;
93typedef s3d_CUtilPtr<s3d_CSharkMeshLoaderBankBoneSubscr>
94        s3d_CSharkMeshLoaderBankBoneSubscrPtr;
95
96typedef s3d_CSharkMeshLoaderBank<s3d_CDrvMeshPacket> s3d_CSharkMeshLoaderBankPacket;
97typedef s3d_CUtilPtr<s3d_CSharkMeshLoaderBankPacket>
98        s3d_CSharkMeshLoaderBankPacketPtr;
99
100///////////////////////////////////////////////////////////////////////////////
101
102struct s3d_CSharkMeshLoaderAttr
103{
104    // Cnt = m_FrmCnt * m_VertCnt:
105    s3d_CDrvSigPtr m_BankSig;
106    s3d_CSharkMeshLoaderBankVec2fPtr m_Bank;
107};
108
109///////////////////////////////////////////////////////////////////////////////
110
111struct s3d_CSharkMeshLoaderTopol
112{
113    s3d_CDrvSigPtr m_TopolSig;
114
115    s3d_CUtilInitInt m_VertCnt;
116    s3d_CUtilInitInt m_VertEssCnt;
117
118    s3d_CUtilInitInt m_IdxCnt;
119    s3d_CUtilInitInt m_IdxEssCnt;
120
121    s3d_CUtilInitInt m_BoneIdxCnt;
122    s3d_CUtilInitInt m_BoneIdxEssCnt;
123
124    s3d_CUtilInitInt m_PacketCnt;
125    s3d_CUtilInitInt m_FamilyCnt;
126
127    s3d_CUtilInitBool m_Closed;
128    s3d_CUtilInitBool m_Sealed;
129
130    // Cnt = m_FamilyCnt
131    s3d_CUtilOwnArray<s3d_CEngMeshFamily> m_FamilyArray;
132
133    // Cnt = m_PacketCnt
134    s3d_CSharkMeshLoaderBankPacketPtr m_PacketBank;
135
136    // Cnt = m_BoneIdxCnt
137    s3d_CSharkMeshLoaderBankMeshIdxPtr m_BoneIdxBank;
138
139    // Cnt = m_IdxCnt
140    s3d_CSharkMeshLoaderBankMeshIdxPtr m_IdxBank;
141    // Cnt = m_IdxCnt
142    s3d_CSharkMeshLoaderBankMeshIdxPtr m_OppBank;
143    // Cnt = m_IdxEssCnt
144    s3d_CSharkMeshLoaderBankMeshIdxPtr m_NeighBank;
145};
146
147///////////////////////////////////////////////////////////////////////////////
148/*
149class s3d_CSharkMeshLoaderVariant
150        : public s3d_CUtilPtrBase,
151        public s3d_CSharkMeshLoaderLoader
152{
153public:
154    s3d_CSharkMeshLoaderVariant(
155            s3d_CUtilMsgHandler *MsgHandler, s3d_CUtilStr_cr Info,
156            bool Bare,
157            s3d_CUtilAtomMgr *AtomMgr, s3d_CCompResMgr *ResMgr,
158            s3d_CUtilStr_cr ResName, s3d_CSharkMeshLoaderChanged *Changed);
159    ~s3d_CSharkMeshLoaderVariant();
160
161    void GetMeshComposBase(
162            s3d_CUtilMemPool *MemPool, s3d_CUtilAtom *Usage,
163            s3d_CEngMeshCompos &MeshCompos);
164    void GetMeshComposFull(
165            s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
166            s3d_CUtilMemPool *MemPool, s3d_CUtilAtom *Usage,
167            s3d_CEngModelCtx *ModelCtx,
168            bool NeedMeshData,
169            s3d_CEngMeshCompos &MeshCompos);
170    s3d_CEngGeoData *GetGeoData(
171            s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
172            s3d_CUtilMemPool *MemPool, s3d_CUtilAtom *Usage);
173
174    void Reduce();
175
176private:
177    s3d_CUtilMsgHandlerPtr m_MsgHandler;
178    s3d_CUtilStr m_Info;
179    bool m_Bare;
180    s3d_CUtilAtomMgrPtr m_AtomMgr;
181    s3d_CCompResMgrPtr m_ResMgr;
182    s3d_CUtilStr m_ResName;
183    s3d_CSharkMeshLoaderChangedEye m_Changed;
184
185    s3d_CUtilNotifRecipObj<s3d_CSharkMeshLoaderVariant> m_NotifRecip;
186    bool m_Loaded;
187    bool m_Reduced;
188
189    // Data:
190
191    s3d_CDrvSigPtr m_VariantSig;
192
193    s3d_CSharkMeshLoaderTopol m_Topol;
194
195    s3d_CUtilInitInt m_TexLayerCnt;
196    // Cnt = m_TexLayerCnt * m_FamilyCnt
197    s3d_CUtilOwnArray<int> m_TexIdxArray;
198    // Cnt = m_TexLayerCnt * m_FamilyCnt
199    s3d_CUtilOwnArray<int> m_SampModeArray;
200
201    s3d_CUtilInitInt m_FrmCnt;
202    // Cnt = m_FrmCnt
203    s3d_CUtilOwnArray<float> m_KeyArray;
204
205    s3d_CDrvSigPtr m_BoneWghBankSig;
206    // Cnt = m_VertCnt
207    s3d_CSharkMeshLoaderBankBoneWghPtr m_BoneWghBank;
208
209    s3d_CDrvSigPtr m_BoneSubscrBankSig;
210    // Cnt = m_VertCnt
211    s3d_CSharkMeshLoaderBankBoneSubscrPtr m_BoneSubscrBank;
212
213    s3d_CDrvSigPtr m_PointBankSig;
214    // Cnt = m_FrmCnt * m_VertCnt
215    s3d_CSharkMeshLoaderBankVec3fPtr m_PointBank;       
216
217    s3d_CDrvSigPtr m_NormalBankSig;
218    // Cnt = m_FrmCnt * m_VertCnt
219    s3d_CSharkMeshLoaderBankVec3fPtr m_NormalBank;     
220
221    s3d_CDrvSigPtr m_TangentUBankSig;
222    // Cnt = m_FrmCnt * m_VertCnt
223    s3d_CSharkMeshLoaderBankVec3fPtr m_TangentUBank;   
224
225    s3d_CDrvSigPtr m_TangentVBankSig;
226    // Cnt = m_FrmCnt * m_VertCnt
227    s3d_CSharkMeshLoaderBankVec3fPtr m_TangentVBank;   
228
229    s3d_CDrvSigPtr m_ColorAlphaBankSig;
230    // Cnt = m_FrmCnt * m_VertCnt
231    s3d_CSharkMeshLoaderBankVec4fPtr m_ColorAlphaBank;     
232
233    s3d_CUtilInitInt m_TexAttrCnt;
234    // Cnt = m_TexAttrCnt
235    s3d_CUtilOwnArray<s3d_CSharkMeshLoaderAttr> m_TexAttrArray;
236   
237    // Cnt = FamilyCnt
238    s3d_CUtilOwnArray<s3d_CUtilAtomPtr> m_MtlPtrArray;
239    s3d_CUtilOwnArray<s3d_CUtilAtom*> m_MtlArray;
240    s3d_CUtilOwnArray<float> m_FrictArray;
241    s3d_CUtilOwnArray<float> m_SoftnessArray;
242    s3d_CUtilOwnArray<float> m_BounceArray;
243
244    s3d_CUtilInitInt m_PrimSphereCnt;
245    s3d_CUtilOwnArray<s3d_CEngGeoSphere> m_PrimSphereArray;
246
247    s3d_CUtilInitInt m_PrimCapsuleCnt;
248    s3d_CUtilOwnArray<s3d_CEngGeoCapsule> m_PrimCapsuleArray;
249
250    s3d_CUtilInitBool m_CouldMorePrim;
251
252    void CheckLoad();
253    void Load(bool Restore);
254    void ReadData(
255            s3d_CUtilSnkSeqRead *Snk, bool Restore);
256    void ThrowFormatError(s3d_CUtilStr_cr Kind);
257    void ThrowRestoreError(s3d_CUtilStr_cr Kind);
258
259    void LoaderPerform();
260    void ResChanged();
261
262    s3d_CEngMeshData *EvalMeshDataBase(
263            s3d_CUtilMemPool *MemPool, s3d_CUtilAtom *Usage);
264    s3d_CEngMeshData *EvalMeshDataFull(
265            s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
266            s3d_CUtilMemPool *MemPool, s3d_CUtilAtom *Usage,
267            s3d_CEngModelCtx *ModelCtx);
268
269    static s3d_CSysIntps SearchKitIdx(
270                s3d_CSysIntps KeyCnt, float *KeyArray, float Phase);
271};
272
273typedef s3d_CUtilPtr<s3d_CSharkMeshLoaderVariant> s3d_CSharkMeshLoaderVariantPtr;
274
275///////////////////////////////////////////////////////////////////////////////
276
277struct s3d_CSharkMeshLoaderVariantDesc
278{
279    s3d_CUtilAtomPtr m_Usage;
280    s3d_CUtilInitFloat m_Prec;
281    s3d_CSysIntps m_VariantIdx;
282};*/
283
284///////////////////////////////////////////////////////////////////////////////
285
286class s3d_CSharkMeshLoaderInterp
287{
288public:
289    static void EvalFrm(
290            s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
291            s3d_CUtilMemPool *MemPool,
292            s3d_CSysIntps FrmCnt, s3d_CSysIntps iKit, float KitFrac,
293            s3d_CEngMeshData *MeshData);
294};
295
296///////////////////////////////////////////////////////////////////////////////
297
298//@ Standard model implementation.
299class /*S3D_SHARK_MESH_LOADER_PUBLIC_DECL */s3d_CSharkMeshLoader
300    : public s3d_CEngModel,
301    public s3d_CCompUtilSerImmut,
302    public s3d_CCompUtilUniqueBase,
303    public s3d_CSharkMeshLoaderChanged,
304    public s3d_CSharkMeshLoaderLoader
305{
306public:
307    S3D_UTIL_RTTI_TABLE_DECLARE
308
309    //@
310    s3d_CSharkMeshLoader(
311        s3d_CUtilMsgHandler *MsgHandler, s3d_CUtilStr_cr Info,
312        bool Bare,
313        s3d_CUtilAtomMgr *AtomMgr, s3d_CCompResMgr *ResMgr,
314        s3d_CUtilStr_cr ResName);
315
316    //@
317    ~s3d_CSharkMeshLoader();
318
319    //@
320    s3d_CUtilStr GetInfo();
321
322    //@ Return a string description of the object.
323    s3d_CUtilStr GetDesc();
324
325    //@
326    void RegisterNotif(s3d_CUtilNotifRecip *Recip);
327
328    //@
329    int GetAnimActuCnt();
330
331    //@
332    s3d_CUtilStr GetAnimActuName(int Idx);
333
334    //@
335    void GetAnimActuRange(int Idx, float &Start, float &End);
336
337    //@
338    int GetAnimPosCnt();
339
340    //@
341    s3d_CUtilStr GetAnimPosName(int Idx);
342
343    //@
344    int GetTexCnt();
345
346    //@
347    s3d_CUtilStr GetTexName(int Idx);
348
349    //@
350    void GetBound(s3d_CUtilVec3f &Cen, s3d_CUtilVec3f &Ext);
351
352    //@
353    void GetMeshCompos(
354            s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
355            s3d_CUtilMemPool *MemPool, s3d_CUtilAtom *Usage,
356            s3d_CUtilMat4x4f_cr Map, s3d_CUtilVec3f_cr Ext,
357            s3d_CUtilVec3f_cr Prec, s3d_CEngModelCtx *ModelCtx,
358            bool NeedMeshData,
359            s3d_CEngMeshCompos &MeshCompos);
360
361    //@
362    void GetAvailMeshComposArray(
363            s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
364            s3d_CUtilMemPool *MemPool, s3d_CUtilAtom *Usage,
365            s3d_CEngMeshComposArray &MeshComposArray);
366
367    //@
368    s3d_CEngGeoData *GetGeoData(
369            s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
370            s3d_CUtilMemPool *MemPool, s3d_CUtilAtom *Usage);
371
372    //@
373    bool VisibCheckInf(
374            s3d_CUtilMemPool *MemPool,
375            s3d_CUtilVec3f_cr RelRefPoint);
376
377    //@
378    void VisibAddBoundTest(
379            s3d_CUtilMemPool *MemPool,
380            s3d_CEngBoundTestArray *BoundTestArray,
381            s3d_CUtilVec3f_cr RelRefPoint,
382            s3d_CUtilVec3f_cr BoundTransl, s3d_CUtilQuatf_cr BoundQuat);
383
384    //@
385    void Reduce();
386
387    //@
388    void ResChanged();
389
390    //@
391    void ChangedPerform();
392
393//      bool UseTriangleStrips(void) const { return use_triangle_strips; }
394
395        inline const Geometry::LodStripsLibraryData *GetLodStripsData(void) const { return geo_mesh_loader.GetLodStripsData(); }
396        inline Geometry::Mesh *GetGeoMesh(void) const { return m_GeoMesh; }
397
398private:
399    bool m_Bare;
400    s3d_CUtilAtomMgrPtr m_AtomMgr;
401    s3d_CCompResMgrPtr m_ResMgr;
402    s3d_CUtilStr m_ResName;
403
404    s3d_CUtilNotifRecipObj<s3d_CSharkMeshLoader> m_NotifRecip;
405    s3d_CUtilNotifMgr m_NotifMgr;
406
407    s3d_CUtilMsgHandlerPtr m_MsgHandler;
408    s3d_CUtilStr m_Info;
409
410    s3d_CUtilStr m_ModelName;
411
412    bool m_Loaded;
413
414    // Model data:
415
416    float m_RangeStart;
417    float m_RangeEnd;
418
419    s3d_CUtilVec3f m_BoundCen;
420    s3d_CUtilVec3f m_BoundExt;
421
422    int m_BoneCnt;
423    s3d_CUtilOwnArray<s3d_CUtilStr> m_BoneNameArray;
424    s3d_CUtilOwnArray<s3d_CUtilTranslQuatf> m_BoneTransfArray;
425
426    s3d_CUtilInitInt m_TexNameCnt;
427    s3d_CUtilOwnArray<s3d_CUtilStr> m_TexNameArray;
428
429/*    s3d_CUtilInitInt m_VariantDescCnt;
430    s3d_CUtilOwnArray<s3d_CSharkMeshLoaderVariantDesc> m_VariantDescArray;
431    s3d_CUtilInitInt m_VariantCnt;
432    s3d_CUtilOwnArray<s3d_CSharkMeshLoaderVariantPtr> m_VariantArray;
433
434    s3d_CSysIntps m_VariantIdxGeo;*/
435
436    void Unload();
437    void CheckLoad();
438    void Load();
439        // GAMETOOLS
440 /*   void ReadModel(
441            s3d_CUtilSnkSeqRead *Snk);*/
442        void ReadModelGT();
443
444/*    void ReadVariantDesc(
445            s3d_CUtilSnkSeqRead *Snk,
446            s3d_CSharkMeshLoaderVariantDesc &VariantDesc);*/
447    void ThrowFormatError(s3d_CUtilStr_cr Kind);
448
449    s3d_CSysIntps SearchVariantIdxPrec(
450            s3d_CUtilAtom *Usage, float Prec);
451    float CalcMeshPrec(s3d_CUtilMat4x4f_cr Map, s3d_CUtilVec3f_cr Prec);
452
453        // GAMETOOLS
454        Geometry::Mesh *m_GeoMesh;
455        Geometry::GeoMeshLoader geo_mesh_loader;
456    void LoaderPerform();
457    void GetMeshComposBase(
458            s3d_CUtilMemPool *MemPool, s3d_CUtilAtom *Usage,
459            s3d_CEngMeshCompos &MeshCompos);
460
461    s3d_CDrvSigPtr m_PointBankSig;
462    // Cnt = m_FrmCnt * m_VertCnt
463    s3d_CSharkMeshLoaderBankVec3fPtr m_PointBank;
464
465    s3d_CDrvSigPtr m_NormalBankSig;
466    // Cnt = m_FrmCnt * m_VertCnt
467    s3d_CSharkMeshLoaderBankVec3fPtr m_NormalBank;
468
469    s3d_CUtilInitInt m_TexAttrCnt;
470    // Cnt = m_TexAttrCnt
471        s3d_CEngMeshAttr *m_TexAttrArray;
472
473    s3d_CSharkMeshLoaderBankMeshIdx *m_IdxBank; //<- indices   
474    s3d_CSharkMeshLoaderBankMeshIdx *m_BoneIdxBank; //<- bone indices   
475
476        // families (submeshes)
477        s3d_CEngMeshFamily *m_FamilyArray;
478
479        // packets
480        s3d_CSharkMeshLoaderBankPacket *m_PacketsBank;
481
482        // signatures
483    s3d_CDrvSigPtr m_MeshSig, m_TopolSig;
484
485//      bool use_triangle_strips;
486
487};
488
489typedef s3d_CUtilPtr<s3d_CSharkMeshLoader> s3d_CSharkMeshLoaderPtr;
490
491///////////////////////////////////////////////////////////////////////////////
492
493//@ Standard suppl for standard model objects
494// which can read standard model files.
495class s3d_CSharkMeshLoaderSuppl
496        : public s3d_CCompSuppl,
497        public s3d_CCompSetup
498{
499public:
500    S3D_UTIL_RTTI_TABLE_DECLARE
501
502    //@
503    s3d_CSharkMeshLoaderSuppl();
504
505    //@
506    s3d_CSharkMeshLoaderSuppl(
507            s3d_CUtilMsgHandler *MsgHandler, s3d_CUtilStr_cr Info,
508            bool Bare, s3d_CUtilAtomMgr *AtomMgr, s3d_CCompResMgr *ResMgr);
509
510    //@
511    void SetupInit(
512            s3d_CUtilMsgHandler *MsgHandler, s3d_CUtilStr_cr Info,
513            s3d_CCompSuppl *FetchSuppl, s3d_CUtilSnkChunk *Param);
514
515    //@
516    void SetupDone();
517
518    //@
519    s3d_CCompObjPtr SupplObj(
520            s3d_CUtilMsgHandler *MsgHandler, s3d_CUtilStr_cr Info,
521            s3d_CUtilStr_cr Ident, s3d_CUtilStr_cr Version);
522
523private:
524    bool m_Bare;
525    s3d_CUtilAtomMgrPtr m_AtomMgr;
526    s3d_CCompResMgrPtr m_ResMgr;
527};
528
529//@
530typedef s3d_CUtilPtr<s3d_CSharkMeshLoaderSuppl> s3d_CSharkMeshLoaderSupplPtr;
531
532///////////////////////////////////////////////////////////////////////////////
533// Definitions:
534///////////////////////////////////////////////////////////////////////////////
535
536template<typename T>
537void s3d_CSharkMeshLoaderBank<T>::Fetch(
538        s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info,
539        s3d_CDrvBankContent &BankContent)
540{
541    if(m_Data)
542    {
543        BankContent.m_Cnt = m_Cnt;
544        BankContent.m_TypeDesc = s3d_DrvDataGetTypeDesc<T>();
545        BankContent.m_Stride = S3D_SYS_SIZEOFS(T);
546        BankContent.m_Data
547                = reinterpret_cast<const s3d_CSysIntm*>(m_Data.Get());
548        return;
549    }
550    if(m_Loader)
551        m_Loader->LoaderPerform();
552    if(m_Data)
553    {
554        BankContent.m_Cnt = m_Cnt;
555        BankContent.m_TypeDesc = s3d_DrvDataGetTypeDesc<T>();
556        BankContent.m_Stride = S3D_SYS_SIZEOFS(T);
557        BankContent.m_Data
558                = reinterpret_cast<const s3d_CSysIntm*>(m_Data.Get());
559        return;
560    }
561    s3d_CUtilMsg e;
562    e.m_Code = "eng/model/std/SHARK_MESH_LOADER.not_available";
563    e.m_StdTempl = "Data not available.";
564    e.AddInfo(Info);
565    s3d_UtilMsgReportFatal(MsgHandler, e);
566}
567
568template<typename T>
569s3d_CUtilPtrBase *s3d_CSharkMeshLoaderBank<T>::GetOwner(
570        s3d_CUtilMsgHandler *MsgHandler, const s3d_CSysChar *Info)
571{
572    return this;
573}
574
575///////////////////////////////////////////////////////////////////////////////
576
577#endif
Note: See TracBrowser for help on using the repository browser.