VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtStreamedSpeedTreeThread.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2022 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvSt/vrvSt.h>
13 
15 
16 #include <vrvCore/DtTreeRecord.h>
17 
19 
21 
22 #include <tbb/atomic.h>
23 #include <tbb/concurrent_queue.h>
24 
25 #include <unordered_set>
26 #include <unordered_map>
27 #include <thread>
28 
29 #include <deque>
30 
31 namespace osg
32 {
33  class Node;
34  class RenderInfo;
35  class EllipsoidModel;
36 }
37 
38 namespace osgUtil
39 {
40  class SceneView;
41 }
42 
43 namespace makVrv
44 {
45  class DtDe;
46  class DtStreamedSpeedTreeForest;
47 
51  {
52  public:
54  static DtStreamedSpeedTreeThread& instance(DtDe& de);
55 
57  virtual ~DtStreamedSpeedTreeThread();
58 
59  private:
61  DtStreamedSpeedTreeThread() = delete;
62 
64 
65  DtStreamedSpeedTreeThread& operator=(const DtStreamedSpeedTreeThread& rhs) = delete;
66  public:
68  typedef std::unordered_set<const osg::Node*> NodeSet;
69 
71  typedef std::unordered_set<DtStreamedSpeedTreeForest*> ForestSet;
72 
74  typedef std::unordered_set<std::string> StringSet;
75 
76  public:
77 
79  virtual void setForestDeleted(DtStreamedSpeedTreeForest* forest);
80 
82  virtual void setNodeUnloaded(const osg::Node* node);
83 
85  virtual void enqueue(DtStreamedSpeedTreeForest* forest
86  , const osgEarth::CustomFeatureNode* featureNode
87  , const osg::Node* dataNode
88  , bool useScaleRandomization
89  , bool useOrientationRandomization
90  , float treeMinScale
91  , float treeMaxScale);
92 
93  virtual bool workToDo(void) const;
94  protected:
97 
101  virtual void processMessage(const DtTreeRequestMessage& msg);
102 
107  virtual void mergeTreeRequests(DtStreamedSpeedTreeForest* forest
108  , const osg::Node* node);
109 
111  virtual bool isForestDeleted(DtStreamedSpeedTreeForest* forest) const;
112 
114  virtual bool isNodeUnloaded(const osg::Node* node) const;
115 
116  virtual double rotationAngleFromGeocentricQuaternion(const osg::Quat& rotation,
117  const osg::Vec3d& location) const;
118 
120  virtual std::size_t hash_value(const std::string& modelDefName,
122 
124  virtual void run();
125 
127  virtual DtTreeRecord* getTreeRecordFromPool(void);
128 
130  virtual void returnTreeRecordToPool(DtTreeRecord* treeRecord);
131 
132  protected:
134 
138  tbb::concurrent_bounded_queue<DtTreeRequestMessage*> myMessageQueue;
139 
141  tbb::atomic< bool> myStopWork;
142 
143  std::thread myWorkerThread;
144 
149 
155 
161 
162  osg::EllipsoidModel* myEllipsoidModel;
163 
164  std::unordered_map<std::string, std::string> myModelDefinitionCache;
165 
167  std::unordered_map<std::string, std::vector<DtTreeRecord*> > myScratchModelDefsToTreesToAdd;
168 
170  std::deque<DtTreeRecord*> myTreeRecordPool;
171  };
172 }
DtDe & myDe
Definition: DtStreamedSpeedTreeThread.h:133
Virtual base class. Allows for RTTI and proper virtual destruction. Used by Creators, Factories, Providers, Assemblers and User Interfaces.
Definition: DtVirtualBaseClass.h:19
DtStreamedSpeedTreeForest manages the streaming management for The DtSpeedTreeForest that is contains...
Definition: DtStreamedSpeedTreeForest.h:51
#define DT_DLL_VRVST
Definition: vrvSt.h:20
tbb::atomic< bool > myStopWork
Flag to tell the merging to stop.
Definition: DtStreamedSpeedTreeThread.h:141
std::unordered_set< DtStreamedSpeedTreeForest * > ForestSet
Set of forests.
Definition: DtStreamedSpeedTreeThread.h:71
std::unordered_map< std::string, std::vector< DtTreeRecord * > > myScratchModelDefsToTreesToAdd
worksspace
Definition: DtStreamedSpeedTreeThread.h:167
Contains DLL export macros.
NodeSet myUnloadedNodes
Set of unloaded feature request nodes.
Definition: DtStreamedSpeedTreeThread.h:160
std::deque< DtTreeRecord * > myTreeRecordPool
use pool to avoid fragmentation/repeated news/deletes
Definition: DtStreamedSpeedTreeThread.h:170
StringSet myValidModelDefinitions
Cache of valid SpeedTree model definitions.
Definition: DtStreamedSpeedTreeThread.h:148
The Filter pushes these onto the CustomFeatureNode&#39;s MarkerRequestList.
Definition: CustomFeatureNode.h:51
A DtTreeRecord holds the requisite information needed to create a tree in a forest.
Definition: DtTreeRecord.h:30
Contains makVrv::DtVirtualBaseClass class.
A message to convert some tree requests into tree records.
Definition: DtTreeRequestMessage.h:23
osg::EllipsoidModel * myEllipsoidModel
Definition: DtStreamedSpeedTreeThread.h:162
Custom Feature Node.
Definition: CustomFeatureNode.h:43
Contains the CustomFeatureNode class declaration.
std::thread myWorkerThread
Definition: DtStreamedSpeedTreeThread.h:143
std::unordered_map< std::string, std::string > myModelDefinitionCache
Definition: DtStreamedSpeedTreeThread.h:164
Thread object to convert tree marker requests into tree records in a worker thread.
Definition: DtStreamedSpeedTreeThread.h:50
ForestSet myDeletedForests
Set of deleted forest objects.
Definition: DtStreamedSpeedTreeThread.h:154
std::unordered_set< const osg::Node * > NodeSet
Set of request nodes.
Definition: DtStreamedSpeedTreeThread.h:68
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:72
std::unordered_set< std::string > StringSet
Set of model definition names.
Definition: DtStreamedSpeedTreeThread.h:74
tbb::concurrent_bounded_queue< DtTreeRequestMessage * > myMessageQueue
Queue of marker request messages.
Definition: DtStreamedSpeedTreeThread.h:138
std::size_t hash_value(DtUnicode const &val)
Definition: DtUnicode.h:325
Contains makVrv::DtTreeRecord class.

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)