Gizmo3D

gzDynamicLoader.h

Go to the documentation of this file.
00001 //*****************************************************************************
00002 // File         : gzDynamicLoader.h
00003 // Module       : 
00004 // Description  : Class definition of the gzDynamicLoader class
00005 // Author       : Anders Modén      
00006 // Product      : Gizmo3D 2.1.1
00007 //      
00008 // Copyright © 2003- Saab Training Systems AB, Sweden   
00009 //          
00010 // NOTE:    Gizmo3D is a high performance 3D Scene Graph and effect visualisation 
00011 //          C++ toolkit for Linux, Mac OS X, Windows (Win32) and IRIX® for  
00012 //          usage in Game or VisSim development.
00013 //
00014 //
00015 // Revision History...                          
00016 //                                  
00017 // Who  Date    Description                     
00018 //                                  
00019 // AMO  000311  Created file    
00020 //
00021 //******************************************************************************
00022 #ifndef __GZ_DYNAMIC_LOADER_H__
00023 #define __GZ_DYNAMIC_LOADER_H__
00024 
00030 #include "gzGroup.h"
00031 #include "gzThread.h"
00032 #include "gzNodeOptimizer.h"
00033 
00034 enum gzDynamicLoadingState
00035 { 
00036     GZ_DYNAMIC_LOADER_UNLOADED ,                // SYNC in NodeLock
00037     GZ_DYNAMIC_LOADER_LOADED ,                  // SYNC in NodeLock
00038     GZ_DYNAMIC_LOADER_REQUEST_LOAD,             // SYNC from thread
00039     GZ_DYNAMIC_LOADER_REQUEST_LOAD_CANCEL,      // SYNC from thread
00040     GZ_DYNAMIC_LOADER_IN_LOADING,               // ASYNC
00041     GZ_DYNAMIC_LOADER_IN_TRAVERSAL,             // No callback
00042     GZ_DYNAMIC_LOADER_REQUEST_UNLOAD,           // ASYNC
00043     GZ_DYNAMIC_LOADER_NOT_FOUND,                // ASYNC
00044 
00045 };
00046 
00047 class gzDynamicLoader;  // Forward decl
00048 
00049 //******************************************************************************
00050 // Class    : gzDynamicLoaderGlobalInfoInterface
00051 //                                  
00052 // Purpose  : Interface that notifies clients about loaded dynamic data from all instances.
00053 //                                  
00054 // Notes    : - 
00055 //                                  
00056 // Revision History...                          
00057 //                                  
00058 // Who  Date    Description                     
00059 //                                  
00060 // AMO  021119  Created 
00061 //                                  
00062 //******************************************************************************
00063 class gzDynamicLoaderGlobalInfoInterface 
00064 {
00065 public:
00066 
00067     GZ_GRAPH_EXPORT gzDynamicLoaderGlobalInfoInterface();
00068 
00069     GZ_GRAPH_EXPORT virtual ~gzDynamicLoaderGlobalInfoInterface();
00070 
00071     GZ_GRAPH_EXPORT virtual gzVoid onDynamicLoadState(gzDynamicLoadingState state,gzDynamicLoader *loader,gzNode *node);
00072 
00073 private:
00074 
00075     friend class gzDynamicLoader;
00076 
00077     static  gzVoid notify(gzDynamicLoadingState state,gzDynamicLoader *loader,gzNode *node);
00078 
00079     static  gzList<gzDynamicLoaderGlobalInfoInterface>  s_subscribers;
00080 };
00081 
00082 //******************************************************************************
00083 // Class    : gzDynamicLoaderInfoInterface
00084 //                                  
00085 // Purpose  : Interface that notifies clients about loaded dynamic data from subscribed instances.
00086 //                                  
00087 // Notes    : - 
00088 //                                  
00089 // Revision History...                          
00090 //                                  
00091 // Who  Date    Description                     
00092 //                                  
00093 // AMO  021119  Created 
00094 //                                  
00095 //******************************************************************************
00096 class gzDynamicLoaderInfoInterface
00097 {
00098 public:
00099 
00100     GZ_GRAPH_EXPORT gzDynamicLoaderInfoInterface();
00101 
00102     GZ_GRAPH_EXPORT virtual ~gzDynamicLoaderInfoInterface();
00103 
00104     GZ_GRAPH_EXPORT virtual gzVoid onDynamicLoadState(gzDynamicLoadingState state,gzDynamicLoader *loader,gzNode *node)=0;
00105 
00106 private:
00107 
00108     friend class gzDynamicLoader;
00109 
00110     gzList<gzDynamicLoader> m_pendingSubscriptions;
00111 };
00112 
00113 //******************************************************************************
00114 // Class    : gzDynamicLoader
00115 //                                  
00116 // Purpose  : An instance that loads data dynamically dependant on speed and 
00117 //            direction of viewer
00118 //                                  
00119 // Notes    : - 
00120 //                                  
00121 // Revision History...                          
00122 //                                  
00123 // Who  Date    Description                     
00124 //                                  
00125 // AMO  021119  Created 
00126 //                                  
00127 //******************************************************************************
00128 class gzDynamicLoader : public gzGroup
00129 {
00130 public:
00131 
00132     GZ_GRAPH_EXPORT gzDynamicLoader(const gzString & name=GZ_EMPTY_STRING);
00133 
00134     GZ_GRAPH_EXPORT virtual ~gzDynamicLoader();
00135 
00136     GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_GRAPH_EXPORT);  // typed interface
00137 
00138     // ---------- loader interface --------------------------------------
00139 
00140     GZ_GRAPH_EXPORT gzVoid  setLoadState( gzBool load=TRUE );
00141 
00142     GZ_GRAPH_EXPORT gzVoid  setNodeURL(const gzString &name);
00143 
00144     GZ_GRAPH_EXPORT gzVoid  setLoadFlags(const gzSerializeAdapterFlags & flags );
00145 
00146     GZ_GRAPH_EXPORT gzVoid  setScale(gzReal scale=0);
00147 
00148     GZ_GRAPH_EXPORT gzVoid  setHPR(gzReal heading=0 , gzReal pitch=0 , gzReal roll=0);
00149 
00150     GZ_GRAPH_EXPORT gzVoid  waitForLoadedData();
00151 
00153     GZ_GRAPH_EXPORT gzBool  isLoaded();
00154 
00156     GZ_GRAPH_EXPORT gzBool  isInLoading();
00157 
00159     GZ_GRAPH_EXPORT gzBool  getLoadState();
00160 
00161     GZ_GRAPH_EXPORT gzVoid  useOptimizer(gzBool on);
00162 
00163     GZ_GRAPH_EXPORT gzVoid  setOptimizerFlags(const gzNodeOptimizeLevel & flags );
00164 
00165     GZ_GRAPH_EXPORT virtual gzVoid onNodeLoadState(gzNode *node,gzDynamicLoadingState state);
00166 
00167     GZ_GRAPH_EXPORT static  gzBool      isWorking();
00168 
00169     GZ_GRAPH_EXPORT static  gzDouble    getWorkDelay();
00170 
00171     GZ_GRAPH_EXPORT static  gzULong     getPendingWork();
00172 
00173     GZ_GRAPH_EXPORT static  gzVoid      boostLoaderWork();
00174 
00175     GZ_GRAPH_EXPORT static  gzVoid      unBoostLoaderWork();
00176 
00177 
00178     // ---------- Clone interface ---------------------------------------
00179     GZ_GRAPH_EXPORT virtual gzReference* clone() const;
00180 
00181     GZ_GRAPH_EXPORT virtual gzVoid preTraverseAction( gzTraverseAction *actionclass , gzContext *context);
00182     GZ_GRAPH_EXPORT virtual gzVoid postTraverseAction( gzTraverseAction *actionclass , gzContext *context);
00183     GZ_GRAPH_EXPORT virtual gzBool isTraversable( gzTraverseAction *action , gzNode *node , gzULong index , gzContext *context );
00184 
00185     // ---------- Serializing -------------------------------------------
00186 
00187     GZ_GRAPH_EXPORT virtual gzVoid write(gzSerializeAdapter *adapter);
00188     GZ_GRAPH_EXPORT virtual gzVoid read(gzSerializeAdapter *adapter);
00189     GZ_GRAPH_EXPORT virtual gzULong getDataSize(gzSerializeAdapter *adapter) const;
00190 
00191     // ---------- Subscribing -------------------------------------------
00192 
00193     GZ_GRAPH_EXPORT gzVoid addSubscriber(gzDynamicLoaderInfoInterface *subscriber);
00194     GZ_GRAPH_EXPORT gzVoid removeSubscriber(gzDynamicLoaderInfoInterface *subscriber);
00195     
00196 
00197     GZ_PROPERTY_EXPORT(gzULong,     AttachID,       GZ_GRAPH_EXPORT);
00198     GZ_PROPERTY_EXPORT(gzDouble,    LoadPriority,   GZ_GRAPH_EXPORT);
00199 
00200 protected:
00201 
00202     GZ_GRAPH_EXPORT gzVoid notifyLoadState(gzDynamicLoadingState state,gzDynamicLoader *loader,gzNode *node);
00203 
00204     friend class gzDynamicLoaderManager;
00205 
00206     // Atomic vars locked by gzNodeLock
00207 
00208     gzDynamicLoadingState   m_state:4;
00209 
00210     gzBool                  m_loadState:1;
00211 
00212     gzBool                  m_optimize:1;
00213 
00214     gzBool                  m_pendingWork:1;
00215 
00216     // Atomic vars locked by loader item
00217 
00218     gzString                m_nodeURL;
00219 
00220     gzSerializeAdapterFlags m_loadFlags;
00221 
00222     gzReal                  m_scale;
00223 
00224     gzReal                  m_heading;
00225 
00226     gzReal                  m_pitch;
00227 
00228     gzReal                  m_roll;
00229 
00230     gzNodeOptimizeLevel     m_optimizerFlags;
00231 
00232     gzList<gzDynamicLoaderInfoInterface>    m_subscribers;
00233 
00234 private:
00235 
00236     static gzULong          s_pendingWork;
00237 
00238     static gzDouble         s_lastPingTime;
00239 
00240     static gzBool           s_isBoosted;
00241 };
00242 
00243 //******************************************************************************
00244 // Class    : gzDynamicLoaderManager
00245 //
00246 // Purpose  : The manager for dynamic loaders.
00247 //
00248 // Notes    : -
00249 //
00250 // Revision History...
00251 //
00252 // Who  Date    Description
00253 //
00254 // AMO  021119  Created
00255 //
00256 //******************************************************************************
00257 class gzDynamicLoaderManager : public gzThread
00258 {
00259 public:
00260 
00261     gzDynamicLoaderManager();
00262 
00263     virtual ~gzDynamicLoaderManager();
00264     
00265     GZ_GRAPH_EXPORT static  gzVoid startManager();
00266 
00267     GZ_GRAPH_EXPORT static  gzVoid stopManager();
00268 
00269     GZ_GRAPH_EXPORT static  gzBool isManagerRunning();
00270 
00271 private:
00272 
00273     friend class gzDynamicLoader;
00274 
00275     virtual gzVoid process();
00276 
00277     gzRefList<gzRefData<gzList<gzDynamicLoader> > >     m_pendingLoaders;
00278     gzRefList<gzRefData<gzList<gzDynamicLoader> > >     m_spareQueues;
00279 
00280     gzEvent                                             m_trigger;
00281 
00282 };
00283 
00284 #endif

Documentation for Gizmo3D generated at Wed Feb 20 11:54:04 2008 by   Saab Training Systems AB, ¸ (c) 2003-and beyond