VR-Forces Developer's Guide
 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) 2025 MAK Technologies, Inc.
3  * All rights reserved.
4  *****************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvOsg/vrvOsg.h>
16 
18 
19 #include <vrvMath/DtMatrix.h>
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  class DtIndirectClearBufferProgram;
49  class DtGlDeleteObjectManager;
50 
53 
56 
58  template <>
59  inline const char* creatorTypeName<DtIndirectDofManager>(void) { return "DtIndirectDofManagerCreator"; }
60 
66  {
67  public:
68 
69  #define CPU_SIDE_COMPILATION 1
70  #include <../data/shaders/indirect/DofInfoBuffer.h>
71  #undef CPU_SIDE_COMPILATION
72 
73  typedef osg::observer_ptr<osg::Node> NodeObserverPtr;
74  typedef std::pair<NodeObserverPtr, DtIndirectDofInfo> NodeDofInfoPair;
75  typedef std::pair<NodeObserverPtr, int> NodeDofInfoIndexPair;
76  typedef std::deque<NodeDofInfoPair> DequeNodeDofInfoPairs;
77  typedef std::unordered_map<int, DtIndirectAnimatingDof* > MapInfoIdxToAnimatingDof;
78 
79  typedef std::unordered_map<int, int> MapInstanceIdToDofInfo;
80  typedef std::map<osg::ref_ptr<osgSim::DOFTransform>, MapInstanceIdToDofInfo > MapNodeToMapInstanceIdToDofInfoIndex;
81 
82  public:
85 
87  virtual ~DtIndirectDofManager();
88  protected:
91 
92  private:
94  DtIndirectDofManager() = delete;
96  DtIndirectDofManager(const DtIndirectDofManager &other) = delete;
98  DtIndirectDofManager &operator=(const DtIndirectDofManager &other) = delete;
99 
100  public:
102  virtual void addDofPaths(int perGeomInstanceIndex, int size, const DequeNodeDofInfoPairs& parentDofPaths, const DequeNodeDofInfoPairs& dofPaths, int instanceId
103  , float modelScale
104  , float modelRadius);
105 
107  virtual void removeDofPaths(int instanceId);
108 
111  virtual bool setDof(osgSim::DOFTransform* clone, osgSim::DOFTransform* master, int instanceId, int flags);
112 
114  virtual bool setDofAnimationFlags(osgSim::DOFTransform* clone, osgSim::DOFTransform* master, int instanceId
115  , int animationFlags);
116 
118  virtual bool setDofTranslation(osgSim::DOFTransform* clone, osgSim::DOFTransform* master, int instanceId
119  , const Vector3_64& trans
120  , const Vector3_64& transVel);
121 
123  virtual bool setDofOrientation(osgSim::DOFTransform* clone, osgSim::DOFTransform* master, int instanceId
124  , const Vector3_64& hpr
125  , const Vector3_64& hprVel
126  , int animationFlags);
127 
129  virtual bool setDofOrientation(osgSim::DOFTransform* clone, osgSim::DOFTransform* master, int instanceId
130  , const Vector3_64& hprVel, bool forceUpdate, int animationFlags);
131 
133  virtual void setDofTransform(IndirectDofInfo& info, const osgSim::DOFTransform* clone);
134 
136  virtual void setInstanceXform(const Matrix4_32& xform, int instanceId);
137 
139  virtual Matrix4_32 instanceXform(int instanceId) const;
140 
142  virtual void update(const osg::FrameStamp* frameStamp);
143 
146  virtual void setPureSignalBasedDofs(bool val);
147 
150  virtual bool pureSignalBasedDofs(void) const;
151 
153  virtual void reloadShaders() const;
154 
156  virtual void releaseGLObjects(osg::State* state) const;
157 
159  virtual void processDofs(const DtIndirectViewParameters& viewParameters, const DtGlBuffer* gpuInputPerGeomInstancesBuffer, const DtGlBuffer* gpuMaterialsBuffer, const osg::Camera* camera);
160 
162  virtual const DtGlBuffer* gpuDofTransformBuffer(const osg::Camera* camera) const;
163 
166  virtual const DtGlBuffer* gpuDofModelScaleBuffer(const osg::Camera* camera) const;
167 
168  protected:
169 
171  virtual void addDof(int perGeomInstanceIndex, const NodeDofInfoPair& dofChildPair, int instanceId, int baseParentDofIndex, const int dofInfoId
172  , const float modelScale
173  , const float modelRadius);
174 
176  virtual void updateAnimatingDofs(const osg::FrameStamp* frameStamp);
177 
179  virtual void deleteBuffers(void);
180 
182  virtual void tearDownBuffers(void) const;
183 
185  virtual void updateDofBuffersIfNecessary();
186 
187 
189  virtual void updateDofs();
190 
194  virtual bool findDofInfoIndex(osgSim::DOFTransform* clone, osgSim::DOFTransform* master, int instanceId
195  , int& infoIdx);
196 
198  virtual DtIndirectAnimatingDof* findOrCreateAnimatingDof(int infoIdx, osgSim::DOFTransform* dof);
199 
201  virtual void printInfo();
202 
206  virtual void flushCameraSpecificBuffers(void);
207 
210  virtual void createCameraSpecificBuffersIfNeeded(const osg::Camera* camera);
211 
213  virtual void flushCameraSpecificBuffersInMap(std::map<osg::observer_ptr<const osg::Camera>, DtGlBuffer*>& mapToEraseFrom);
214  protected:
215 
217 
219 
221 
224 
225  typedef std::map<osg::observer_ptr<const osg::Camera>, DtGlBuffer*> CameraToBufferMap;
226 
229 
233 
234  mutable bool myMutableDofInfoDirty;
235 
237 
239 
242  {
243  public:
244  void operator()(IndirectDofInfo& info);
245  };
246 
249  {
250  public:
251  IndirectDofInfoRemovalPredicate(int instanceIdToRemove);
252  bool operator()(const IndirectDofInfo& info) const;
254  };
255 
258 
259  std::unordered_map<int, int> myInstanceToXformBaseIndex;
260 
262 
264  };
265 
266 }
VectorIndirectDofInfos myVectorIndirectDofInfos
Definition: DtIndirectDofManager.h:257
std::unordered_map< int, DtIndirectAnimatingDof * > MapInfoIdxToAnimatingDof
Definition: DtIndirectDofManager.h:77
parent manager class for all Indirect managers. Managers handle information about a specific feature ...
Definition: DtIndirectManager.h:26
bool myPureSignalBasedDofs
Definition: DtIndirectDofManager.h:216
#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:73
voidpf void uLong size
Definition: ioapi.h:39
MapNodeToMapInstanceIdToDofInfoIndex myMapNodeToMapInstanceIdToDofInfoIndex
Definition: DtIndirectDofManager.h:238
CameraToBufferMap myGpuDofModelScaleBufferMap
The output buffer containing the computed model scale for each geom instance. This is used by the lod...
Definition: DtIndirectDofManager.h:232
CameraToBufferMap myGpuDofTransformBufferMap
The buffer containing the transform for each instance to know where it should be drawn.
Definition: DtIndirectDofManager.h:228
Wrapper class for wrapping osgSim::DOFTransform animations. Allows to set a translation &amp; translation...
Definition: DtIndirectAnimatingDof.h:34
std::map< osg::ref_ptr< osgSim::DOFTransform >, MapInstanceIdToDofInfo > MapNodeToMapInstanceIdToDofInfoIndex
Definition: DtIndirectDofManager.h:80
std::pair< NodeObserverPtr, DtIndirectDofInfo > NodeDofInfoPair
Definition: DtIndirectDofManager.h:74
DtGlDeleteObjectManager & myGlDeleteObjectManager
Definition: DtIndirectDofManager.h:263
Variadic templated creator class for defining a DtVirtualBaseClass creator that is automatically regi...
Definition: DtVirtualBaseClassCreator.h:23
std::unordered_map< int, int > MapInstanceIdToDofInfo
Definition: DtIndirectDofManager.h:79
std::deque< NodeDofInfoPair > DequeNodeDofInfoPairs
Definition: DtIndirectDofManager.h:76
std::unordered_map< int, int > myInstanceToXformBaseIndex
Definition: DtIndirectDofManager.h:259
DtGlBuffer * myGpuDofInfoBuffer
The buffer containing all the dof infos for all instances managed by this manager.
Definition: DtIndirectDofManager.h:223
MapInfoIdxToAnimatingDof myAnimatingDofs
Definition: DtIndirectDofManager.h:261
const char * creatorTypeName< DtIndirectDofManager >(void)
template specialization for the creator (pass the class being created to the creatorTypeName template...
Definition: DtIndirectDofManager.h:59
DtIndirectDofProgram * myMutableDofProgram
Definition: DtIndirectDofManager.h:218
handles the dof nodes for all the indirect geometry. Sets up the default state of osg::Dof...
Definition: DtIndirectDofManager.h:65
singleton class that wraps indirect dof gpu shader.
Definition: DtIndirectDofProgram.h:34
DtReusableMemoryVector< IndirectDofInfo, IndirectDofInfoInvalidator, IndirectDofInfoRemovalPredicate > VectorIndirectDofInfos
Definition: DtIndirectDofManager.h:256
unsigned int myMaxPerGeomInstanceId
Definition: DtIndirectDofManager.h:236
Contains makVrv::DtIndirectAnimatingDof class.
A generic OpenGL buffer. This can be: -&gt; a vertex buffer -&gt; an index buffer -&gt; a shader storage buffe...
Definition: DtGlBuffer.h:29
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.
DtIndirectClearBufferProgram * myMutableBufferClearProgram
Definition: DtIndirectDofManager.h:220
Contains makVrv::DtReusableMemoryVector class.
removal predicate to know which dof infos belong to the same instance
Definition: DtIndirectDofManager.h:248
Vaos are OpenGL context specific. They need to be deleted in the context they are created in...
Definition: DtGlDeleteObjectManager.h:58
This class clears buffers using compute shader Theoretically, there are performance gains to be achie...
Definition: DtIndirectClearBufferProgram.h:33
friend DtIndirectDofManagerCreator
only creator can create
Definition: DtIndirectDofManager.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:76
std::map< osg::observer_ptr< const osg::Camera >, DtGlBuffer * > CameraToBufferMap
Definition: DtIndirectDofManager.h:225
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:241
std::pair< NodeObserverPtr, int > NodeDofInfoIndexPair
Definition: DtIndirectDofManager.h:75
DtVirtualBaseClassCreator< DtIndirectDofManager, DtInstanceContainer & > DtIndirectDofManagerCreator
creator
Definition: DtIndirectDofManager.h:52
n dimensional matrix
const int myInstanceIdToRemove
Definition: DtIndirectDofManager.h:253
bool myMutableDofInfoDirty
Definition: DtIndirectDofManager.h:234

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)