VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtSpeedTreeForest.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvSt/vrvSt.h>
15 #include <vrvCore/DtTreeRecord.h>
16 #include <vrvCore/DtForestObject.h>
17 #include <osg/ref_ptr>
18 #include <osg/PositionAttitudeTransform>
19 #include <osg/Geode>
20 #include <osg/BoundingBox>
21 
22 #include <OsgST_Forest.h>
23 
24 #include <boost/unordered_set.hpp>
25 
26 #include <tbb/mutex.h>
27 
28 namespace makOsgSpeedTree
29 {
30  class TreeInstance;
31  struct TreeInstanceDescriptor;
32 }
33 
34 namespace makVrv
35 {
36  class DtAgentUpdateResolverInterface;
37  class DtSpeedTreeModelInstance;
38  class DtSpeedTreeCore;
39  class DtEnvironmentInfo;
40  class DtOsgCullVisitorParameters;
41  class DtGlDebugGroup;
42  class DtCoordinateConverter;
43 
48  {
49  public:
50  friend class DtSpeedTreeForestClassesCreator;
52 
53  public:
54  //Destructor
55  virtual ~DtSpeedTreeForest();
56 
57  protected:
58 
62  DtSpeedTreeForest(DtDe& de, DtUniqueID id, const std::string& strVisManagerType);
63 
64  private:
70  DtSpeedTreeForest &operator=(const DtSpeedTreeForest &other);
71 
72  public:
73 
74  virtual void addUniqueTree(DtTreeRecord& record);
75  virtual void removeTree(DtUniqueID record);
76  virtual void removeAllTrees();
77 
78  virtual DtUniqueID addUniqueTreesToUniqueCell(
79  DtVectorTreeRecords& records, bool use_time_limit, bool *out_of_time = NULL);
80  virtual void removeAllUniqueTreesAndUniqueCell(DtUniqueID cellID);
81 
82  virtual void setTreeClippingPlane(float fFar);
83  virtual void getTreeClippingPlane( float& fFar );
84 
85  virtual void setTree3DLodDistances(float fNear, float fFar);
86  virtual void getTree3DLodDistances( float& fNear, float& fFar );
87 
88  virtual void setTreeBillboardDistances(float fStart, float fEnd);
89  virtual void getTreeBillboardDistances(float& fStart, float& fEnd);
90 
92  virtual void setBillboardFadeOutRange(float fRange);
94  virtual void getBillboardFadeOutRange(float& fRange);
95 
96  virtual void enableBillboardRendering(bool enable);
97  virtual bool isBillboardRenderingEnabled() const;
98 
99  virtual void enable3DTreeRendering(bool enable);
100  virtual bool is3DTreeRenderingEnabled() const;
101 
102  virtual void enableReceiveShadows(bool enable);
103  virtual bool isReceiveShadowsEnabled() const { return myReceiveShadows; }
104 
105  void setBoundingBox(const osg::BoundingBox& box);
106  const osg::BoundingBox& getBoundingBox(void) const;
107 
110  osg::ref_ptr<osg::Node> getRootNode(void);
111 
114  void programBoundCallback(osg::ref_ptr<makOsgSpeedTree::Forest> pForest,
115  const makOsgSpeedTree::TreeType* pTreeType, uint32 programID);
116 
119  virtual void slot_reloadShaders();
120 
122  virtual void slot_treeProfilingChanged(bool active);
123 
125  virtual void slot_useGlobalAmbientChanged(bool enabled);
126 
128  virtual void slot_useGlobalDiffuseChanged(bool enabled);
129 
132  virtual void slot_perPixelLightingEnabledChanged(bool enabled);
133 
135  virtual void slot_planarReflectionsShowSpeedTreesChanged(bool enabled);
136 
138  virtual void processUnitialized();
139 
141  virtual bool initialized();
142 
144  virtual tbb::mutex& mergeDrawMutex();
145 
147  virtual tbb::mutex& mergeUpdateMutex();
148 
150  osg::ref_ptr<makOsgSpeedTree::Forest>& makSpeedTreeForest();
151 
154  virtual void preCullSetup(osg::ref_ptr<makOsgSpeedTree::Forest> forest, osg::Camera* camera);
155 
156  protected:
157 
158  void init(const std::string& strVisManagerType);
159 
160  // The tree scale from the .earth file and the terrain patch
161  // are applied in DtStreamedSpeedTreeThread::handleRequest
162  // However, the user could also set the model definition
163  // scale. Store model def scale when we store the ST file name
164  // so we can multiply it into the record.scale().
166  {
167  std::string strSRTFileName;
169  };
170 
171  protected:
172  void connectSignals(void);
173 
174  osg::Vec3f computeWindDirection(float fDirection);
175 
176  void setWindStrength(float fStrength);
177  void setWindDirection(float fDirection);
178 
180  bool preUpdateCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest);
181 
182  bool preRenderCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest,
183  osg::RenderInfo& renderInfo);
184  void postRenderCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest,
185  osg::RenderInfo& renderInfo);
186  void provideTimeCallback(osg::ref_ptr<makOsgSpeedTree::Forest> forest,
187  double& fTime);
188 
189  void pushGraphicsState(osg::RenderInfo& renderInfo);
190  void popGraphicsState(osg::RenderInfo& renderInfo);
191 
193  virtual DtModelDefinition* findModelDefinition(
194  const std::string& modelDef);
195 
197  bool createTree(DtTreeRecord& record);
198 
201  void initTreeDesc(makOsgSpeedTree::TreeInstanceDescriptor& desc,
202  DtTreeRecord& record, const DtVector& up, DtCoordinateConverter* converter);
205  void initTreeDesc(makOsgSpeedTree::TreeInstanceDescriptor& desc,
206  DtTreeRecord& record, DtCoordinateConverter* converter, bool setupTopoFrame=true);
207  void applyModelDefParameters(makOsgSpeedTree::TreeInstanceDescriptor& desc,
208  DtTreeRecord& record);
209 
210  protected:
211  static DtOsgCullVisitorParameters* getCullParameters(
212  osg::RenderInfo& renderInfo);
213 
214  static bool isCameraOrthographic(DtOsgCullVisitorParameters* params);
215 
217  static bool isReflectionCamera(osg::Camera *camera);
218 
219  static float getZoomFactor(DtOsgCullVisitorParameters* params, DtDe& de);
220 
221  protected:
222 
223  static const float myCellSize;
224 
225  //Static members used by imgui to keep track of the ImGui state.
226  static unsigned int theLastImGuiFrameNumber;
227  static bool theEnableAsyncUpdate;
228 
229  protected:
230  makOsgSpeedTree::TreeInstanceDescriptor myScratchTreeInstanceDesc;
231  makOsgSpeedTree::TreeInstanceDescriptorCollection
233  makOsgSpeedTree::TreeInstanceCollection myScratchInstanceCollection;
234 
235  typedef std::map<std::string, ModelDefParams> MapModelDefToSTFileName;
237 
239 
240  osg::Camera* myCamera;
241 
243 
244  boost::unordered_map<int, bool> myShaderBoundMap;
245 
246  float myFarPlane;
247 
252  osg::BoundingBox myBoundingBox;
255 
256  typedef boost::unordered_map<DtUniqueID,
257  makOsgSpeedTree::TreeInstanceCollection> MapCellsToTrees;
259 
260  typedef boost::unordered_map<DtUniqueID, makOsgSpeedTree::TreeInstance*>
263 
265  unsigned int myLastShaderHash;
266 
269 
272 
274 
276 
277  // REMOVE POST UBO CHANGE:
279 
280  osg::GLExtensions * myExt;
282 
283  // Couple mutexes to avoid thread safety issues.
284  // The merge draw mutex should be moved down into the vis manager but this
285  // was the safer and lower risk option at the moment.
289 
292 
294  };
295 
300  {
301  public:
304 
305  private:
310 
311  public:
313  virtual DtForestObject* create(DtDe& de, DtUniqueID id);
314 
316  virtual DtForestObject* create(DtDe& de, DtUniqueID id, const std::string& strVisManagerType);
317  };
318 }
DtSpeedTreeForestObjectCreator is the SpeedTree implementation of a DtForestObjectCreator.
Definition: DtSpeedTreeForest.h:299
const std::string mySpeedTreeMultiViewUserFuncsVertexShader
Definition: DtSpeedTreeForest.h:273
MapModelDefToSTFileName myMapModelDefToSTFileName
Definition: DtSpeedTreeForest.h:236
osg::GLExtensions * myExt
Definition: DtSpeedTreeForest.h:280
static bool theEnableAsyncUpdate
Definition: DtSpeedTreeForest.h:227
static unsigned int theLastImGuiFrameNumber
Definition: DtSpeedTreeForest.h:226
The DtEnvironmentInfo class is responsible for holding data related to the environment such as sky li...
Definition: DtEnvironmentInfo.h:25
float myFarPlane
Definition: DtSpeedTreeForest.h:246
bool myShouldUpdateThisFrame
Definition: DtSpeedTreeForest.h:293
#define DT_DLL_VRVST
Definition: vrvSt.h:23
std::string strSRTFileName
Definition: DtSpeedTreeForest.h:167
DtCoordinateConverter is the base class for &#39;local (cig) to geocentric&#39; converters.
Definition: DtCoordinateConverter.h:25
bool myReloadShaders
Should we reload the SpeedTree shaders.
Definition: DtSpeedTreeForest.h:268
makOsgSpeedTree::TreeInstanceDescriptor myScratchTreeInstanceDesc
Definition: DtSpeedTreeForest.h:230
boost::unordered_map< DtUniqueID, makOsgSpeedTree::TreeInstanceCollection > MapCellsToTrees
Definition: DtSpeedTreeForest.h:257
const std::string mySpeedTreeDefaultUserFuncsPixelShader
Definition: DtSpeedTreeForest.h:271
makOsgSpeedTree::TreeInstanceCollection myScratchInstanceCollection
Definition: DtSpeedTreeForest.h:233
Contains DLL export macros.
std::vector< DtTreeRecord * > DtVectorTreeRecords
Definition: DtTreeRecord.h:137
DtSpeedTreeCore & myCore
Definition: DtSpeedTreeForest.h:253
Contains makVrv::DtForestObject class.
DtForestObject provides a way to make lots of trees.
Definition: DtForestObject.h:26
osg::BoundingBox myBoundingBox
Definition: DtSpeedTreeForest.h:252
float modelDefScale
Definition: DtSpeedTreeForest.h:168
A model definition Interaction any number of named parameters, and also can be used to store cached d...
Definition: DtModelDefinition.h:33
MapTreeIDToTree myMapTreeIDtoTree
Definition: DtSpeedTreeForest.h:262
DtSpeedTreeCore wraps and provides the interface to makOsgSpeedTree.
Definition: DtSpeedTreeCore.h:28
static const float myCellSize
Definition: DtSpeedTreeForest.h:223
const std::string mySpeedTreeDefaultUserFuncsVertexShader
Definition: DtSpeedTreeForest.h:270
virtual bool isReceiveShadowsEnabled() const
Definition: DtSpeedTreeForest.h:103
A DtTreeRecord holds the requisite information needed to create a tree in a forest.
Definition: DtTreeRecord.h:30
boost::unordered_map< DtUniqueID, makOsgSpeedTree::TreeInstance * > MapTreeIDToTree
Definition: DtSpeedTreeForest.h:261
DtSpeedTreeForest is the SpeedTree implementation of a distributed DtForestObject.
Definition: DtSpeedTreeForest.h:47
DtEnvironmentInfo & myEnvInfo
Definition: DtSpeedTreeForest.h:254
bool myReceiveShadows
Definition: DtSpeedTreeForest.h:281
osg::ref_ptr< osg::PositionAttitudeTransform > myPat
Definition: DtSpeedTreeForest.h:250
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:24
The osg cull vistor parameters class provides additional culling and intersector parameters for choos...
Definition: DtOsgCullVisitorParameters.h:38
DtCoordinateConverter * myMergeBackgroundConverter
Definition: DtSpeedTreeForest.h:291
DtCoordinateConverter * myMainThreadConverter
Definition: DtSpeedTreeForest.h:290
unsigned long long DtUniqueID
Definition: DtUniqueID.h:22
MapCellsToTrees myMapCellsToTrees
Definition: DtSpeedTreeForest.h:258
osg::ref_ptr< osg::Uniform > myNormalMatrixUniform
Definition: DtSpeedTreeForest.h:278
Base class to provide boost signal/slot management.
osg::Camera * myCamera
Definition: DtSpeedTreeForest.h:240
boost::unordered_map< int, bool > myShaderBoundMap
Definition: DtSpeedTreeForest.h:244
osg::ref_ptr< makOsgSpeedTree::Forest > myForest
Definition: DtSpeedTreeForest.h:251
makOsgSpeedTree::TreeInstanceDescriptorCollection myScratchTreeInstanceDescCollection
Definition: DtSpeedTreeForest.h:232
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
DtSignalConnectionManager myConnections
Definition: DtSpeedTreeForest.h:242
int myPreviousTU
Definition: DtSpeedTreeForest.h:238
unsigned int uint32
Definition: DtCommonTypes.h:28
The DtForestObjectCreator for the DtForestObject class.
Definition: DtForestObject.h:103
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
tbb::mutex myForestMergeDrawMutex
Definition: DtSpeedTreeForest.h:286
std::map< std::string, ModelDefParams > MapModelDefToSTFileName
Definition: DtSpeedTreeForest.h:235
Contains the DtCVMarkerSeries and DtCVMarkerSeries class declarations responsible for wrapping up to ...
osg::ref_ptr< osg::Uniform > myProjectionMatrixInverseUniform
Definition: DtSpeedTreeForest.h:275
Contains makVrv::DtTreeRecord class.
unsigned int myLastShaderHash
shader hash for the last shaders passed down to SpeedTree
Definition: DtSpeedTreeForest.h:265
osg::ref_ptr< osg::Group > myRoot
The forest is a collection of trees under a group node.
Definition: DtSpeedTreeForest.h:249
Definition: DtSpeedTreeForest.h:165
tbb::mutex myForestMergeUpdateMutex
Definition: DtSpeedTreeForest.h:288
tbb::mutex myForestAddRemoveMutex
Definition: DtSpeedTreeForest.h:287

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)