12 #include <osg/FrameStamp>
25 #define CPU_SIDE_COMPILATION 1
26 #include <../data/shaders/indirect/GeometrySpecification.h>
34 #include <unordered_set>
45 class DtIndirectGeometryRegistrar;
46 class DtInstanceContainer;
47 class DtOsgShaderFilesCache;
48 class DtIndirectCullProgram;
49 class DtCpuCullingHelper;
50 class DtOsgLightPointManager;
51 class DtGlDeleteObjectManager;
52 class DtCoreGlBufferCreator;
53 class DtIndirectClearBufferProgram;
54 class DtIndirectModelInfo;
56 class DtIndirectGlTextureResidencyManager;
110 typedef std::set<osg::observer_ptr<const osg::Camera> >
CameraSet;
136 virtual void setRegistrarInvalid(
void);
139 virtual void setDebug(
bool debug);
147 virtual void updateGpuBuffers(osg::RenderInfo& renderInfo);
151 virtual void modelIdsToNumInstancesChanged(
void);
154 virtual void updatePerInstancePerGeomBuffers(
const MapIntToInt& modelIdsToNumInstances,
const osg::Camera* camera);
161 ,
const osg::FrameStamp* frameStamp
166 ,
const osg::Camera* camera
167 ,
bool& outputInstanceBufferChanged);
170 static bool setUpOutputFormatAndBindings();
173 static void unsetUpOutputFormatAndBindings();
179 virtual bool bindGpuOutputInstanceBuffersWithAddressRange(
const osg::Camera* camera)
const;
186 virtual bool bindCommandBufferAndSsbos(
const DtGlBuffer* gpuDofTransformBuffer
190 ,
const osg::Camera* camera);
193 virtual void unbindCommandBufferAndSsbos(
const osg::Camera* camera);
199 virtual void bindGpuOutputInstanceBufferDebug(
const osg::Camera* camera)
const;
203 virtual void unbindGpuOutputInstanceBufferDebug(
const osg::Camera* camera)
const;
208 virtual bool bindIndirectThingsDebug(
const DtGlBuffer* gpuDofTransformBuffer,
const osg::Camera* camera);
211 virtual void unbindIndirectThingsDebug(
const osg::Camera* camera);
215 virtual bool useInstanceCount(
void)
const;
219 virtual int numDrawCommands(
const osg::Camera* camera)
const;
222 virtual void releaseGLObjects(osg::State* state)
const;
225 virtual void reloadShaders()
const;
228 virtual bool buffersInitializedForCamera(
const osg::Camera* camera)
const;
231 virtual unsigned int maxNumInstances(
void)
const;
237 virtual const std::vector<InstancesOffsetAndNumOfInstances>& instancesOffsetAndNumInstances(
void)
const;
240 virtual bool readyToUpdateAndGpuBuffersNeedUpdate()
const;
243 virtual bool gpuBuffersNeedUpdate()
const;
246 virtual bool textureUpdateDirty()
const;
249 virtual void setTextureUpdateDirty(
bool flag);
252 virtual bool perGeomInstanceDataDirty()
const;
255 virtual void setPerGeomInstanceDataDirty(
bool flag);
258 virtual bool instancesInvalidatedDirty()
const;
261 virtual void invalidateInstance(
int instanceId,
int offset,
int size);
264 virtual const DtGlBuffer* gpuInputPerGeomInstancesBuffer(
void)
const;
267 virtual const DtGlBuffer* gpuMaterialsBuffer()
const;
270 virtual void fillOutputInstances(std::vector<
DtVector4<int> >& outputInstances,
const osg::Camera* camera)
const;
276 virtual void setName(
const std::string& name);
279 virtual const std::string& name(
void)
const;
283 virtual void updateGpuInputPerGeomInstancesBufferByInvalidating();
288 virtual void updateGpuGeometrySpecificationsBuffer();
289 virtual void updateGpuMaterialsBuffer();
290 virtual void updateGpuInputPerGeomInstancesBuffer();
291 virtual void updateGpuLightPointBuffers();
292 virtual void updateGpuIndirectBuffersInstanceCount(
const MapIntToInt& modelIdsToNumInstances,
const osg::Camera* camera);
293 virtual void updateGpuIndirectBuffersNonInstanceCount(
const MapIntToInt& modelIdsToNumInstances,
const osg::Camera* camera);
294 virtual void clearGpuIndirectBuffer(
const osg::Camera* camera);
295 virtual void clearStateIdCommandCountBuffer();
296 virtual void clearLightSourceIndexOutputBuffer(
const osg::Camera* osgCamera,
unsigned int maxNumLightSources);
301 virtual void updateGpuTexturesBuffer(
const osg::RenderInfo& renderInfo);
304 virtual void updateInstancesOffsetAndInstances(
const MapIntToInt& modelIdsToNumInstances);
307 virtual void updateInstancesOffsetAndInstancesBuffer(
void);
310 virtual void updateStateIdToMaxNumCommands(
const MapIntToInt& modelIdsToNumInstances);
313 virtual void updateStateIdToMaxNumCommandsBuffer(
void);
316 virtual bool checkSpecBuffersOk(
void)
const;
322 virtual void deleteBuffers(
void);
329 virtual void flushCameraSpecificBuffers();
332 virtual void flushSingleCameraSpecificBufferMap(
CameraToBufferMap& cameraToBufferMap);
335 virtual void flushSingleCameraSet(
CameraSet& cameraSet);
342 virtual void setTexture(GLuint64& textureToSet,
GLuint textureID);
350 virtual void decrementUsersAndUnLoadIfNecessary();
unsigned int myMaxNumInstancesPreCulling
Definition: DtGpuCulling.h:403
Contains the DtCullShaderConfig class declaration.
DtCoreGlBufferCreator & myDtCoreGlBufferCreator
Definition: DtGpuCulling.h:438
bool myPerGeomInstanceDataDirty
Definition: DtGpuCulling.h:359
static const int theGpuOutputInstanceOffsetInPerInstanceDataBufferIndex
Definition: DtGpuCulling.h:453
DtIndirectGlTextureResidencyManager & myGlTextureResidencyManager
Definition: DtGpuCulling.h:443
DtIndirectGeometryRegistrar * myRegistrar
Definition: DtGpuCulling.h:353
DtMaterial class declaration.
DtGlBuffer * myGpuInstancesOffsetAndNumInstancesBuffer
Definition: DtGpuCulling.h:401
std::vector< DrawElementsIndirectBindlessCommandNV > myMutableBindlessIndexAndVertexBuffers
the bindless vertex and index buffers
Definition: DtGpuCulling.h:370
const DtInstanceContainer & myInstanceContainer
Definition: DtGpuCulling.h:355
Contains makVrv::DtIndirectInstancesInvalidated class.
DtOsgLightPointManager & myLightPointManager
Definition: DtGpuCulling.h:419
std::vector< InstancesOffsetAndNumOfInstances > myInstancesOffsetAndNumInstances
Definition: DtGpuCulling.h:400
static const int theGpuOutputInstanceBufferDebugIndex
Definition: DtGpuCulling.h:454
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
DtIndirectCullProgram * myMutableCullProgram
Definition: DtGpuCulling.h:396
creator for DtCoreGlBuffer
Definition: DtCoreGlBuffer.h:66
This class is a component of the DtIndirectGeometry It inputs are: -> the instances registered with Dt...
Definition: DtGpuCulling.h:82
int myOffset
Definition: DtGpuCulling.h:102
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.
int myOffset
Definition: DtGpuCulling.h:89
unsigned int GLuint
Definition: DtGlTextureBufferObject.h:17
DtGlBuffer * myGpuStateIdToMaxNumCommandsBuffer
Definition: DtGpuCulling.h:412
std::vector< StateIdOffsetAndMaxCommands > VectorStateIdOffsetAndMaxCommands
Definition: DtGpuCulling.h:106
bool operator==(const InstancesOffsetAndNumOfInstances &rhs) const
Definition: DtGpuCulling.h:92
DtGlBuffer * myBindlessIndexAndVertexBuffersBuffer
The gpu buffer holding the same above info.
Definition: DtGpuCulling.h:373
VectorInts myGeomSpecIndexToCommandIndex
Definition: DtGpuCulling.h:416
unsigned int myLastNumUniqueGeometries
Definition: DtGpuCulling.h:427
DtIndirectInstancesInvalidated myInstancesInvalidated
Definition: DtGpuCulling.h:360
shader configuration storage class. Has 3 available options which are described in the constructor's ...
Definition: DtCullShaderConfig.h:21
DtOsgLightPointManager registers LightPoint nodes so their TBO can be created and updated in a single...
Definition: DtOsgLightPointManager.h:106
std::map< int, int > MapIntToInt
Definition: DtCommonTypes.h:25
DtGlBuffer * myGpuInputPerGeomInstancesBuffer
contains switch states/ lod info
Definition: DtGpuCulling.h:358
DtFirstTextureStreamedModelAndIndexTracker myFirstTextureStreamedModelAndIndexTracker
Keep track of the first model and what index to start using bindless textures.
Definition: DtGpuCulling.h:425
CameraToBufferMap myMutableGpuOutputInstancesBuffers
The re-distributed/culled/switched/lod'ed instances (a subset of the input instances) ...
Definition: DtGpuCulling.h:446
std::vector< DtGeometrySpecification > myMutableGeometrySpecifications
c++ buffer that holds the same info
Definition: DtGpuCulling.h:363
Variadic templated creator class for defining a DtVirtualBaseClass creator that is automatically regi...
Definition: DtVirtualBaseClassCreator.h:22
Contains the DtIndirectEffectTexturesTemplate class declaration.
DtGlBuffer * myGpuSpecIndexToCommandIndexBuffer
Definition: DtGpuCulling.h:417
DtIndirectEffectTexturesTemplate myCurrentEffectTextureState
Definition: DtGpuCulling.h:439
CameraToBufferMap myMutableGpuOutputInstancesBuffersDebug
The re-distributed switched/lod'ed instances but not culled out via cull shader for debugging...
Definition: DtGpuCulling.h:389
holds a set of the instances that need to be invalidated in the instance buffers
Definition: DtIndirectInstancesInvalidated.h:20
Definition: DtModelIdAndStreamedBytesTracker.h:18
unsigned int myMaxNumInstances
Definition: DtGpuCulling.h:404
unsigned int myLastNumEffectTextures
Definition: DtGpuCulling.h:426
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:54
DtGlBuffer * myGpuMaterialsBuffer
The spec buffer containing Materials for all the models/lods of the passed in instances.
Definition: DtGpuCulling.h:377
DtIndirectClearBufferProgram * myMutableClearBufferProgram
Definition: DtGpuCulling.h:456
Contains makVrv::DtIndirectModelSubGeometry class.
structure for holding an offset of an instance type (model id), and number of those instances ...
Definition: DtGpuCulling.h:87
4 dimensional vector
Definition: DtMath.h:22
CameraToBufferMap myGpuIndirectBuffersDebug
The indirect command buffer for debugging culling.
Definition: DtGpuCulling.h:392
unsigned int myMaxNumLightSources
Definition: DtGpuCulling.h:406
std::map< osg::observer_ptr< const osg::Camera >, DtGlBuffer * > CameraToBufferMap
Definition: DtGpuCulling.h:109
DtModelIdAndStreamedBytesTracker myMutableSpecBufferTracker
Definition: DtGpuCulling.h:431
A generic OpenGL buffer. This can be: -> a vertex buffer -> an index buffer -> a shader storage buffe...
Definition: DtGlBuffer.h:29
int myNumOfInstances
Definition: DtGpuCulling.h:90
CameraToBufferMap myMutableGpuOutputInstanceOffsetInPerInstanceDataBuffers
The re-distributed/culled/switched/lod'ed instances' offset into the per instance data buffer...
Definition: DtGpuCulling.h:450
DtModelIdAndStreamedBytesTracker myMaterialBufferTracker
Definition: DtGpuCulling.h:430
DtGlBuffer * myGpuStateIdToCommandCountBuffer
Definition: DtGpuCulling.h:413
const DtCullShaderConfig myCullShaderConfig
Definition: DtGpuCulling.h:398
DtVirtualBaseClassCreator< DtGpuCulling, DtInstanceContainer &, const DtCullShaderConfig & > DtGpuCullingCreator
creator
Definition: DtGpuCulling.h:59
CameraToBufferMap myGpuLightSourceIndexOutputBuffers
Definition: DtGpuCulling.h:394
The class that is used to communicate the camera viewing parameters to the DtICullingAndLOD interface...
Definition: DtIndirectViewParameters.h:26
int myNumGeometries
Definition: DtGpuCulling.h:434
std::string myName
Definition: DtGpuCulling.h:441
DtGlBuffer * myGpuGeometrySpecificationsBuffer
The spec buffer containing GeometrySpecifications for all the models/lods of the passed in instances...
Definition: DtGpuCulling.h:367
DtIndirectMaterialVector myMaterials
c++ buffer that holds the same info
Definition: DtGpuCulling.h:380
Manager to delete GLBuffer in the main thread.
Definition: DtGlDeleteObjectManager.h:44
friend DtGpuCullingCreator
Definition: DtGpuCulling.h:114
std::unordered_set< DtIndirectModelInfo * > myModelsBeingUsed
Definition: DtGpuCulling.h:458
This class clears buffers using compute shader Theoretically, there are performance gains to be achie...
Definition: DtIndirectClearBufferProgram.h:33
DtGlBuffer * myGpuTexturesBuffer
Definition: DtGpuCulling.h:382
bool myTextureUpdateDirty
Definition: DtGpuCulling.h:428
CameraToBufferMap myMutableGpuIndirectBuffersBindless
the buffer into which the commands are generated
Definition: DtGpuCulling.h:385
Contains DLL export macros.
DtDe & myDe
Definition: DtGpuCulling.h:421
Enforces a single DtGlTextureResidencyManager across the whole indirect system/vrv (since the DtGlTex...
Definition: DtIndirectGlTextureResidencyManager.h:24
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:70
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
static const int theGpuOutputInstanceBufferIndex
Definition: DtGpuCulling.h:452
int myStreamedGeometryOffsetIdx
Definition: DtGpuCulling.h:433
Definition: DtFirstTextureStreamedModelAndIndexTracker.h:16
CameraSet myModelIdsToNumInstancesChanged
Definition: DtGpuCulling.h:436
std::set< osg::observer_ptr< const osg::Camera > > CameraSet
Definition: DtGpuCulling.h:110
voidpf uLong offset
Definition: ioapi.h:42
Contains makVrv::DtIndirectViewParameters class.
bool myRegistrarValid
Definition: DtGpuCulling.h:354
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:409
Contains the per Model info which the indirect module needs It is owned by the Indirect geometry regi...
Definition: DtIndirectModelInfo.h:44
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:103
Contains makVrv::DtModelIdAndStreamedBytesTracker class.
const char * creatorTypeName< DtGpuCulling >(void)
template specialization for the creator (pass the class being created to the creatorTypeName template...
Definition: DtGpuCulling.h:66
structure for holding an offset of a command of a given type (state id) and the number of commands of...
Definition: DtGpuCulling.h:100