VR-Forces 4.10 Class Documentation
 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  };
63 
64  //Needs to match LightPointNodeInfo in the shader
66  {
67  osg::Matrixf modelView;
68  osg::Vec4f eyeLocal;
69  int groupId;
70  float posScale;
71  float radiusScale;
73  GLuint64 textureId;
76  };
77 
79  struct LightPoint
80  {
83  unsigned int attachDrawableIx;
84  int groupId;
85  };
86 
87  typedef std::vector<LightPoint> LightPointVec;
88 
106  {
107  public:
108 
111 
113  static DtOsgLightPointManager& instanceAsDtOsgLightPointManager(DtDe& de);
114 
115  private:
117  DtOsgLightPointManager() = delete;
118 
120  DtOsgLightPointManager(const DtOsgLightPointManager& other) = delete;
122  DtOsgLightPointManager& operator=(const DtOsgLightPointManager& other) = delete;
123 
124  public:
127  virtual void registerInstancedLightPoints(LightPointVec &lightPoints, bool daylightControlled);
128 
130  virtual void findAndRegisterLightPoints(osg::Node* node, const std::string& groupName, bool daylightControlled, const DtIndirectFadeParameters& fadeParameters, bool combineLightPoints);
131 
134  virtual void registerLightPoints(const DtLightPointNodeAndXformVector& lightPoints,
135  const std::string& groupName, bool daylightControlled,
136  const DtIndirectFadeParameters& fadeParameters, bool combineLightPoints);
137 
140  virtual LightPointNodeObsSet aggregateLightPoints(const DtLightPointNodeAndXformVector& lightPoints,
141  const std::string& groupName, bool daylightControlled,
142  const DtIndirectFadeParameters& fadeParameters, bool combineLightPoints);
143 
148  virtual DtLightPointNode *createLightPointNode(osg::Node *nodeRef, bool daylightControlled);
149 
153  virtual DtGlBuffer *lightPointTypeBuffer();
154 
157  virtual DtGlBuffer *lightPointGroupBuffer();
158 
162  virtual DtGlBuffer *lightPointNodeBuffer(osg::Camera* camera);
163 
164  // !\brief updates the ssbo for the light point vertex data. This contains the light point
167  virtual void updateLightPointVertexBuffer(const std::vector<DtLightPointDrawable::LightPointVertexAttrib>& vertexAttribData, int minChanged, int maxChanged);
168 
172  virtual DtGlBuffer *lightPointVertexBufer();
173 
175  virtual int nodeId(DtLightPointNode *lpNode, int instanceId);
176 
178  virtual void slot_preTick();
179 
181  virtual void clearNodeBuffer(const osg::Camera* camera);
182 
184  unsigned int nodeBufferMaxNodeId(const osg::Camera *camera);
185 
189  virtual void setNodeBufferData(int nodeId, const osg::Camera *camera, const DtLightPointNodeDataLayout& nodeData);
190 
192  virtual void processImGui();
193 
195  virtual DtLightPointDrawable *masterLightPointDrawable();
196 
198  virtual bool debugLabelsEnabled() const;
199 
201  virtual bool debugDirectionEnabled() const;
202 
204  virtual bool softerLightPointsEnabled();
205 
207  virtual float softenIntensity();
208 
211  virtual void setShouldReplaceOsgSimLightPoints(bool enable);
212 
215  virtual bool shouldReplaceOsgSimLightPoints();
216 
218  virtual void freeNodeIds(std::vector<int> &nodeIds);
219 
220  virtual void releaseGLObjects(osg::State * state) const;
221 
223  virtual void setInstanceReflectionMatrix(const osg::Camera *camera, const osg::Matrixf &reflectMat);
224 
226  virtual const osg::Matrixf &instanceReflectionMatrix(const osg::Camera *camera);
227 
229  virtual bool drawLightPoints();
230 
232  boost::signalslib::signal<void(LightPointNodeObsSet&)> signal_lightPointsRegistered;
233 
234  protected:
235 
237  virtual ~DtOsgLightPointManager();
238 
240  virtual void slot_reloadShaders();
241 
243  virtual void setupShaders();
244 
247  int parseNodeGroupId(osg::Node *lightPointNode);
248 
250  std::string parseNodeGroupName(osg::Node *node);
251 
253  virtual void populateLightPointNode(osg::Node *nodeRef, DtLightPointNode *dtLpRef, bool daylightControlled, bool newNode);
254 
258  static void cleanupNodes(osg::Node* node);
259 
260  protected:
261 
264 
265  typedef std::map<const osg::Camera*, std::vector<float> > CameraVectorMap;
269 
270 
271  typedef std::pair<DtLightPointNode*, int> nodeIntPair;
272  typedef std::map<nodeIntPair, int> NodeIdMap;
274  std::set<int> myFreeNodeIds;
275 
276  boost::mutex myMutex;
277  boost::mutex myNodeIdMutex;
278  boost::recursive_mutex myNodeBufferMutex;
279  boost::shared_mutex myLightsTableMutex;
280 
282 
289 
291 
292  typedef std::map<std::string, GroupIdMap> ParentGroupIdMap;
294 
295  std::map<const osg::Camera*, osg::Matrixf> myInstanceReflectionMatrix;
296 
298 
300  };
301 
302 } // namespace makVrv
float pixelSize[4]
Definition: DtOsgLightPointManager.h:60
std::map< nodeIntPair, int > NodeIdMap
Definition: DtOsgLightPointManager.h:272
Definition: DtOsgLightPointManager.h:55
osg::ref_ptr< DtLightPointDrawable > myMasterLightPointDrawable
Definition: DtOsgLightPointManager.h:281
DtGlBuffer * myLightPointNodeBuffer
Definition: DtOsgLightPointManager.h:267
boost::mutex myMutex
Definition: DtOsgLightPointManager.h:276
GroupIdMap myImGuiProcessedGroupIds
Definition: DtOsgLightPointManager.h:290
std::pair< DtLightPointNode *, int > nodeIntPair
Definition: DtOsgLightPointManager.h:271
Contains makVrv::DtLightPointManager class.
bool myDebugLabelsEnabled
Definition: DtOsgLightPointManager.h:283
DtGlBuffer * myLightPointVertexBuffer
Definition: DtOsgLightPointManager.h:268
bool mySofterLightPointsEnabled
Definition: DtOsgLightPointManager.h:286
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
float intensity[4]
Definition: DtOsgLightPointManager.h:58
ParentGroupIdMap myImGuiGroups
Definition: DtOsgLightPointManager.h:293
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:292
Contains the DtLightPointNodeAndXform struct declaration.
float radiusScale
Definition: DtOsgLightPointManager.h:71
float fadeParametersAttenuationDistance
Definition: DtOsgLightPointManager.h:75
osg::Vec4f eyeLocal
Definition: DtOsgLightPointManager.h:68
boost::signalslib::signal< void(LightPointNodeObsSet &)> signal_lightPointsRegistered
Emitted when the terrain patch has light points added.
Definition: DtOsgLightPointManager.h:232
DtOsgLightPointManager registers LightPoint nodes so their TBO can be created and updated in a single...
Definition: DtOsgLightPointManager.h:105
Definition: DtOsgLightPointManager.h:65
std::set< LightPointNodeObs > LightPointNodeObsSet
Definition: DtOsgLightPointManager.h:53
DtDe & myDtDe
Definition: DtOsgLightPointManager.h:299
boost::shared_mutex myLightsTableMutex
Definition: DtOsgLightPointManager.h:279
Contains makVrv::DtLightPointDrawable class.
float mySoftenIntensity
Definition: DtOsgLightPointManager.h:287
Contains makVrv::DtVirtualBaseClass class.
GLuint64 textureId
Definition: DtOsgLightPointManager.h:73
int groupId
Definition: DtOsgLightPointManager.h:84
std::vector< DtLightPointNodeAndXform > DtLightPointNodeAndXformVector
Vector of light point nodes and their transforms.
Definition: DtLightPointNodeAndXform.h:66
NodeIdMap myNodeIds
Definition: DtOsgLightPointManager.h:273
CameraVectorMap myLightPointNodeDataMap
Definition: DtOsgLightPointManager.h:266
float fadeParametersMinRange
Definition: DtOsgLightPointManager.h:74
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:284
std::set< int > myFreeNodeIds
Definition: DtOsgLightPointManager.h:274
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:70
osg::ref_ptr< osg::Node > lightPoint
Definition: DtOsgLightPointManager.h:82
template light point data
Definition: DtOsgLightPointManager.h:79
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:87
boost::recursive_mutex myNodeBufferMutex
Definition: DtOsgLightPointManager.h:278
A generic OpenGL buffer.
Definition: DtGlBuffer.h:27
DtGlBuffer * myLightPointTypeBuffer
Definition: DtOsgLightPointManager.h:262
Base class to provide boost signal/slot management.
bool myDrawLightPoints
Definition: DtOsgLightPointManager.h:288
unsigned int attachDrawableIx
Definition: DtOsgLightPointManager.h:83
Contains DLL export macros.
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
int groupId
Definition: DtOsgLightPointManager.h:69
boost::mutex myNodeIdMutex
Definition: DtOsgLightPointManager.h:277
LightPointNodeObsSet myLightPointNodes
Definition: DtOsgLightPointManager.h:297
LightPoint()
Definition: DtOsgLightPointManager.h:81
float isInstancedReflection
Definition: DtOsgLightPointManager.h:72
std::map< const osg::Camera *, osg::Matrixf > myInstanceReflectionMatrix
Definition: DtOsgLightPointManager.h:295
std::map< const osg::Camera *, std::vector< float > > CameraVectorMap
Definition: DtOsgLightPointManager.h:265
DtGlBuffer * myLightPointGroupBuffer
Definition: DtOsgLightPointManager.h:263
Contains makVrv::DtIndirectViewParameters class.
float color[4]
Definition: DtOsgLightPointManager.h:57
Contains makVrv::DtIndirectFadeParameters class.
bool myShouldReplaceOsgSimLightPoints
Definition: DtOsgLightPointManager.h:285
osg::Matrixf modelView
Definition: DtOsgLightPointManager.h:67
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 Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)