VR-Forces 4.5 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 
13 #include <vrvCore/DtDisplayProxy.h>
14 
16 
17 #include <vlutil/vlThreadSysWrapper.h>
18 
19 #include <vector>
20 
21 #include <boost/bind.hpp>
22 
25 #define DT_DE_INIT_ONCE(de)\
26 if(de.isInitFunctionRegistered((void*)&init))\
27 {\
28  return;\
29 }\
30 else\
31 {\
32  de.registerInitFunction((void*)&init);\
33 }
34 
35 class DtClock;
36 
37 namespace makVrv
38 {
39  class DtAgentManager;
40  class DtDataBank;
41  class DtDeProctor;
42  class DtDeSharedState;
43  class DtDisplay;
44  class DtDriverManager;
45  class DtFileCache;
46  class DtMessageDispatcher;
47  class DtProctor;
48  class DtRenderer;
49  class DtScene;
50  class DtVirtualBaseClass;
51  class DtSchemaManager;
52  class DtStatsSet;
53  class DtDeError;
54  class DtDisplayConfiguration;
55  class DtWindowConfiguration;
56  class DtChannelConfiguration;
57  class DtDriverConfiguration;
58  class DtSynchronizedTimeManager;
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 
79  virtual ~DtDe();
80 
84  bool destructing();
85 
89  virtual void setDeInitializer(const DtDeInitializer& initializer);
90 
95  virtual void setPathConfiguration(const DtDePathConfiguration& pathConfig);
96 
99  {
100  Initialized = 1,
101  UnableToInitialize = 0,
102  UnableToInitializeDueToLicense = -1
103  };
104 
117  virtual InitializationResult initialize( bool abortOnLicenseFailure = true, bool useLicenseErrorDialog=true );
118 
120  bool initialized() const;
121 
125  DtThreadId threadId();
126 
132  virtual void setDeConfiguration(const DtDeConfiguration& deConfig);
133 
142  virtual void tick(double simTime);
143 
147  inline void retick() { tick(simulationTime()); }
148 
152  virtual bool timeToStop() const;
153 
155  virtual void setTimeToStop(bool flag = true);
156 
158  virtual void quit();
159 
161  virtual void reset();
162 
164  void updateScene();
165 
167 
168 
170  virtual const DtDeConfiguration& deConfiguration() const;
171 
174  virtual DtDeCommunicator& igCommunicator();
175 
177  DtMainEventQueue& mainEventQueue();
178 
181  virtual DtDisplay* display();
182 
187  virtual DtScene& scene();
188 
192  virtual DtDataBank& dataBank();
193 
197  virtual DtDriverManager& driverManager();
198 
200  bool driverManagerCreated() const;
201 
203  virtual DtMessageDispatcher& dispatcher();
204 
206  inline DtDebugLog& log() { return myDebugLog; }
207 
210  DtAgentManager& agentManager();
211 
213  bool agentManagerCreated() const;
214 
216  virtual double simulationTime() const;
217 
220  virtual double syncedTime() const;
221 
225  virtual DtSynchronizedTimeManager* findSynchronizedTimeManager();
226 
228  virtual int displayCount() const;
229 
231  virtual const DtDeInitializer& deInitializer() const;
232 
234  virtual const DtDePathConfiguration& dePathConfiguration() const;
235 
237  virtual bool isInMasterMode() const;
238 
240  virtual bool isInSlaveMode() const;
241 
243  virtual DtDeSharedState& sharedState();
244 
247  virtual const DtSchemaManager& schemaManager() const;
248  virtual DtSchemaManager& schemaManager();
249 
251  virtual DtFileCache* fileCache();
252 
254  virtual const DeErrors& deErrors() const;
255 
257  virtual void clearDeErrors();
258 
260  virtual DtRenderer& renderer() const;
261 
263  bool renderFrameThisTick() const;
264 
268  virtual bool licenseAvailable() const;
269 
271 
273 
274 
278  virtual bool addDisplayConfiguration(const DtDisplayConfiguration&);
279 
289  virtual void realizeDisplayConfiguration(const std::string& clientName,
290  const std::string& displayName);
291 
294  virtual void destroyDisplay(DtDisplayProxySP display);
295 
298  virtual void destroyDisplay(const std::string& displayName);
299 
301  virtual void destroyAllDisplays();
302 
304  virtual bool modifyDisplay( const std::string& displayName,
305  const DtDisplayConfiguration& config );
306 
308 
310 
311 
314  virtual void setSimulationTime(double time);
315 
319  virtual double systemTime() const;
320 
322  typedef DtVirtualBaseClass& (*StaticInstanceFunction)(DtDe&);
323 
326  virtual DtVirtualBaseClass* findFastInstance(
327  StaticInstanceFunction classInstanceFunction) const;
328 
332  template <typename Class>
333  DtVirtualBaseClass* findFastInstance(Class& (*staticInstFunc)(DtDe&)) const
334  {
335  return findFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc));
336  }
337 
340  virtual void registerFastInstance(
341  StaticInstanceFunction classInstanceFunction, DtVirtualBaseClass* inst);
342 
346  template <typename Class>
347  void registerFastInstance(Class& (*staticInstFunc)(DtDe&),DtVirtualBaseClass* inst)
348  {
349  registerFastInstance(reinterpret_cast<StaticInstanceFunction>(staticInstFunc),inst);
350  }
351 
354  virtual DtVirtualBaseClass* findInstance(
355  const std::string& instanceName) const;
356 
366  virtual void registerInstance(const std::string& instanceName,
367  DtVirtualBaseClass* instance);
368 
370  virtual void registerProctor(unsigned short handlerId,DtProctor*);
371 
374  virtual void unregisterProctor(unsigned short handlerId);
375 
377  DtProctor* findProctor(unsigned short handlerId) const;
378 
381  DtDisplayProxySP findDisplay(const std::string& displayName );
382 
384  virtual DtDisplayProxySP findDisplayByIndex(int index);
385 
387  void setRenderFrameThisTick(bool update);
388 
390  virtual bool isValidDisplayConfiguration( const DtDisplayConfiguration& dec );
391 
393 
394  //
396 
397 
403  boost::signal<void ()> signal_initializeDefaultState;
404 
409  boost::signal<void ()> signal_postInitialize;
410 
416  boost::signal<void (DtDe&)> signal_preTick;
417 
423  boost::signal<void ()> signal_postTick;
424 
427  boost::signal<void (const std::string&, const std::string&)>
429 
433  boost::signal<void (const DtDisplayConfiguration&)> signal_displayConfigurationAdded;
434 
438  boost::signal<void (const std::string&)> signal_displayToBeDestroyed;
439 
443  boost::signal<void (const std::string&, const DtDisplayConfiguration&)>
445 
449  boost::signal<void (const std::string&, const DtWindowConfiguration&)>
451 
456  boost::signal<void (const std::string&, const std::string&)>
458 
462  boost::signal<void (const std::string&, const std::string&,
464 
468  boost::signal<void (const std::string&, const std::string&,
470 
474  boost::signal<void (const std::string&, const std::string&,
475  const std::string&)> signal_channelToBeDestroyed;
476 
480  boost::signal<void (const std::string&, const std::string&,
481  const std::string&, const DtChannelConfiguration&)>
483 
486  boost::signal<void (const DtDeError& error, bool critical)> signal_deError;
487 
490  boost::signal<void ()> signal_quit;
491 
493 
494  //
496 
497 
499  virtual void onSlaveConnected(const std::string& igName);
500 
502  virtual void emitDeError(const DtDeError& error, bool criticalError);
503 
505 
508  static const char* className();
509 
512  void registerInitFunction(void* address);
513 
515  bool isInitFunctionRegistered(void* address);
516 
519  inline bool shouldSendMesssage()
520  {
521  return isInMasterMode() && myCommunicator && !myCommunicator->masterIgOnly();
522  }
523 
524  inline void setPagedLodMagnificationScaleFactor( float factor )
525  {
526  myPagedLodMagnificationScaleFactor = factor;
527  }
528 
529  inline float pagedLodMagnificationScaleFactor() const
530  {
531  return myPagedLodMagnificationScaleFactor;
532  }
533 
534  protected:
535 
537 
538 
540  virtual unsigned int countEmbeddedWindows( const DtDisplayConfiguration &dec );
541 
543 
544 
545  virtual void initializeSchemaManager();
546 
547  virtual void initializeLibXmlIfNecessary();
548 
551  virtual bool shouldSkipThisTick( double simulationTime );
552 
554  virtual void postInitialize();
555 
557  virtual void postInitializeMaster();
558 
560  virtual void checkForData();
561 
563 
564  //Default implementation of a slave's tick.
565  void slaveTick();
566 
567  //Default implementation of a master's tick.
568  void masterTick( double simulationTime );
569 
571  void renderTick();
572 
574  DtDeProctor* proctor();
575 
577  virtual bool local_realizeDisplayConfiguration(
578  const std::string& clientName, const std::string& displayName);
579 
582  virtual void local_destroyDisplay(const std::string& displayName);
583 
585  virtual bool local_modifyDisplay( const std::string& displayName,
586  const DtDisplayConfiguration& config );
587 
589  void createDisplay(DtDisplayConfiguration&);
590 
592  void createIgCommunicator( DtDriverConfiguration& config);
593 
595  void destroyDisplay();
596 
598  bool local_addDisplayConfiguration( const DtDisplayConfiguration& dec);
599 
600 
602 
603  protected:
604 
606  typedef std::vector<void*> InitFunctionVector;
607 
608  // Normal map here since add/remove order matters for destruction order
609  typedef std::map<std::string,DtVirtualBaseClass*> RootedSingletonMap;
610  typedef std::map<StaticInstanceFunction,DtVirtualBaseClass*> FastRootedSingletonMap;
611 
612  typedef std::map<std::string,DtDisplayProxyWP> DisplayEngineProxyMap;
613 
614  protected:
615 
616  static const char* myClassName;
617 
622  bool myStopFlag;
639 
642 
649 
650  mutable std::string myLastInstanceName;
651  mutable RootedSingletonMap::const_iterator myLastInstance;
652 
653  DtThreadId myThreadId;
654 
657 
659  {
660  NoLicense = -1,
661  Master3D_License = 0,
662  XR_License = 1,
663  PVD_License = 2
664  };
665 
667 
668  //temporary until this becomes a render setting (maybe)
671  };
672 
673 
674  template <typename ManagerClass>
675  void defaultManagerRegisterInstanceFunction(DtDe& de, ManagerClass* mgr);
676 
711  template <typename ManagerClass>
712  ManagerClass& defaultManagerInstanceFunction(DtDe& de, bool allowedInSlave)
713  {
714  ManagerClass* mgr = dynamic_cast<ManagerClass*>
715  (de.findFastInstance(&ManagerClass::instance));
716 
717  if(!mgr)
718  {
719  //Require that manager is created before de is initialized.
720  if(de.initialized())
721  {
722  DtTHROW_NEW(DtCorruptedState,
723  "Manager created after display engine was initialized.");
724  }
725 
726  if(!allowedInSlave && de.isInSlaveMode())
727  {
728  DtTHROW_NEW(DtCorruptedState, "Create unsupported manager in slave.");
729  }
730 
731  //Create and register the manager.
732  mgr = new ManagerClass(de);
734  }
735  return *mgr;
736  }
737 
749  template <typename ManagerClass>
750  void defaultManagerRegisterInstanceFunction(DtDe& de, ManagerClass* mgr)
751  {
752  //Always override before init.
753  if(de.initialized())
754  {
755  DtTHROW_NEW(DtCorruptedState,
756  "Manager created after display engine was initialized.");
757  }
758 
759  de.registerFastInstance(&ManagerClass::instance,mgr);
760 
763  mgr->myConnections.manageConnection(
764  de.signal_initializeDefaultState.connect(boost::bind(
765  &ManagerClass::loadDefaults,mgr)));
766  }
767 
768 }

Document ID: Generated on Thu Mar 23 18:54:12 EDT 2017 from SVN revision 174804
Copyright © 2005-2017 VT MÄK. All Rights Reserved (www.mak.com)