VR-Forces 4.1.1 Class Documentation
DtDe.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2013 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 #include <vrvCore/vrvCore.h>
12 #include <vrvUtil/DtDebugLog.h>
14 #include <vrvCore/DtDisplayProxy.h>
16 #include <vrvUtil/DtDeError.h>
20 #include <vlutil/vlUtil.h>
21 #include <vlutil/vlThread.h>
22 #include <vlutil/vlPerformanceStats.h>
23 
24 #include <boost/bind.hpp>
25 #include <boost/signal.hpp>
26 #include <map>
27 #include <string>
28 
31 #define DT_DE_INIT_ONCE(de)\
32 if(de.isInitFunctionRegistered((void*)&init))\
33 {\
34  return;\
35 }\
36 else\
37 {\
38  de.registerInitFunction((void*)&init);\
39 }
40 
41 class DtClock;
42 
43 namespace makVrv
44 {
45  class DtAgentManager;
46  class DtDataBank;
47  class DtDeProctor;
48  class DtDeSharedState;
49  class DtDisplay;
50  class DtDriverManager;
51  class DtFileCache;
52  class DtMessageDispatcher;
53  class DtProctor;
54  class DtRenderer;
55  class DtScene;
56  class DtVirtualBaseClass;
57  class DtSchemaManager;
58  class DtStatsSet;
59 
64  {
65  public:
66 
67  friend class DtDeProctor;
68 
70  typedef std::vector<std::pair<DtDeError,bool> > DeErrors;
71 
72  public:
73 
75  DtDe();
76 
78  void buildPerformanceStats();
79 
82  virtual ~DtDe();
83 
87  bool destructing();
88 
92  virtual void setDeInitializer(const DtDeInitializer& initializer);
93 
98  virtual void setPathConfiguration(const DtDePathConfiguration& pathConfig);
99 
102  {
103  Initialized = 1,
104  UnableToInitialize = 0,
105  UnableToInitializeDueToLicense = -1
106  };
107 
113  virtual InitializationResult initialize();
114 
116  bool initialized() const;
117 
121  DtThreadId threadId();
122 
128  virtual void setDeConfiguration(const DtDeConfiguration& deConfig);
129 
138  virtual void tick(double simTime);
139 
143  inline void retick() { tick(simulationTime()); }
144 
148  virtual bool timeToStop() const;
149 
151  virtual void setTimeToStop(bool flag = true);
152 
154  virtual void quit();
155 
157  virtual void reset();
158 
160  void updateScene();
161 
163 
164 
166  virtual const DtDeConfiguration& deConfiguration() const;
167 
170  virtual DtDeCommunicator& igCommunicator();
171 
173  DtMainEventQueue& mainEventQueue();
174 
177  virtual DtDisplay* display();
178 
183  virtual DtScene& scene();
184 
188  virtual DtDataBank& dataBank();
189 
193  virtual DtDriverManager& driverManager();
194 
196  bool driverManagerCreated() const;
197 
199  virtual DtMessageDispatcher& dispatcher();
200 
202  inline DtDebugLog& log() { return myDebugLog; }
203 
206  DtAgentManager& agentManager();
207 
209  virtual double simulationTime() const;
210 
212  virtual int displayCount() const;
213 
215  virtual const DtDeInitializer& deInitializer() const;
216 
218  virtual const DtDePathConfiguration& dePathConfiguration() const;
219 
221  virtual bool isInMasterMode() const;
222 
224  virtual bool isInSlaveMode() const;
225 
227  virtual DtDeSharedState& sharedState();
228 
231  virtual const DtSchemaManager& schemaManager() const;
232  virtual DtSchemaManager& schemaManager();
233 
235  virtual DtFileCache* fileCache();
236 
238  virtual const DeErrors& deErrors() const;
239 
241  virtual void clearDeErrors();
242 
244  virtual DtRenderer& renderer() const;
245 
247  bool renderFrameThisTick() const;
248 
250 
252 
253 
257  virtual bool addDisplayConfiguration(const DtDisplayConfiguration&);
258 
268  virtual void realizeDisplayConfiguration(const std::string& clientName,
269  const std::string& displayName);
270 
273  virtual void destroyDisplay(DtDisplayProxySP display);
274 
277  virtual void destroyDisplay(const std::string& displayName);
278 
280  virtual void destroyAllDisplays();
281 
283  virtual bool modifyDisplay( const std::string& displayName,
284  const DtDisplayConfiguration& config );
285 
287 
289 
290 
293  virtual void setSimulationTime(double time);
294 
298  virtual double systemTime();
299 
301  typedef DtVirtualBaseClass& (*StaticInstanceFunction)(DtDe&);
302 
305  virtual DtVirtualBaseClass* findFastInstance(
306  StaticInstanceFunction classInstanceFunction) const;
307 
311  template <typename Class>
312  DtVirtualBaseClass* findFastInstance(Class& (*staticInstFunc)(DtDe&)) const
313  {
314  return findFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc));
315  }
316 
319  virtual void registerFastInstance(
320  StaticInstanceFunction classInstanceFunction, DtVirtualBaseClass* inst);
321 
325  template <typename Class>
326  void registerFastInstance(Class& (*staticInstFunc)(DtDe&),DtVirtualBaseClass* inst)
327  {
328  registerFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc),inst);
329  }
330 
333  virtual DtVirtualBaseClass* findInstance(
334  const std::string& instanceName) const;
335 
345  virtual void registerInstance(const std::string& instanceName,
346  DtVirtualBaseClass* instance);
347 
349  virtual void registerProctor(unsigned short handlerId,DtProctor*);
350 
353  virtual void unregisterProctor(unsigned short handlerId);
354 
356  DtProctor* findProctor(unsigned short handlerId) const;
357 
360  DtDisplayProxySP findDisplay(const std::string& displayName );
361 
363  virtual DtDisplayProxySP findDisplayByIndex(int index);
364 
366  void setRenderFrameThisTick(bool update);
367 
369  virtual bool isValidDisplayConfiguration( const DtDisplayConfiguration& dec );
370 
372 
373  //
375 
376 
382  boost::signal<void ()> signal_initializeDefaultState;
383 
388  boost::signal<void ()> signal_postInitialize;
389 
395  boost::signal<void (DtDe&)> signal_preTick;
396 
402  boost::signal<void ()> signal_postTick;
403 
406  boost::signal<void (const std::string&, const std::string&)>
408 
412  boost::signal<void (const DtDisplayConfiguration&)> signal_displayConfigurationAdded;
413 
417  boost::signal<void (const std::string&)> signal_displayToBeDestroyed;
418 
422  boost::signal<void (const std::string&, const DtDisplayConfiguration&)>
424 
428  boost::signal<void (const std::string&, const DtWindowConfiguration&)>
430 
435  boost::signal<void (const std::string&, const std::string&)>
437 
441  boost::signal<void (const std::string&, const std::string&,
443 
447  boost::signal<void (const std::string&, const std::string&,
449 
453  boost::signal<void (const std::string&, const std::string&,
454  const std::string&)> signal_channelToBeDestroyed;
455 
459  boost::signal<void (const std::string&, const std::string&,
460  const std::string&, const DtChannelConfiguration&)>
462 
465  boost::signal<void (const DtDeError& error, bool critical)> signal_deError;
466 
469  boost::signal<void ()> signal_quit;
470 
472 
473  //
475 
476 
478  virtual void onSlaveConnected(const std::string& igName);
479 
481  virtual void emitDeError(const DtDeError& error, bool criticalError);
482 
484 
487  static const char* className();
488 
491  void registerInitFunction(void* address);
492 
494  bool isInitFunctionRegistered(void* address);
495 
498  inline bool shouldSendMesssage()
499  {
500  return isInMasterMode() && myCommunicator && !myCommunicator->masterIgOnly();
501  }
502 
504  const DtStatsSet& lastTickStatistics() const;
505 
507  DtStatsSet& lastTickStatistics();
508 
509  protected:
510 
512 
513 
515  virtual unsigned int countEmbeddedWindows( const DtDisplayConfiguration &dec );
516 
518  virtual void timingFinishTick();
519 
521  virtual void timingFinishBetweenTicks();
522 
524 
525 
526  virtual void initializeSchemaManager();
527 
528  virtual void initializeLibXmlIfNecessary();
529 
532  virtual bool shouldSkipThisTick( double simulationTime );
533 
535  virtual void postInitialize();
536 
538  virtual void postInitializeMaster();
539 
541  virtual void checkForData();
542 
544 
545  //Default implementation of a slave's tick.
546  void slaveTick();
547 
548  //Default implementation of a master's tick.
549  void masterTick( double simulationTime );
550 
552  void renderTick();
553 
555  DtDeProctor* proctor();
556 
558  virtual bool local_realizeDisplayConfiguration(
559  const std::string& clientName, const std::string& displayName);
560 
563  virtual void local_destroyDisplay(const std::string& displayName);
564 
566  virtual bool local_modifyDisplay( const std::string& displayName,
567  const DtDisplayConfiguration& config );
568 
570  void createDisplay(DtDisplayConfiguration&);
571 
573  void createIgCommunicator( DtDriverConfiguration& config);
574 
576  void destroyDisplay();
577 
579  bool local_addDisplayConfiguration( const DtDisplayConfiguration& dec);
580 
581 
583 
584  protected:
585 
587  typedef std::vector<void*> InitFunctionVector;
588 
589  typedef std::map<std::string,DtVirtualBaseClass*> RootedSingletonMap;
590  typedef std::map<StaticInstanceFunction,DtVirtualBaseClass*> FastRootedSingletonMap;
591 
592  typedef std::map<std::string,DtDisplayProxyWP> DisplayEngineProxyMap;
593 
594  protected:
595 
596  static const char* myClassName;
597 
602  bool myStopFlag;
619 
622 
629 
630  mutable std::string myLastInstanceName;
631  mutable RootedSingletonMap::const_iterator myLastInstance;
632 
635  DtThreadId myThreadId;
636 
638  };
639 
640 
641  template <typename ManagerClass>
642  void defaultManagerRegisterInstanceFunction(DtDe& de, ManagerClass* mgr);
643 
678  template <typename ManagerClass>
679  ManagerClass& defaultManagerInstanceFunction(DtDe& de, bool allowedInSlave)
680  {
681  ManagerClass* mgr = dynamic_cast<ManagerClass*>
682  (de.findFastInstance(&ManagerClass::instance));
683 
684  if(!mgr)
685  {
686  //Require that manager is created before de is initialized.
687  if(de.initialized())
688  {
689  DtTHROW_NEW(DtCorruptedState,
690  "Manager created after display engine was initialized.");
691  }
692 
693  if(!allowedInSlave && de.isInSlaveMode())
694  {
695  DtTHROW_NEW(DtCorruptedState, "Create unsupported manager in slave.");
696  }
697 
698  //Create and register the manager.
699  mgr = new ManagerClass(de);
701  }
702  return *mgr;
703  }
704 
716  template <typename ManagerClass>
717  void defaultManagerRegisterInstanceFunction(DtDe& de, ManagerClass* mgr)
718  {
719  //Always override before init.
720  if(de.initialized())
721  {
722  DtTHROW_NEW(DtCorruptedState,
723  "Manager created after display engine was initialized.");
724  }
725 
726  de.registerFastInstance(&ManagerClass::instance,mgr);
727 
730  mgr->myConnections.manageConnection(
731  de.signal_initializeDefaultState.connect(boost::bind(
732  &ManagerClass::loadDefaults,mgr)));
733  }
734 
735 }

Document ID: Generated on Mon Apr 8 19:24:01 EDT 2013 from SVN revision 125877
Copyright © 2005-2013 VT MÄK. All Rights Reserved (www.mak.com)