VR-Forces 4.10 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtIndirectDofManager.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 
12 #include <vrvOsg/vrvOsg.h>
16 
18 
21 
23 
24 #include <osg/Node>
25 #include <osg/ref_ptr>
26 #include <osg/observer_ptr>
27 #include <osgSim/DOFTransform>
28 
29 #include <unordered_map>
30 #include <deque>
31 
32 namespace osg
33 {
34  class Sequence;
35  class RenderInfo;
36  class FrameStamp;
37 }
38 
39 namespace makVrv
40 {
41  struct PerGeomInstance;
42  class DtInstanceContainer;
43  class DtDe;
44  class DtOsgShaderFilesCache;
45  class DtIndirectViewParameters;
46  class DtGlBuffer;
47  class DtIndirectDofProgram;
48 
51 
54 
56  template <>
57  inline const char* creatorTypeName<DtIndirectDofManager>(void) { return "DtIndirectDofManagerCreator"; }
58 
64  {
65  public:
66 
67  #define CPU_SIDE_COMPILATION 1
68  #include <../data/shaders/indirect/DofInfoBuffer.h>
69  #undef CPU_SIDE_COMPILATION
70 
71  typedef osg::observer_ptr<osg::Node> NodeObserverPtr;
72  typedef std::pair<NodeObserverPtr, DtIndirectDofInfo> NodeDofInfoPair;
73  typedef std::pair<NodeObserverPtr, int> NodeDofInfoIndexPair;
74  typedef std::deque<NodeDofInfoPair> DequeNodeDofInfoPairs;
75  typedef std::unordered_map<int, DtIndirectAnimatingDof* > MapInfoIdxToAnimatingDof;
76 
77  typedef std::unordered_map<int, int> MapInstanceIdToDofInfo;
78  typedef std::map<osg::ref_ptr<osgSim::DOFTransform>, MapInstanceIdToDofInfo > MapNodeToMapInstanceIdToDofInfoIndex;
79 
80  public:
83 
85  virtual ~DtIndirectDofManager();
86  protected:
89 
90  private:
92  DtIndirectDofManager() = delete;
94  DtIndirectDofManager(const DtIndirectDofManager &other) = delete;
96  DtIndirectDofManager &operator=(const DtIndirectDofManager &other) = delete;
97 
98  public:
100  virtual void addDofPaths(int perGeomInstanceIndex, int size, const DequeNodeDofInfoPairs& parentDofPaths, const DequeNodeDofInfoPairs& dofPaths, int instanceId
101  , float modelScale
102  , float modelRadius);
103 
105  virtual void removeDofPaths(int instanceId);
106 
109  virtual void setDof(osgSim::DOFTransform* clone, osgSim::DOFTransform* master, int instanceId);
110 
112  virtual void setDofTranslation(osgSim::DOFTransform* clone, osgSim::DOFTransform* master, int instanceId
113  , const Vector3_64& trans
114  , const Vector3_64& transVel);
115 
117  virtual void setDofOrientation(osgSim::DOFTransform* clone, osgSim::DOFTransform* master, int instanceId
118  , const Vector3_64& hpr
119  , const Vector3_64& hprVel);
120 
122  virtual void setDofOrientation(osgSim::DOFTransform* clone, osgSim::DOFTransform* master, int instanceId
123  , const Vector3_64& hprVel, bool forceUpdate);
124 
126  virtual void setDofTransform(IndirectDofInfo& info, const osgSim::DOFTransform* clone);
127 
129  virtual void setInstanceXform(const Matrix4_32& xform, int instanceId);
130 
132  virtual Matrix4_32 instanceXform(int instanceId) const;
133 
135  virtual void update(const osg::FrameStamp* frameStamp);
136 
139  virtual void setPureSignalBasedDofs(bool val);
140 
143  virtual bool pureSignalBasedDofs(void) const;
144 
146  virtual void reloadShaders() const;
147 
149  virtual void releaseGLObjects(osg::State* state) const;
150 
152  virtual void processDofs(const DtIndirectViewParameters& viewParameters, const DtGlBuffer* gpuInputPerGeomInstancesBuffer, const DtGlBuffer* gpuMaterialsBuffer, const osg::Camera* camera);
153 
155  virtual const DtGlBuffer* gpuDofTransformBuffer(const osg::Camera* camera) const;
156 
159  virtual const DtGlBuffer* gpuDofModelScaleBuffer(const osg::Camera* camera) const;
160 
161  protected:
162 
164  virtual void addDof(int perGeomInstanceIndex, const NodeDofInfoPair& dofChildPair, int instanceId, int baseParentDofIndex, const int dofInfoId
165  , const float modelScale
166  , const float modelRadius);
167 
169  virtual void updateAnimatingDofs(const osg::FrameStamp* frameStamp);
170 
172  virtual void deleteBuffers(void);
173 
175  virtual void tearDownBuffers(void) const;
176 
178  virtual void updateDofBuffersIfNecessary();
179 
181  virtual void deleteShaders() const;
182 
184  virtual void updateDofs();
185 
189  virtual bool findDofInfoIndex(osgSim::DOFTransform* clone, osgSim::DOFTransform* master, int instanceId
190  , int& infoIdx);
191 
193  virtual DtIndirectAnimatingDof* findOrCreateAnimatingDof(int infoIdx, osgSim::DOFTransform* dof);
194 
196  virtual void printInfo();
197 
201  virtual void flushCameraSpecificBuffers(void);
202 
205  virtual void createCameraSpecificBuffersIfNeeded(const osg::Camera* camera);
206 
207  protected:
208 
211 
214 
215  typedef std::map<osg::observer_ptr<const osg::Camera>, DtGlBuffer*> CameraToBufferMap;
216 
219 
223 
224  mutable bool myMutableDofInfoDirty;
225 
227 
229 
232  {
233  public:
234  void operator()(IndirectDofInfo& info);
235  };
236 
239  {
240  public:
241  IndirectDofInfoRemovalPredicate(int instanceIdToRemove);
242  bool operator()(const IndirectDofInfo& info) const;
244  };
245 
248 
249  std::unordered_map<int, int> myInstanceToXformBaseIndex;
250 
252  };
253 
254 }
VectorIndirectDofInfos myVectorIndirectDofInfos
Definition: DtIndirectDofManager.h:247
std::unordered_map< int, DtIndirectAnimatingDof * > MapInfoIdxToAnimatingDof
Definition: DtIndirectDofManager.h:75
parent manager class for all Indirect managers.
Definition: DtIndirectManager.h:26
bool myPureSignalBasedDofs
Definition: DtIndirectDofManager.h:209
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
Contains makVrv::DtIndirectDofInfo struct.
Contains makVrv::DtIndirectManager class.
osg::observer_ptr< osg::Node > NodeObserverPtr
Definition: DtIndirectDofManager.h:71
voidpf void uLong size
Definition: ioapi.h:39
MapNodeToMapInstanceIdToDofInfoIndex myMapNodeToMapInstanceIdToDofInfoIndex
Definition: DtIndirectDofManager.h:228
CameraToBufferMap myGpuDofModelScaleBufferMap
The output buffer containing the computed model scale for each geom instance.
Definition: DtIndirectDofManager.h:222
CameraToBufferMap myGpuDofTransformBufferMap
The buffer containing the transform for each instance to know where it should be drawn.
Definition: DtIndirectDofManager.h:218
Wrapper class for wrapping osgSim::DOFTransform animations.
Definition: DtIndirectAnimatingDof.h:26
std::map< osg::ref_ptr< osgSim::DOFTransform >, MapInstanceIdToDofInfo > MapNodeToMapInstanceIdToDofInfoIndex
Definition: DtIndirectDofManager.h:78
std::pair< NodeObserverPtr, DtIndirectDofInfo > NodeDofInfoPair
Definition: DtIndirectDofManager.h:72
Variadic templated creator class for defining a DtVirtualBaseClass creator that is automatically regi...
Definition: DtVirtualBaseClassCreator.h:22
std::unordered_map< int, int > MapInstanceIdToDofInfo
Definition: DtIndirectDofManager.h:77
std::deque< NodeDofInfoPair > DequeNodeDofInfoPairs
Definition: DtIndirectDofManager.h:74
std::unordered_map< int, int > myInstanceToXformBaseIndex
Definition: DtIndirectDofManager.h:249
DtGlBuffer * myGpuDofInfoBuffer
The buffer containing all the dof infos for all instances managed by this manager.
Definition: DtIndirectDofManager.h:213
MapInfoIdxToAnimatingDof myAnimatingDofs
Definition: DtIndirectDofManager.h:251
const char * creatorTypeName< DtIndirectDofManager >(void)
template specialization for the creator (pass the class being created to the creatorTypeName template...
Definition: DtIndirectDofManager.h:57
DtIndirectDofProgram * myMutableDofProgram
Definition: DtIndirectDofManager.h:210
handles the dof nodes for all the indirect geometry.
Definition: DtIndirectDofManager.h:63
singleton class that wraps indirect dof gpu shader.
Definition: DtIndirectDofProgram.h:72
DtReusableMemoryVector< IndirectDofInfo, IndirectDofInfoInvalidator, IndirectDofInfoRemovalPredicate > VectorIndirectDofInfos
Definition: DtIndirectDofManager.h:246
unsigned int myMaxPerGeomInstanceId
Definition: DtIndirectDofManager.h:226
Contains makVrv::DtIndirectAnimatingDof class.
A generic OpenGL buffer.
Definition: DtGlBuffer.h:27
The class that is used to communicate the camera viewing parameters to the DtICullingAndLOD interface...
Definition: DtIndirectViewParameters.h:26
Base class to provide boost signal/slot management.
Contains makVrv::DtReusableMemoryVector class.
removal predicate to know which dof infos belong to the same instance
Definition: DtIndirectDofManager.h:238
friend DtIndirectDofManagerCreator
only creator can create
Definition: DtIndirectDofManager.h:82
Contains DLL export macros.
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
std::map< osg::observer_ptr< const osg::Camera >, DtGlBuffer * > CameraToBufferMap
Definition: DtIndirectDofManager.h:215
Helper class to manage instances This class allows you to add a DtInstance_64 Internally, however it stores this as a DtInstance (which the GPU can directly read)
Definition: DtInstanceContainer.h:31
initializer/invalidator for dof infos
Definition: DtIndirectDofManager.h:231
std::pair< NodeObserverPtr, int > NodeDofInfoIndexPair
Definition: DtIndirectDofManager.h:73
DtVirtualBaseClassCreator< DtIndirectDofManager, DtInstanceContainer & > DtIndirectDofManagerCreator
creator
Definition: DtIndirectDofManager.h:50
n dimensional matrix
const int myInstanceIdToRemove
Definition: DtIndirectDofManager.h:243
4 dimensional matrix
Definition: DtMatrix4.h:22
bool myMutableDofInfoDirty
Definition: DtIndirectDofManager.h:224

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)