00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef _SCENE_H
00013 #define _SCENE_H
00014
00015 #include "Template.h"
00016 #include "Logger.h"
00017
00018 class CSLScene;
00019 class CSLModel;
00020 class CSLAmbience;
00021 class CSLAngle;
00022 class CSLCoordinateSystem;
00023 class CSLFileInfo;
00024 class CSLSceneInfo;
00025 class CSLEnvelopeList;
00026 class CSLMaterialLibrary;
00027 class CSLFog;
00028 class CSLActionFCurve;
00029 class CSLFCurve;
00030 class CSLTransform;
00031 class CSLAction;
00032 class CSLShapeAnimation;
00033 class CSLVisibility;
00034 class CSLXSIMaterial;
00035 class CSLImageLibrary;
00036 class CSLImage;
00037 class CSLXSIShader;
00038
00042 class XSIEXPORT CSLUnresolvedElement
00043 {
00044 public:
00045 CSLUnresolvedElement
00046 (
00047 CSLTemplate *in_pUnresolvedObject,
00048 CSLTemplate *in_pUnresolvedParent = 0,
00049 SI_Char *in_pReferenceName = 0,
00050 void *in_pUserData = 0
00051 );
00052
00056 inline CSLTemplate* UnresolvedObject();
00057
00061 inline CSLTemplate* UnresolvedParent();
00062
00066 inline SI_Char* ReferenceName();
00067
00071 inline void* UserData();
00072
00073 private:
00074 CSLTemplate *m_pUnresolvedObject;
00075 CSLTemplate *m_pUnresolvedParent;
00076 SI_Char *m_pReferenceName;
00077 void *m_pUserData;
00078
00079
00080 void *m_pReserved;
00081 };
00082
00083 inline CSLTemplate* CSLUnresolvedElement::UnresolvedObject()
00084 {
00085 return m_pUnresolvedObject;
00086 }
00087
00088 inline CSLTemplate* CSLUnresolvedElement::UnresolvedParent()
00089 {
00090 return m_pUnresolvedParent;
00091 }
00092 inline SI_Char* CSLUnresolvedElement::ReferenceName()
00093 {
00094 return m_pReferenceName;
00095 }
00096
00097 inline void* CSLUnresolvedElement::UserData()
00098 {
00099 return m_pUserData;
00100 }
00101
00102 #ifdef FTK_KERNEL
00103 typedef std::multimap<SI_Char *, CSLUnresolvedElement, StrLessPred> CSLUnresolvedMap;
00104 typedef CSLUnresolvedMap::iterator CSLUnresolvedMapIterator;
00105 typedef std::pair<CSLUnresolvedMapIterator,CSLUnresolvedMapIterator> CSLUnresolvedMapRange;
00106
00107 typedef SI_StrMap<CSLModel *> CSLModelMap;
00108 typedef CSLModelMap::iterator CSLModelMapIterator;
00109 #else
00110 typedef void CSLUnresolvedMap;
00111 typedef void CSLModelMap;
00112 #endif
00113
00117 struct XSIEXPORT SLContext
00118 {
00119 public:
00120 SLContext();
00121 SI_Void AddOrphan(CSLTemplate *in_pOrphanTemplate);
00123 CSLTemplate *m_pCurrentTemplate;
00124 CSLModel *m_pCurrentModel;
00125 CSLScene *m_pScene;
00126 CSLMaterialLibrary *m_pMaterialLibrary;
00127 CSLXSIMaterial *m_pCurrentMaterial;
00128 CSIBCArray<CSLTemplate *> *m_pOrphanList;
00129 void *m_pTemplateUserData;
00130 CSLUnresolvedMap *m_pUnresolvedMap;
00131 CSLModelMap *m_pModelMap;
00132 CSLImageLibrary *m_pImageLibrary;
00133 CSLImage *m_pCurrentImage;
00134 CSLXSIShader *m_pCurrentXSIShader;
00135 void *m_pUserData;
00137 private:
00138
00139 void *m_pReserved;
00140 };
00141
00142 typedef CSLTemplate *(*CSLCALLBACK) (CdotXSITemplate *in_pTemplate, SLContext *in_pContext);
00143 typedef SI_Error (*CSLPOSTCHILDRENCALLBACK) (CSLTemplate *in_pTemplate, SLContext *in_pContext);
00144 typedef SI_Error (*CSLLOADCALLBACK) (SLContext *in_pContext);
00145
00162 class XSIEXPORT SLTemplateCallback
00163 {
00164 public:
00165 SLTemplateCallback();
00166 void Clear();
00167
00168 CSLLOADCALLBACK m_PreLoadCallback;
00169 CSLCALLBACK m_Callback;
00170 CSLPOSTCHILDRENCALLBACK m_PostChildrenCallback;
00171 CSLLOADCALLBACK m_PostLibraryCallback;
00172 CSLLOADCALLBACK m_PostLoadCallback;
00173
00174 void *m_pUserData;
00175
00176 private:
00177
00178 void *m_pReserved;
00179 };
00180
00186 class XSIEXPORT CSLScene
00187 {
00188 public:
00190
00192 CSLScene();
00193 virtual ~CSLScene();
00194
00196
00198
00203 SI_Error Open(SI_Char *in_szFileName);
00204
00211 SI_Error Open(SI_Char *in_szFileName, SI_READ_CALLBACK_FNC in_pFunc);
00212
00220 SI_Error Create(SI_Char *in_szFileName, SI_Int in_nVersionMajor, SI_Int in_nVersionMinor, SI_Int in_nFormat = FORMAT_TEXT);
00221
00228 SI_Error Create(SI_Int in_nVersionMajor, SI_Int in_nVersionMinor, SI_Int in_nFormat = FORMAT_TEXT);
00229
00234 SI_Error Open(CXSIParser * in_parser);
00238 SI_Error Read();
00239
00243 virtual SI_Error Write();
00244
00249 virtual SI_Error Write(SI_Char* in_szFileName);
00250
00254 SI_Error Close();
00255
00260 CSLModel* FindModel(SI_Char* in_szModelName);
00261
00267 CSLModel* FindModelRecursively(SI_Char* in_szModelName, CSLModel* in_pModel);
00268
00276 CSLAnimatableType* FindParameter(SI_Char* in_szParameterName);
00277
00283 SI_Error GetValue(SI_Char* in_szParameterName, SI_Float* out_pfValue);
00284
00290 SI_Error SetValue(SI_Char* in_szParameterName, SI_Float in_fValue);
00291
00293
00295
00299 CSLAmbience *Ambience();
00300
00304 CSLAmbience *CreateAmbience();
00305
00309 SI_Error DestroyAmbience();
00310
00314 CSLCoordinateSystem* CoordinateSystem();
00315
00319 CSLEnvelopeList* EnvelopeList();
00320
00324 CSLFog* Fog();
00325
00329 CSLMaterialLibrary* GetMaterialLibrary();
00330
00334 CSLModel *Root();
00335
00339 CXSIParser* Parser();
00340
00344 CSLAngle* Angle();
00345
00349 CSLFileInfo* FileInfo();
00350
00354 CSLSceneInfo* SceneInfo();
00355
00359 CSLLogger* Logger();
00360
00364 CSIBCString &FileName();
00365
00369 CSLImageLibrary* GetImageLibrary();
00370
00374 SI_Error DestroyFog();
00375
00379 CSLFog* CreateFog();
00380
00384 SI_Error DestroyEnvelopeList();
00385
00389 virtual CSLEnvelopeList* CreateEnvelopeList();
00390
00395 virtual CSLImageLibrary* CreateImageLibrary();
00396
00401 SI_Error DestroyImageLibrary();
00402
00403
00405
00407
00412 virtual CSLMaterialLibrary* ConnectMaterialLibrary(CSLMaterialLibrary *in_pNewMaterialLibrary);
00413
00418 CSLAngle* ConnectAngle(CSLAngle *in_pNewAngle);
00419
00424 CSLFileInfo* ConnectFileInfo(CSLFileInfo *in_pNewFileInfo);
00425
00430 CSLSceneInfo* ConnectSceneInfo(CSLSceneInfo* in_pToConnect);
00431
00436 CSLFog* ConnectFog( CSLFog *in_pNewFog );
00437
00442 CSLAmbience* ConnectAmbience( CSLAmbience *in_pNewAmbience );
00443
00448 CSLCoordinateSystem* ConnectCoordinateSystem( CSLCoordinateSystem *in_pNewCoordSystem );
00449
00454 CSLEnvelopeList* ConnectEnvelopeList( CSLEnvelopeList* in_pNewEnvList );
00455
00461 CSLImageLibrary* ConnectImageLibrary( CSLImageLibrary* in_pImageLibrary );
00462
00497 SI_Error RegisterCallback(SI_Char *in_pName, SLTemplateCallback *in_pTemplateCallback);
00498
00503 SI_Error UnregisterCallback(SI_Char *in_pName);
00504
00508 SI_Error UnregisterAllCallbacks();
00509
00514 SLTemplateCallback *Callback(SI_Char *in_pName);
00515
00517
00519 virtual SI_Error Fix();
00520 virtual SI_Error Synchronize();
00521
00523
00525 SI_Error RemoveTemplate(CdotXSITemplate *in_pElement);
00526 SI_Error ClearSLObjectArray(CSIBCArray<CSLTemplate *> *in_pArray);
00527
00533 SI_Bool SupportsTemplates( SI_Int in_nMajor, SI_Int in_nMinor );
00534
00538 SI_Void SetWarningCallback ( SI_WARNING_CALLBACK_FNC in_pfncCallback ) { m_pfncCallback = in_pfncCallback; };
00539
00543 SI_Void SetReadCallback ( SI_READ_CALLBACK_FNC in_pfncCallback ) { m_pfncReadCallback = in_pfncCallback; };
00550 SI_Error GetRefCount( CSLTemplate ** in_ppObjects,
00551 SI_Int ** out_ppRefCounts,
00552 SI_Int in_iObjectCount,
00553 CSLTemplate::ETemplateType in_eType );
00554
00555
00556 static CSLScene * CreateScene();
00557 protected:
00558
00559 SI_Error GetRefCountRecursively ( CSLModel* in_pModel,
00560 CSLTemplate** in_ppObjects,
00561 SI_Int** out_ppRefCounts,
00562 SI_Int in_iObjectCount,
00563 CSLTemplate::ETemplateType in_eType );
00564
00565
00566 protected:
00567 CSLModel * FindFullyQualifiedObject( SI_Char * in_pName, SI_Char ** out_pContainer, SI_Char ** out_pParameter );
00568 virtual SI_Error PopulateScene();
00569 SI_Error ReadTemplateRecursively(CdotXSITemplate *in_pTemplate, SLContext *in_pContext);
00570 SI_Error ExecutePreLoadCallbacks(SLContext *in_pContext);
00571 SI_Error ExecutePostLibraryCallbacks(SLContext *in_pContext);
00572 SI_Error ExecutePostLoadCallbacks(SLContext *in_pContext);
00573 virtual SI_Error RegisterAllCallbacks();
00574 SI_Error Clear();
00575
00576 #ifdef FTK_KERNEL
00577 typedef SI_StrMap<SLTemplateCallback> CSLCallbackMap;
00578 typedef CSLCallbackMap::iterator CSLCallbackMapIterator;
00579 #else
00580 typedef void CSLCallbackMap;
00581 #endif
00582
00583 CSLSceneInfo* m_pSceneInfo;
00584 CSLFileInfo* m_pFileInfo;
00585 CSLAmbience* m_pAmbience;
00586 CSLAngle* m_pAngle;
00587 CSLFog* m_pFog;
00588 CSLEnvelopeList* m_pEnvelopeList;
00589 CSLMaterialLibrary* m_pMaterialLibrary;
00590 CSLCoordinateSystem* m_pCoordinateSystem;
00591 CXSIParser* m_pParser;
00592 CSLCallbackMap* m_pCallbackMap;
00593 CSLModel *m_pRoot;
00594 CSLLogger m_Logger;
00595 CSLImageLibrary *m_pImageLibrary;
00596
00597 CSIBCString m_FileName;
00598
00599 SI_WARNING_CALLBACK_FNC m_pfncCallback;
00600 SI_READ_CALLBACK_FNC m_pfncReadCallback;
00601
00602
00603 void *m_pReserved;
00604 };
00605
00606 #endif