VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtIndirectLodManager.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Copyright (c) 2018 MAK Technologies, Inc.
3  * All rights reserved.
4  *****************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvOsg/vrvOsg.h>
13 
15 
17 
18 #include <osg/Vec3>
19 #include <osg/Matrix>
20 
21 #include <deque>
22 #include <vector>
23 #include <string>
24 #include <tbb/atomic.h>
25 
26 namespace makVrv
27 {
28  class DtDe;
29  class DtGlBuffer;
30  class DtOsgShaderFilesCache;
31  class DtIndirectViewParameters;
32 
36  {
37  public:
39  virtual ~DtIndirectLodProgram();
40 
42  static DtIndirectLodProgram* instance(DtDe& de);
43 
45  virtual void initializeShadersIfNecessary(const DtOsgShaderFilesCache* shaderFilesCache,
46  const std::string& shaderFolderPath);
47 
49  virtual void runProcessLodsComputeShader(const DtIndirectViewParameters& viewParameters,
50  unsigned int maxNumInstances, float transition_percentage);
51 
53  virtual void deleteShaders();
54 
56  virtual void incrementNumUsers();
57 
59  virtual void decrementNumUsers();
60 
61  protected:
64  // these are uniforms ids!
71 
72  tbb::atomic<int> myNumUsers;
73  };
74 
80  {
81  public:
82 
87  {
88  float myStartRange;
89  float myEndRange;
90  float myPadding[2];
91  osg::Vec3 myCenter;
93  };
94 
95  typedef std::deque<IndirectLodInfo> DequeIndirectLodInfos;
96  typedef std::vector<IndirectLodInfo> VectorIndirectLodInfos;
97  typedef std::vector<DequeIndirectLodInfos> DequeIndirectLodInfoArray;
98 
99  public:
100 
103 
105  virtual ~DtIndirectLodManager();
106 
107  private:
113  DtIndirectLodManager &operator=(const DtIndirectLodManager &other);
114 
115  public:
116 
118  virtual void releaseGLObjects(osg::State* state) const;
119 
121  virtual void addLodStacks(int perGeomInstanceIndex, int size, const DequeIndirectLodInfos& parentLodStack, const DequeIndirectLodInfoArray& lodStacks, const osg::Matrix& localOriginMatrix, const osg::Matrix& instanceTransform);
122 
125  virtual void processLods(const DtOsgShaderFilesCache* shaderFilesCache, const std::string& shaderFolderPath, const DtIndirectViewParameters& viewParameters);
126 
128  virtual DtGlBuffer* gpuLodVisibleBuffer();
129 
131  virtual void reloadShaders() const;
132 
133 
134 
135  protected:
136 
137 
142  virtual void addLodStack(int perGeomInstanceIndex, const DequeIndirectLodInfos& parentLodStack, const DequeIndirectLodInfos& lodStack, const osg::Matrix& localOriginMatrix, const osg::Matrix& instanceTransform);
143 
145  virtual void updateLodBuffersIfNecessary();
146 
148  virtual void deleteShaders() const;
149 
150  virtual void deleteBuffers(void);
151 
152  virtual void tearDownBuffers(void) const;
153 
154  protected:
155 
157 
159 
162 
165 
166  mutable bool myMutableLodInfoDirty;
167 
168 
170 
172 
173  };
174 
175 
179  {
180  public:
183 
185  virtual ~DtIndirectLodManagerCreator();
186 
188  virtual DtIndirectLodManager* create() const;
189 
192  static DtIndirectLodManagerCreator& instance(DtDe& de);
193 
195  static const std::string& theClassName();
196  protected:
198  };
199 
200 
201 }
VectorIndirectLodInfos myIndirectLodInfos
Definition: DtIndirectLodManager.h:156
Virtual base class.
Definition: DtVirtualBaseClass.h:22
float myEndRange
Definition: DtIndirectLodManager.h:89
structure for holding the information about a particular instance of a particular lod...
Definition: DtIndirectLodManager.h:86
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
DtVector3< int > myWorkGroupLocalSize
Definition: DtIndirectLodManager.h:70
std::vector< IndirectLodInfo > VectorIndirectLodInfos
Definition: DtIndirectLodManager.h:96
int myModelViewMatrixIndex
Definition: DtIndirectLodManager.h:66
voidpf void uLong size
Definition: ioapi.h:39
unsigned int GLuint
Definition: DtGlTextureBufferObject.h:17
creator for DtIndirectLodManager
Definition: DtIndirectLodManager.h:178
DtDe & myDe
Definition: DtIndirectLodManager.h:197
DtIndirectLodProgram * myMutableLodProgram
Definition: DtIndirectLodManager.h:169
Definition: DtOsgShaderFilesCache.h:22
int myMaxNumInstancesIndex
Definition: DtIndirectLodManager.h:65
handles the lods for all the indirect geometry.
Definition: DtIndirectLodManager.h:79
std::vector< DequeIndirectLodInfos > DequeIndirectLodInfoArray
Definition: DtIndirectLodManager.h:97
3 dimensional vector
bool myMutableLodInfoDirty
Definition: DtIndirectLodManager.h:166
GLuint myLodProgramID
Definition: DtIndirectLodManager.h:62
int myLodTransitionPercentageIndex
Definition: DtIndirectLodManager.h:69
Contains makVrv::DtVirtualBaseClass class.
osg::Vec3 myCenter
Definition: DtIndirectLodManager.h:91
int myZoomMagnificationIndex
Definition: DtIndirectLodManager.h:67
singleton class that wraps indirect lod gpu shader.
Definition: DtIndirectLodManager.h:35
float myStartRange
Definition: DtIndirectLodManager.h:88
DtGlBuffer * myGpuLodVisibleBuffer
The buffer containing a bool for each instance to know if it should be drawn or not.
Definition: DtIndirectLodManager.h:164
unsigned int myMaxPerGeomInstanceId
Definition: DtIndirectLodManager.h:171
tbb::atomic< int > myNumUsers
Definition: DtIndirectLodManager.h:72
DtGlBuffer * myGpuLodInfoBuffer
The buffer containing all the lod infos for all instances managed by this manager.
Definition: DtIndirectLodManager.h:161
GLuint myLodShaderID
Definition: DtIndirectLodManager.h:63
A generic OpenGL buffer.
Definition: DtGlBuffer.h:25
The class that is used to communicate the camera viewing parameters to the DtICullingAndLOD interface...
Definition: DtGpuCullingAndLodDefines.h:38
DtDe & myDe
Definition: DtIndirectLodManager.h:158
Contains DLL export macros.
int myLodPerGeomInstanceId
Definition: DtIndirectLodManager.h:92
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
int myDistScaleIndex
Definition: DtIndirectLodManager.h:68
std::deque< IndirectLodInfo > DequeIndirectLodInfos
Definition: DtIndirectLodManager.h:95

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)