VR-Forces 5.0.2 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) 2021 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
13 
14 #include <vrvOsg/vrvOsg.h>
17 
21 
24 
25 #include <osgSim/LightPointNode>
26 
27 #include <boost/thread.hpp>
28 #include <boost/thread/recursive_mutex.hpp>
29 #include <boost/thread/shared_mutex.hpp>
30 
31 #include <string>
32 
33 namespace osgEarth
34 {
35  class GeoPoint;
36  class MapNode;
37 }
38 
39 namespace makVrv
40 {
41  class DtDe;
42 
43  class DtGlBuffer;
44 
45  class DtLightPointNode;
46  class DtLightPointDrawable;
47 
50 
51  typedef osg::observer_ptr<osg::Node> LightPointNodeObs;
53  typedef std::set<LightPointNodeObs> LightPointNodeObsSet;
54 
56  {
57  float color[4];
58  float intensity[4];
59  float sectors[4];
60  float pixelSize[4];
62  float sensorSettings[4];
63  };
64 
65  //Needs to match LightPointNodeInfo in the shader
67  {
68  osg::Matrixf modelView;
69  osg::Vec4f eyeLocal;
70  int groupId;
71  float posScale;
72  float radiusScale;
74  GLuint64 textureId;
77  };
78 
80  struct LightPoint
81  {
84  unsigned int attachDrawableIx;
85  int groupId;
86  };
87 
88  typedef std::vector<LightPoint> LightPointVec;
89 
107  {
108  public:
109 
112 
114  static DtOsgLightPointManager& instanceAsDtOsgLightPointManager(DtDe& de);
115 
116  private:
118  DtOsgLightPointManager() = delete;
119 
121  DtOsgLightPointManager(const DtOsgLightPointManager& other) = delete;
123  DtOsgLightPointManager& operator=(const DtOsgLightPointManager& other) = delete;
124 
125  public:
128  virtual void registerInstancedLightPoints(LightPointVec &lightPoints, bool daylightControlled);
129 
131  virtual void findAndRegisterLightPoints(osg::Node* node, const std::string& groupName, bool daylightControlled, const DtIndirectFadeParameters& fadeParameters, bool combineLightPoints);
132 
135  virtual void registerLightPoints(const DtLightPointNodeAndXformVector& lightPoints,
136  const std::string& groupName, bool daylightControlled,
137  const DtIndirectFadeParameters& fadeParameters, bool combineLightPoints);
138 
141  virtual LightPointNodeObsSet aggregateLightPoints(const DtLightPointNodeAndXformVector& lightPoints,
142  const std::string& groupName, bool daylightControlled,
143  const DtIndirectFadeParameters& fadeParameters, bool combineLightPoints);
144 
149  virtual DtLightPointNode *createLightPointNode(osg::Node *nodeRef, bool daylightControlled);
150 
154  virtual DtGlBuffer *lightPointTypeBuffer();
155 
158  virtual DtGlBuffer *lightPointGroupBuffer();
159 
163  virtual DtGlBuffer *lightPointNodeBuffer(osg::Camera* camera);
164 
165  // !\brief updates the ssbo for the light point vertex data. This contains the light point
168  virtual void updateLightPointVertexBuffer(const std::vector<DtLightPointDrawable::LightPointVertexAttrib>& vertexAttribData, int minChanged, int maxChanged);
169 
173  virtual DtGlBuffer *lightPointVertexBufer();
174 
176  virtual int nodeId(DtLightPointNode *lpNode, int instanceId);
177 
179  virtual void slot_preTick();
180 
182  virtual void clearNodeBuffer(const osg::Camera* camera);
183 
185  unsigned int nodeBufferMaxNodeId(const osg::Camera *camera);
186 
190  virtual void setNodeBufferData(int nodeId, const osg::Camera *camera, const DtLightPointNodeDataLayout& nodeData);
191 
193  virtual void processImGui();
194 
196  virtual DtLightPointDrawable *masterLightPointDrawable();
197 
199  virtual bool debugLabelsEnabled() const;
200 
202  virtual bool debugDirectionEnabled() const;
203 
205  virtual bool softerLightPointsEnabled() const;
206 
208  virtual float softenIntensity() const;
209 
212  virtual void setShouldReplaceOsgSimLightPoints(bool enable);
213 
216  virtual bool shouldReplaceOsgSimLightPoints();
217 
219  virtual void freeNodeIds(std::vector<int> &nodeIds);
220 
221  virtual void releaseGLObjects(osg::State * state) const;
222 
224  virtual void setInstanceReflectionMatrix(const osg::Camera *camera, const osg::Matrixf &reflectMat);
225 
227  virtual const osg::Matrixf &instanceReflectionMatrix(const osg::Camera *camera);
228 
230  virtual bool drawLightPoints();
231 
233  boost::signalslib::signal<void(LightPointNodeObsSet&)> signal_lightPointsRegistered;
234 
235  protected:
236 
238  virtual ~DtOsgLightPointManager();
239 
241  virtual void slot_reloadShaders();
242 
244  virtual void setupShaders();
245 
248  int parseNodeGroupId(osg::Node *lightPointNode);
249 
251  std::string parseNodeGroupName(osg::Node *node);
252 
254  virtual void populateLightPointNode(osg::Node *nodeRef, DtLightPointNode *dtLpRef, bool daylightControlled, bool newNode);
255 
259  static void cleanupNodes(osg::Node* node);
260 
261  protected:
262 
265 
266  typedef std::map<const osg::Camera*, std::vector<float> > CameraVectorMap;
270 
271 
272  typedef std::pair<DtLightPointNode*, int> nodeIntPair;
273  typedef std::map<nodeIntPair, int> NodeIdMap;
275  std::set<int> myFreeNodeIds;
276 
277  boost::mutex myMutex;
278  boost::mutex myNodeIdMutex;
279  boost::recursive_mutex myNodeBufferMutex;
280  boost::shared_mutex myLightsTableMutex;
281 
283 
290 
292 
293  typedef std::map<std::string, GroupIdMap> ParentGroupIdMap;
295 
296  std::map<const osg::Camera*, osg::Matrixf> myInstanceReflectionMatrix;
297 
299 
301  };
302 
303 } // namespace makVrv
float pixelSize[4]
Definition: DtOsgLightPointManager.h:60
std::map< nodeIntPair, int > NodeIdMap
Definition: DtOsgLightPointManager.h:273
Definition: DtOsgLightPointManager.h:55
osg::ref_ptr< DtLightPointDrawable > myMasterLightPointDrawable
Definition: DtOsgLightPointManager.h:282
DtGlBuffer * myLightPointNodeBuffer
Definition: DtOsgLightPointManager.h:268
boost::mutex myMutex
Definition: DtOsgLightPointManager.h:277
GroupIdMap myImGuiProcessedGroupIds
Definition: DtOsgLightPointManager.h:291
std::pair< DtLightPointNode *, int > nodeIntPair
Definition: DtOsgLightPointManager.h:272
Contains makVrv::DtLightPointManager class.
bool myDebugLabelsEnabled
Definition: DtOsgLightPointManager.h:284
DtGlBuffer * myLightPointVertexBuffer
Definition: DtOsgLightPointManager.h:269
bool mySofterLightPointsEnabled
Definition: DtOsgLightPointManager.h:287
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
float intensity[4]
Definition: DtOsgLightPointManager.h:58
ParentGroupIdMap myImGuiGroups
Definition: DtOsgLightPointManager.h:294
osg::ref_ptr< osg::Node > LightPointNodeRef
Definition: DtOsgLightPointManager.h:52
float sectors[4]
Definition: DtOsgLightPointManager.h:59
std::map< std::string, GroupIdMap > ParentGroupIdMap
Definition: DtOsgLightPointManager.h:293
Contains the DtLightPointNodeAndXform struct declaration.
float radiusScale
Definition: DtOsgLightPointManager.h:72
float fadeParametersAttenuationDistance
Definition: DtOsgLightPointManager.h:76
osg::Vec4f eyeLocal
Definition: DtOsgLightPointManager.h:69
float sensorSettings[4]
Definition: DtOsgLightPointManager.h:62
boost::signalslib::signal< void(LightPointNodeObsSet &)> signal_lightPointsRegistered
Emitted when the terrain patch has light points added.
Definition: DtOsgLightPointManager.h:233
DtOsgLightPointManager registers LightPoint nodes so their TBO can be created and updated in a single...
Definition: DtOsgLightPointManager.h:106
Definition: DtOsgLightPointManager.h:66
std::set< LightPointNodeObs > LightPointNodeObsSet
Definition: DtOsgLightPointManager.h:53
DtDe & myDtDe
Definition: DtOsgLightPointManager.h:300
boost::shared_mutex myLightsTableMutex
Definition: DtOsgLightPointManager.h:280
Contains makVrv::DtLightPointDrawable class.
float mySoftenIntensity
Definition: DtOsgLightPointManager.h:288
Contains makVrv::DtVirtualBaseClass class.
GLuint64 textureId
Definition: DtOsgLightPointManager.h:74
int groupId
Definition: DtOsgLightPointManager.h:85
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:274
CameraVectorMap myLightPointNodeDataMap
Definition: DtOsgLightPointManager.h:267
float fadeParametersMinRange
Definition: DtOsgLightPointManager.h:75
Utility class container for light point types.
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:285
std::set< int > myFreeNodeIds
Definition: DtOsgLightPointManager.h:275
struct for holding the fade parameters used by the indirect rendering cull compute shader ...
Definition: DtIndirectFadeParameters.h:17
Derived from osg::Node and is a replacement for the osgSim::LightPointNode represents a group of ligh...
Definition: DtLightPointNode.h:37
float posScale
Definition: DtOsgLightPointManager.h:71
osg::ref_ptr< osg::Node > lightPoint
Definition: DtOsgLightPointManager.h:83
template light point data
Definition: DtOsgLightPointManager.h:80
Class derived from osg::Drawable to handle all DtLightPointNode light points it gathers all the light...
Definition: DtLightPointDrawable.h:52
float resIntensityDaylight2Unused[4]
Definition: DtOsgLightPointManager.h:61
std::vector< LightPoint > LightPointVec
Definition: DtOsgLightPointManager.h:88
boost::recursive_mutex myNodeBufferMutex
Definition: DtOsgLightPointManager.h:279
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:263
Base class to provide boost signal/slot management.
bool myDrawLightPoints
Definition: DtOsgLightPointManager.h:289
unsigned int attachDrawableIx
Definition: DtOsgLightPointManager.h:84
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:70
int groupId
Definition: DtOsgLightPointManager.h:70
boost::mutex myNodeIdMutex
Definition: DtOsgLightPointManager.h:278
LightPointNodeObsSet myLightPointNodes
Definition: DtOsgLightPointManager.h:298
LightPoint()
Definition: DtOsgLightPointManager.h:82
float isInstancedReflection
Definition: DtOsgLightPointManager.h:73
std::map< const osg::Camera *, osg::Matrixf > myInstanceReflectionMatrix
Definition: DtOsgLightPointManager.h:296
std::map< const osg::Camera *, std::vector< float > > CameraVectorMap
Definition: DtOsgLightPointManager.h:266
DtGlBuffer * myLightPointGroupBuffer
Definition: DtOsgLightPointManager.h:264
Contains makVrv::DtIndirectViewParameters class.
float color[4]
Definition: DtOsgLightPointManager.h:57
Contains makVrv::DtIndirectFadeParameters class.
bool myShouldReplaceOsgSimLightPoints
Definition: DtOsgLightPointManager.h:286
osg::Matrixf modelView
Definition: DtOsgLightPointManager.h:68
std::map< std::string, int > GroupIdMap
Definition: DtLightPointManager.h:35
DtLightPointManager core base class for DtOsgLightPointManger (which does most of the work for light ...
Definition: DtLightPointManager.h:28

Document ID: Generated on Sun Dec 4 20:22:03 EST 2022 from SVN revision 249613
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)