VR-Forces 4.10 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtGpuCulling.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2020 VT-MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <osg/FrameStamp>
13 #include <osg/Camera>
14 
15 #include <vrvOsg/vrvOsg.h>
16 
21 
24 
29 
31 
32 namespace osg
33 {
34  class State;
35  class RenderInfo;
36 };
37 
38 namespace makVrv
39 {
40  class DtGlBuffer;
41  class DtIndirectGeometryRegistrar;
42  class DtInstanceContainer;
43  class DtOsgShaderFilesCache;
44  class DtIndirectCullProgram;
45  class DtCpuCullingHelper;
46  class DtOsgLightPointManager;
47  class DtGLDeleteObjectManager;
48  class DtCoreGlBufferCreator;
49 
65  {
66  public:
70  {
71  int myOffset;
73 
75  {
76  return myOffset == rhs.myOffset && myNumOfInstances == rhs.myNumOfInstances;
77  }
78  };
79 
83  {
84  int myOffset;
86  };
87 
88  typedef std::vector<StateIdOffsetAndMaxCommands> VectorStateIdOffsetAndMaxCommands;
89 
90  //All the culling output buffers need to be per camera so shadows passes work
91  typedef std::map<osg::observer_ptr<const osg::Camera>, DtGlBuffer*> CameraToBufferMap;
92  typedef std::set<osg::observer_ptr<const osg::Camera> > CameraSet;
93 
94 
95  protected:
97  DtGpuCulling(DtDe& de, DtInstanceContainer& container);
98 
99  //friend class so that it can be created only by its creator
100  friend class DtGpuCullingCreator;
101 
102  public:
104  virtual ~DtGpuCulling();
105 
106  private:
108  DtGpuCulling() = delete;
110  DtGpuCulling(const DtGpuCulling &other) = delete;
112  DtGpuCulling &operator=(const DtGpuCulling &other) = delete;
113 
114  public:
116  virtual void setRegistrar(DtIndirectGeometryRegistrar* registrar);
117 
119  virtual void setCullShaderConfig(const DtCullShaderConfig& cullShaderConfig);
120 
122  virtual const DtCullShaderConfig& cullShaderConfig(void) const;
123 
125  virtual DtCullShaderConfig& cullShaderConfig(void);
126 
130  virtual void updateGpuBuffers(osg::RenderInfo& renderInfo);
131 
134  virtual void modelIdsToNumInstancesChanged(void);
135 
137  virtual void updatePerInstancePerGeomBuffers(const MapIntToInt& modelIdsToNumInstances, const osg::Camera* camera);
138 
140  virtual void doCulling(const DtIndirectViewParameters& viewParameters
141  , const osg::FrameStamp* frameStamp
142  , const DtGlBuffer* gpuLodVisibleBuffer
143  , const DtGlBuffer* gpuDofTransformBuffer
144  , const DtGlBuffer* gpuSwitchStateBuffer
145  , const DtGlBuffer* gpuPerInstanceDataBuffer
146  , const osg::Camera* camera);
147 
149  virtual void bindGpuOutputInstanceBuffer(const osg::Camera* camera) const;
150 
152  virtual void unbindGpuOutputInstanceBuffer(const osg::Camera* camera) const;
153 
159  virtual bool bindCommandBufferAndSsbos(const DtGlBuffer* gpuDofTransformBuffer
160  , const DtGlBuffer* gpuDofModelScaleBuffer
161  , const DtGlBuffer* gpuUvOffsetBuffer
162  , const DtGlBuffer* gpuPerInstanceDataBuffer
163  , const osg::Camera* camera);
164 
166  virtual void unbindCommandBufferAndSsbos(const osg::Camera* camera);
167 
171  // It is an instanced buffer. It advances once per instance.
172  virtual void bindGpuOutputInstanceBufferDebug(const osg::Camera* camera) const;
173 
176  virtual void unbindGpuOutputInstanceBufferDebug(const osg::Camera* camera) const;
177 
181  virtual bool bindIndirectThingsDebug(const DtGlBuffer* gpuDofTransformBuffer, const osg::Camera* camera);
182 
184  virtual void unbindIndirectThingsDebug(const osg::Camera* camera);
185 
188  virtual bool useInstanceCount(void) const;
189 
192  virtual int numDrawCommands(const osg::Camera* camera) const;
193 
195  virtual void releaseGLObjects(osg::State* state) const;
196 
198  virtual void reloadShaders() const;
199 
201  virtual bool buffersInitializedForCamera(const osg::Camera* camera) const;
202 
204  virtual unsigned int maxNumInstances(void) const;
205 
207  virtual const VectorStateIdOffsetAndMaxCommands& stateIdOffsetAndMaxCommands(void) const;
208 
210  virtual const std::vector<InstancesOffsetAndNumOfInstances>& instancesOffsetAndNumInstances(void) const;
211 
213  virtual bool readyToUpdateAndGpuBuffersNeedUpdate() const;
214 
216  virtual bool gpuBuffersNeedUpdate() const;
217 
219  virtual bool textureUpdateDirty() const;
220 
222  virtual void setTextureUpdateDirty(bool flag);
223 
225  virtual bool perGeomInstanceDataDirty() const;
226 
228  virtual void setPerGeomInstanceDataDirty(bool flag);
229 
231  virtual bool instancesInvalidatedDirty() const;
232 
234  virtual void invalidateInstance(int instanceId, int offset, int size);
235 
237  virtual const DtGlBuffer* gpuInputPerGeomInstancesBuffer(void) const;
238 
240  virtual const DtGlBuffer* gpuMaterialsBuffer() const;
241 
243  virtual void fillOutputInstances(std::vector< DtVector4<int> >& outputInstances, const osg::Camera* camera) const;
244 
246  virtual const DtIndirectEffectTexturesTemplate& currentEffectTexturesState() const;
247 
249  virtual void setName(const std::string& name);
250 
252  virtual const std::string& name(void) const;
253 
254  protected:
256  virtual void updateGpuInputPerGeomInstancesBufferByInvalidating();
261  virtual void updateGpuGeometrySpecificationsBuffer();
262  virtual void updateGpuMaterialsBuffer();
263  virtual void updateGpuInputPerGeomInstancesBuffer();
264  virtual void updateGpuLightPointBuffers();
265  virtual void updateGpuIndirectBuffersInstanceCount(const MapIntToInt& modelIdsToNumInstances, const osg::Camera* camera);
266  virtual void updateGpuIndirectBuffersNonInstanceCount(const MapIntToInt& modelIdsToNumInstances, const osg::Camera* camera);
267  virtual void clearGpuIndirectBuffer(const osg::Camera* camera);
268  virtual void clearStateIdCommandCountBuffer();
269 
271 
273  virtual void updateGpuTexturesBuffer(osg::RenderInfo& renderInfo);
274 
276  virtual void updateInstancesOffsetAndInstances(const MapIntToInt& modelIdsToNumInstances);
277 
279  virtual void updateInstancesOffsetAndInstancesBuffer(void);
280 
282  virtual void updateStateIdToMaxNumCommands(const MapIntToInt& modelIdsToNumInstances);
283 
285  virtual void updateStateIdToMaxNumCommandsBuffer(void);
286 
288  virtual bool checkSpecBuffersOk(void) const;
289 
291  virtual void releaseCameraToBufferMap(DtGLDeleteObjectManager& deleteManager, const CameraToBufferMap& cameraToBufferMap) const;
292 
294  virtual void deleteBuffers(void);
295 
297  virtual void deleteCameraToBufferMap(CameraToBufferMap& cameraToBufferMap);
298 
301  virtual void flushCameraSpecificBuffers();
302 
304  virtual void flushSingleCameraSpecificBufferMap(CameraToBufferMap& cameraToBufferMap);
305 
307  virtual void flushSingleCameraSet(CameraSet& cameraSet);
308 
309  protected:
312 
317 
321 
323  std::vector<DtGeometrySpecification> myGeometrySpecifications;
324 
328 
331 
333 
337 
340 
344 
348 
351 
353 
355 
357 
358  std::vector<InstancesOffsetAndNumOfInstances> myInstancesOffsetAndNumInstances;
360 
362  unsigned int myMaxNumInstances;
363 
364  unsigned int myMaxNumLightSources;
365 
366  // For when instance count is false or true
368 
369  // For when instance count if false
372 
373  // For when instance count is true
376 
378 
380 
381  //texture state
387 
390 
393 
395 
398 
399  std::string myName;
400 
401  };
402 
406  {
407  public:
410 
412  virtual ~DtGpuCullingCreator();
413 
415  virtual DtGpuCulling* create(DtInstanceContainer& container) const;
416 
419  static DtGpuCullingCreator& instance(DtDe& de);
420 
422  static const std::string& theClassName();
423  protected:
425  };
426 }
427 
unsigned int myMaxNumInstancesPreCulling
Definition: DtGpuCulling.h:361
Contains the DtCullShaderConfig class declaration.
DtCoreGlBufferCreator & myDtCoreGlBufferCreator
Definition: DtGpuCulling.h:396
bool myPerGeomInstanceDataDirty
Definition: DtGpuCulling.h:315
Manager to delete GLBuffer in the main thread.
Definition: DtGlDeleteObjectManager.h:33
DtIndirectGeometryRegistrar * myRegistrar
Definition: DtGpuCulling.h:310
DtMaterial class declaration.
DtGlBuffer * myGpuInstancesOffsetAndNumInstancesBuffer
Definition: DtGpuCulling.h:359
Virtual base class.
Definition: DtVirtualBaseClass.h:19
const DtInstanceContainer & myInstanceContainer
Definition: DtGpuCulling.h:311
Contains makVrv::DtIndirectInstancesInvalidated class.
DtCullShaderConfig myCullShaderConfig
Definition: DtGpuCulling.h:356
DtOsgLightPointManager & myLightPointManager
Definition: DtGpuCulling.h:377
std::vector< InstancesOffsetAndNumOfInstances > myInstancesOffsetAndNumInstances
Definition: DtGpuCulling.h:358
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
creator for DtCoreGlBuffer
Definition: DtCoreGlBuffer.h:58
This class is a component of the DtIndirectGeometry It inputs are: -&gt; the instances registered with Dt...
Definition: DtGpuCulling.h:64
int myOffset
Definition: DtGpuCulling.h:84
Indirect geometry can have multiple models and their corresponding ids registered in it...
Definition: DtIndirectGeometryRegistrar.h:106
voidpf void uLong size
Definition: ioapi.h:39
Contains makVrv::DtFirstTextureStreamedModelAndIndexTracker class.
creator for DtGpuCulling
Definition: DtGpuCulling.h:405
DtGlBuffer * myGpuStateIdToMaxNumCommandsBuffer
Definition: DtGpuCulling.h:370
std::vector< StateIdOffsetAndMaxCommands > VectorStateIdOffsetAndMaxCommands
Definition: DtGpuCulling.h:88
DtGeometrySpecification class declaration.
bool operator==(const InstancesOffsetAndNumOfInstances &rhs) const
Definition: DtGpuCulling.h:74
4 dimensional vector
VectorInts myGeomSpecIndexToCommandIndex
Definition: DtGpuCulling.h:374
unsigned int myLastNumUniqueGeometries
Definition: DtGpuCulling.h:385
DtIndirectInstancesInvalidated myInstancesInvalidated
Definition: DtGpuCulling.h:316
shader configuration storage class.
Definition: DtCullShaderConfig.h:19
DtModelIdAndStreamedBytesTracker mySpecBufferTracker
Definition: DtGpuCulling.h:389
DtOsgLightPointManager registers LightPoint nodes so their TBO can be created and updated in a single...
Definition: DtOsgLightPointManager.h:105
std::map< int, int > MapIntToInt
Definition: DtCommonTypes.h:25
DtGlBuffer * myGpuInputPerGeomInstancesBuffer
contains switch states/ lod info
Definition: DtGpuCulling.h:314
DtFirstTextureStreamedModelAndIndexTracker myFirstTextureStreamedModelAndIndexTracker
Keep track of the first model and what index to start using bindless textures.
Definition: DtGpuCulling.h:383
CameraToBufferMap myMutableGpuOutputInstancesBuffers
The re-distributed/culled/switched/lod&#39;ed instances (a subset of the input instances) ...
Definition: DtGpuCulling.h:339
Contains the DtIndirectEffectTexturesTemplate class declaration.
DtGlBuffer * myGpuSpecIndexToCommandIndexBuffer
Definition: DtGpuCulling.h:375
DtIndirectEffectTexturesTemplate myCurrentEffectTextureState
Definition: DtGpuCulling.h:397
CameraToBufferMap myMutableGpuOutputInstancesBuffersDebug
The re-distributed switched/lod&#39;ed instances but not culled out via cull shader for debugging...
Definition: DtGpuCulling.h:347
holds a set of the instances that need to be invalidated in the instance buffers
Definition: DtIndirectInstancesInvalidated.h:20
Contains makVrv::DtVirtualBaseClass class.
Definition: DtModelIdAndStreamedBytesTracker.h:18
unsigned int myMaxNumInstances
Definition: DtGpuCulling.h:362
unsigned int myLastNumEffectTextures
Definition: DtGpuCulling.h:384
std::vector< int > VectorInts
Definition: DtCommonTypes.h:20
handles the running of the compute shader pass for indirect culling, LODing and switches ...
Definition: DtIndirectCullProgram.h:43
DtGlBuffer * myGpuMaterialsBuffer
The spec buffer containing Materials for all the models/lods of the passed in instances.
Definition: DtGpuCulling.h:327
structure for holding an offset of an instance type (model id), and number of those instances ...
Definition: DtGpuCulling.h:69
4 dimensional vector
Definition: DtMath.h:22
CameraToBufferMap myGpuIndirectBuffersDebug
The indirect command buffer for debugging culling.
Definition: DtGpuCulling.h:350
DtIndirectCullProgram * myCullProgram
Definition: DtGpuCulling.h:354
CameraToBufferMap myMutableGpuIndirectBuffers
these are mutable so the [] operator on the maps can be used in const functions The indirect command ...
Definition: DtGpuCulling.h:336
unsigned int myMaxNumLightSources
Definition: DtGpuCulling.h:364
std::map< osg::observer_ptr< const osg::Camera >, DtGlBuffer * > CameraToBufferMap
Definition: DtGpuCulling.h:91
A generic OpenGL buffer.
Definition: DtGlBuffer.h:27
int myNumOfInstances
Definition: DtGpuCulling.h:72
CameraToBufferMap myMutableGpuOutputInstanceOffsetInPerInstanceDataBuffers
The re-distributed/culled/switched/lod&#39;ed instances&#39; offset into the per instance data buffer...
Definition: DtGpuCulling.h:343
DtModelIdAndStreamedBytesTracker myMaterialBufferTracker
Definition: DtGpuCulling.h:388
DtGlBuffer * myGpuStateIdToCommandCountBuffer
Definition: DtGpuCulling.h:371
CameraToBufferMap myGpuLightSourceIndexOutputBuffers
Definition: DtGpuCulling.h:352
The class that is used to communicate the camera viewing parameters to the DtICullingAndLOD interface...
Definition: DtIndirectViewParameters.h:26
DtDe & myDe
Definition: DtGpuCulling.h:424
std::vector< DtGeometrySpecification > myGeometrySpecifications
c++ buffer that holds the same info
Definition: DtGpuCulling.h:323
int myNumGeometries
Definition: DtGpuCulling.h:392
std::string myName
Definition: DtGpuCulling.h:399
DtGlBuffer * myGpuGeometrySpecificationsBuffer
The spec buffer containing GeometrySpecifications for all the models/lods of the passed in instances...
Definition: DtGpuCulling.h:320
DtIndirectMaterialVector myMaterials
c++ buffer that holds the same info
Definition: DtGpuCulling.h:330
DtGlBuffer * myGpuTexturesBuffer
Definition: DtGpuCulling.h:332
bool myTextureUpdateDirty
Definition: DtGpuCulling.h:386
Contains DLL export macros.
DtDe & myDe
Definition: DtGpuCulling.h:379
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
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
int myStreamedGeometryOffsetIdx
Definition: DtGpuCulling.h:391
Definition: DtFirstTextureStreamedModelAndIndexTracker.h:16
CameraSet myModelIdsToNumInstancesChanged
Definition: DtGpuCulling.h:394
std::set< osg::observer_ptr< const osg::Camera > > CameraSet
Definition: DtGpuCulling.h:92
voidpf uLong offset
Definition: ioapi.h:42
Contains makVrv::DtIndirectViewParameters class.
Class that allows you to abstractly register effect texture types the effect texture types are client...
Definition: DtIndirectEffectTexturesTemplate.h:40
VectorStateIdOffsetAndMaxCommands myStateIdToMaxNumCommands
Definition: DtGpuCulling.h:367
std::vector< Material > DtIndirectMaterialVector
Each model type can have a number of geometries, each with an own material.
Definition: DtMaterial.h:46
int myMaxCommands
Definition: DtGpuCulling.h:85
Contains makVrv::DtModelIdAndStreamedBytesTracker class.
structure for holding an offset of a command of a given type (state id) and the number of commands of...
Definition: DtGpuCulling.h:82

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)