VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtOsgLightPointManager.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2023 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
14 
15 #include <vrvOsg/vrvOsg.h>
18 
22 
25 
26 #include <osgSim/LightPointNode>
27 
28 #include <boost/thread.hpp>
29 #include <boost/thread/recursive_mutex.hpp>
30 #include <boost/thread/shared_mutex.hpp>
31 
32 #include <string>
33 
34 namespace osgEarth
35 {
36  class GeoPoint;
37  class MapNode;
38 }
39 
40 namespace makVrv
41 {
42  class DtDe;
43 
44  class DtGlBuffer;
45 
46  class DtLightPointNode;
47  class DtLightPointDrawable;
48 
51 
52  typedef osg::observer_ptr<osg::Node> LightPointNodeObs;
54  typedef std::set<LightPointNodeObs> LightPointNodeObsSet;
55 
57  {
58  std::string groupName = "";
59  std::string modelDefinitionName = "";
63  bool isDaylightControlled = false;
64  bool isIndirected = false;
65  bool hasDefaultGroup = false;
66  };
67 
69  {
70  float color[4];
71  float intensity[4];
72  float sectors[4];
73  float pixelSize[4];
75  float sensorSettings[4];
76  };
77 
78  //Needs to match LightPointNodeInfo in the shader
80  {
81  osg::Matrixf modelView;
82  osg::Vec4f eyeLocal;
83  int groupId;
84  float posScale;
85  float radiusScale;
87  GLuint64 textureId;
90  };
91 
93  struct LightPoint
94  {
97  unsigned int attachDrawableIx;
98  int groupId;
99  };
100 
101  enum class DtDebugLabelMode
102  {
103  LightPointTypes = 0,
105  NodeGroupIds,
107  };
108 
109  typedef std::vector<LightPoint> LightPointVec;
110 
129  {
130  public:
131 
134 
136  static DtOsgLightPointManager& instanceAsDtOsgLightPointManager(DtDe& de);
137 
138  private:
140  DtOsgLightPointManager() = delete;
141 
143  DtOsgLightPointManager(const DtOsgLightPointManager& other) = delete;
145  DtOsgLightPointManager& operator=(const DtOsgLightPointManager& other) = delete;
146 
147  public:
165  virtual void findAndRegisterLightPoints(osg::Node* node, const DtLightPointRegistrationParameters& params);
166 
184  virtual void registerLightPoints(const DtLightPointNodeAndXformVector& lightPoints
185  , const DtLightPointRegistrationParameters& params);
186 
191  virtual DtLightPointNode *createLightPointNode(osg::Node *nodeRef, bool daylightControlled);
192 
196  virtual DtGlBuffer *lightPointTypeBuffer();
197 
217  virtual DtGlBuffer *lightPointGroupBuffer();
218 
222  virtual DtGlBuffer *lightPointNodeBuffer(osg::Camera* camera);
223 
224  // !\brief updates the ssbo for the light point vertex data. This contains the light point
227  virtual void updateLightPointVertexBuffer(const std::vector<DtLightPointDrawable::LightPointVertexAttrib>& vertexAttribData, int minChanged, int maxChanged);
228 
232  virtual DtGlBuffer *lightPointVertexBufer();
233 
235  virtual int nodeId(DtLightPointNode *lpNode, int instanceId);
236 
238  virtual void slot_preTick();
239 
240  virtual void slot_attributesChanged(const DtElementAttributeManager::EntryAttributesList&);
241 
243  virtual void clearNodeBuffer(const osg::Camera* camera);
244 
246  unsigned int nodeBufferMaxNodeId(const osg::Camera *camera);
247 
251  virtual void setNodeBufferData(int nodeId, const osg::Camera *camera, const DtLightPointNodeDataLayout& nodeData);
252 
254  virtual void processImGui();
255 
257  virtual DtLightPointDrawable *masterLightPointDrawable();
258 
260  virtual bool debugLabelsEnabled() const;
261 
263  virtual bool debugDirectionEnabled() const;
264 
266  virtual bool softerLightPointsEnabled() const;
267 
269  virtual float softenIntensity() const;
270 
273  virtual void setShouldReplaceOsgSimLightPoints(bool enable);
274 
277  virtual bool shouldReplaceOsgSimLightPoints();
278 
280  virtual void freeNodeIds(std::vector<int> &nodeIds);
281 
282  virtual void releaseGLObjects(osg::State * state) const;
283 
285  virtual void setInstanceReflectionMatrix(const osg::Camera *camera, const osg::Matrixf &reflectMat);
286 
288  virtual const osg::Matrixf &instanceReflectionMatrix(const osg::Camera *camera);
289 
291  virtual bool entityInstanceGroupInformation(const std::string& modelDefinitionName
292  , const std::string& entityInstanceName, int& firstGroupId, int& numberOfLightPointGroups);
293 
295  virtual int entitySubLightPointGroupIndex(const std::string& modelDefinitionName
296  , const std::string& subLightPointGroupName);
297 
299  virtual void removeGroupsForEntityInstance(const std::string& modelDefinitionName, const std::string& entityInstanceName);
300 
302  virtual int registerNewEntityInstanceAndGetStartingGroupIdIndex(const std::string& modelDefinitionName
303  , const std::string& entityInstanceName);
304 
306  virtual bool drawLightPoints();
307 
309  virtual DtDebugLabelMode debugLabelMode() const;
310 
313  virtual const std::string searchNodeHierarchyForGroupName(osg::Node* sourceNode) const;
314 
316  boost::signalslib::signal<void(LightPointNodeObsSet&)> signal_lightPointsRegistered;
317 
319  boost::signalslib::signal<void(DtDebugLabelMode)> signal_debugLabelModeChanged;
320 
321  protected:
322 
324  virtual ~DtOsgLightPointManager();
325 
327  virtual void slot_reloadShaders();
328 
330  virtual void setupShaders();
331 
333  const std::string parseNodeGroupName(osg::Node* node) const;
334 
337  virtual LightPointNodeObsSet aggregateLightPoints(const DtLightPointNodeAndXformVector& lightPoints
338  , const DtLightPointRegistrationParameters& params);
339 
341  virtual void populateLightPointNode(osg::Node *nodeRef, DtLightPointNode *dtLpRef, bool daylightControlled
342  , bool newNode);
343 
344  virtual const std::string specialCaseSearchForCreatorGeneratedRunwayGroups(osg::Node* searchNode) const;
345 
349  static void cleanupNodes(osg::Node* node);
350 
351  protected:
352 
355 
356  typedef std::map<const osg::Camera*, std::vector<float> > CameraVectorMap;
360 
361 
362  typedef std::pair<DtLightPointNode*, int> nodeIntPair;
363  typedef std::map<nodeIntPair, int> NodeIdMap;
365  std::set<int> myFreeNodeIds;
366 
367  boost::mutex myMutex;
368  boost::mutex myNodeIdMutex;
369  boost::recursive_mutex myNodeBufferMutex;
370  boost::shared_mutex myLightsTableMutex;
371 
373 
381 
383 
384  typedef std::map<std::string, GroupIdMap> ParentGroupIdMap;
386 
388 
389  std::map<const osg::Camera*, osg::Matrixf> myInstanceReflectionMatrix;
390 
392 
394  };
395 
396 } // namespace makVrv
bool isIndirected
Definition: DtOsgLightPointManager.h:64
float pixelSize[4]
Definition: DtOsgLightPointManager.h:73
std::map< nodeIntPair, int > NodeIdMap
Definition: DtOsgLightPointManager.h:363
Definition: DtOsgLightPointManager.h:68
osg::ref_ptr< DtLightPointDrawable > myMasterLightPointDrawable
Definition: DtOsgLightPointManager.h:372
DtGlBuffer * myLightPointNodeBuffer
Definition: DtOsgLightPointManager.h:358
boost::mutex myMutex
Definition: DtOsgLightPointManager.h:367
GroupIdMap myImGuiProcessedGroupIds
Definition: DtOsgLightPointManager.h:382
std::pair< DtLightPointNode *, int > nodeIntPair
Definition: DtOsgLightPointManager.h:362
Contains makVrv::DtLightPointManager class.
bool myDebugLabelsEnabled
Definition: DtOsgLightPointManager.h:374
DtGlBuffer * myLightPointVertexBuffer
Definition: DtOsgLightPointManager.h:359
bool mySofterLightPointsEnabled
Definition: DtOsgLightPointManager.h:378
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
float intensity[4]
Definition: DtOsgLightPointManager.h:71
ParentGroupIdMap myImGuiGroups
Definition: DtOsgLightPointManager.h:385
boost::signalslib::signal< void(DtDebugLabelMode)> signal_debugLabelModeChanged
Emitted when the debug label moed has changed.
Definition: DtOsgLightPointManager.h:319
osg::ref_ptr< osg::Node > LightPointNodeRef
Definition: DtOsgLightPointManager.h:53
std::string groupName
Definition: DtOsgLightPointManager.h:58
float sectors[4]
Definition: DtOsgLightPointManager.h:72
std::map< std::string, GroupIdMap > ParentGroupIdMap
Definition: DtOsgLightPointManager.h:384
Contains the DtLightPointNodeAndXform struct declaration.
float radiusScale
Definition: DtOsgLightPointManager.h:85
bool hasDefaultGroup
Definition: DtOsgLightPointManager.h:65
float fadeParametersAttenuationDistance
Definition: DtOsgLightPointManager.h:89
osg::Vec4f eyeLocal
Definition: DtOsgLightPointManager.h:82
float sensorSettings[4]
Definition: DtOsgLightPointManager.h:75
boost::signalslib::signal< void(LightPointNodeObsSet &)> signal_lightPointsRegistered
Emitted when the terrain patch has light points added.
Definition: DtOsgLightPointManager.h:316
DtOsgLightPointManager registers LightPoint nodes so their TBO can be created and updated in a single...
Definition: DtOsgLightPointManager.h:128
DtDebugLabelMode myDebugLabelMode
Definition: DtOsgLightPointManager.h:375
Definition: DtOsgLightPointManager.h:79
std::set< LightPointNodeObs > LightPointNodeObsSet
Definition: DtOsgLightPointManager.h:54
DtDe & myDtDe
Definition: DtOsgLightPointManager.h:393
boost::shared_mutex myLightsTableMutex
Definition: DtOsgLightPointManager.h:370
Contains makVrv::DtLightPointDrawable class.
float mySoftenIntensity
Definition: DtOsgLightPointManager.h:379
Contains makVrv::DtVirtualBaseClass class.
GLuint64 textureId
Definition: DtOsgLightPointManager.h:87
DtSignalConnectionManager myImGuiDisplayNameAttributeChangedConnection
Definition: DtOsgLightPointManager.h:387
bool shouldCombineLightPoints
Definition: DtOsgLightPointManager.h:62
int groupId
Definition: DtOsgLightPointManager.h:98
std::vector< DtLightPointNodeAndXform > DtLightPointNodeAndXformVector
Vector of light point nodes and their transforms. We need to keep every path to every light at this p...
Definition: DtLightPointNodeAndXform.h:66
NodeIdMap myNodeIds
Definition: DtOsgLightPointManager.h:364
CameraVectorMap myLightPointNodeDataMap
Definition: DtOsgLightPointManager.h:357
std::vector< EntryAttributes > EntryAttributesList
Define the type used to signal changes to one or more attributes for one or more elements.
Definition: DtElementAttributeManager.h:44
float fadeParametersMinRange
Definition: DtOsgLightPointManager.h:88
Utility class container for light point types.
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
osg::observer_ptr< osg::Node > LightPointNodeObs
typedef a map of light point nodes use observer pointers so when they are deleted we don&#39;t try to use...
Definition: DtLightPointNodeAndXform.h:21
bool myDebugDirectionEnabled
Definition: DtOsgLightPointManager.h:376
std::set< int > myFreeNodeIds
Definition: DtOsgLightPointManager.h:365
std::map< std::string, DtLightPointGroupEntry > GroupIdMap
Definition: DtLightPointManager.h:40
struct for holding the fade parameters used by the indirect rendering cull compute shader ...
Definition: DtIndirectFadeParameters.h:17
bool isDaylightControlled
Definition: DtOsgLightPointManager.h:63
Derived from osg::Node and is a replacement for the osgSim::LightPointNode represents a group of ligh...
Definition: DtLightPointNode.h:37
std::string modelDefinitionName
Definition: DtOsgLightPointManager.h:59
float posScale
Definition: DtOsgLightPointManager.h:84
DtDebugLabelMode
Definition: DtOsgLightPointManager.h:101
osg::ref_ptr< osg::Node > lightPoint
Definition: DtOsgLightPointManager.h:96
template light point data
Definition: DtOsgLightPointManager.h:93
Class derived from osg::Drawable to handle all DtLightPointNode light points it gathers all the light...
Definition: DtLightPointDrawable.h:49
float resIntensityDaylight2Unused[4]
Definition: DtOsgLightPointManager.h:74
std::vector< LightPoint > LightPointVec
Definition: DtOsgLightPointManager.h:109
boost::recursive_mutex myNodeBufferMutex
Definition: DtOsgLightPointManager.h:369
DtIndirectFadeParameters fadeParameters
Definition: DtOsgLightPointManager.h:61
A generic OpenGL buffer. This can be: -&gt; a vertex buffer -&gt; an index buffer -&gt; a shader storage buffe...
Definition: DtGlBuffer.h:29
DtGlBuffer * myLightPointTypeBuffer
Definition: DtOsgLightPointManager.h:353
Base class to provide boost signal/slot management.
Definition: DtOsgLightPointManager.h:56
bool myDrawLightPoints
Definition: DtOsgLightPointManager.h:380
unsigned int attachDrawableIx
Definition: DtOsgLightPointManager.h:97
static float defaultLightPointRange()
default light point range for when the light point should disappear
Contains the DtElementAttributeManager class declaration.
Contains DLL export macros.
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
int groupId
Definition: DtOsgLightPointManager.h:83
boost::mutex myNodeIdMutex
Definition: DtOsgLightPointManager.h:368
LightPointNodeObsSet myLightPointNodes
Definition: DtOsgLightPointManager.h:391
LightPoint()
Definition: DtOsgLightPointManager.h:95
float isInstancedReflection
Definition: DtOsgLightPointManager.h:86
std::map< const osg::Camera *, osg::Matrixf > myInstanceReflectionMatrix
Definition: DtOsgLightPointManager.h:389
std::map< const osg::Camera *, std::vector< float > > CameraVectorMap
Definition: DtOsgLightPointManager.h:356
DtGlBuffer * myLightPointGroupBuffer
Definition: DtOsgLightPointManager.h:354
Contains makVrv::DtIndirectViewParameters class.
float color[4]
Definition: DtOsgLightPointManager.h:70
Contains makVrv::DtIndirectFadeParameters class.
bool myShouldReplaceOsgSimLightPoints
Definition: DtOsgLightPointManager.h:377
osg::Matrixf modelView
Definition: DtOsgLightPointManager.h:81
DtLightPointManager core base class for DtOsgLightPointManger (which does most of the work for light ...
Definition: DtLightPointManager.h:28

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)