![]() |
VR-Forces 4.10 Class Documentation
|
This class is a component of the DtIndirectGeometry It inputs are: -> the instances registered with DtIndirectGeometry -> the viewing parameters (view matrix, projection matrix, etc) -> the indirect registrar (so that it can generate gpu data for -> the models of the instances from the interim data accessible -> via the registrar It outputs are: -> Tndirect command buffer -> The count of the indirect commands -> The input instances shuffled around/culled/lod'ed reflecting -> their order within the indirect command buffer generated -> It will also (optionally) do culling and lod. More...
Classes | |
| struct | InstancesOffsetAndNumOfInstances |
| structure for holding an offset of an instance type (model id), and number of those instances More... | |
| struct | StateIdOffsetAndMaxCommands |
| structure for holding an offset of a command of a given type (state id) and the number of commands of that type More... | |
Public Types | |
| typedef std::vector < StateIdOffsetAndMaxCommands > | VectorStateIdOffsetAndMaxCommands |
| typedef std::map < osg::observer_ptr< const osg::Camera >, DtGlBuffer * > | CameraToBufferMap |
| typedef std::set < osg::observer_ptr< const osg::Camera > > | CameraSet |
Public Member Functions | |
| virtual | ~DtGpuCulling () |
| destructor More... | |
| virtual void | setRegistrar (DtIndirectGeometryRegistrar *registrar) |
| set the registrar More... | |
| virtual void | setCullShaderConfig (const DtCullShaderConfig &cullShaderConfig) |
| set the compute shader config More... | |
| virtual const DtCullShaderConfig & | cullShaderConfig (void) const |
| get the compute shader config More... | |
| virtual DtCullShaderConfig & | cullShaderConfig (void) |
| get the compute shader config (non-const version) More... | |
| virtual void | updateGpuBuffers (osg::RenderInfo &renderInfo) |
| updateGpuBuffers outInstanceTransformsUpdated indicates whether instance transforms that were marked dirty were sent to the GPU. More... | |
| virtual void | modelIdsToNumInstancesChanged (void) |
| indicate to the culling that model ids to num instances changed so that internal maps get updated More... | |
| virtual void | updatePerInstancePerGeomBuffers (const MapIntToInt &modelIdsToNumInstances, const osg::Camera *camera) |
| update the buffers that are needed to be correct every frame More... | |
| virtual void | doCulling (const DtIndirectViewParameters &viewParameters, const osg::FrameStamp *frameStamp, const DtGlBuffer *gpuLodVisibleBuffer, const DtGlBuffer *gpuDofTransformBuffer, const DtGlBuffer *gpuSwitchStateBuffer, const DtGlBuffer *gpuPerInstanceDataBuffer, const osg::Camera *camera) |
| Do the culling (view frustum, lod, switch) More... | |
| virtual void | bindGpuOutputInstanceBuffer (const osg::Camera *camera) const |
| bind the output instance buffer More... | |
| virtual void | unbindGpuOutputInstanceBuffer (const osg::Camera *camera) const |
| unbind the output instance buffer More... | |
| virtual bool | bindCommandBufferAndSsbos (const DtGlBuffer *gpuDofTransformBuffer, const DtGlBuffer *gpuDofModelScaleBuffer, const DtGlBuffer *gpuUvOffsetBuffer, const DtGlBuffer *gpuPerInstanceDataBuffer, const osg::Camera *camera) |
| bind the indirect command buffer and the count buffer returns false if handle is 0. More... | |
| virtual void | unbindCommandBufferAndSsbos (const osg::Camera *camera) |
| unbind the indirect command buffer and the count buffer More... | |
| virtual void | bindGpuOutputInstanceBufferDebug (const osg::Camera *camera) const |
| Bind the buffer containing the output instances of the cull shader with debugging. More... | |
| virtual void | unbindGpuOutputInstanceBufferDebug (const osg::Camera *camera) const |
| Unbind the buffer containing the output instances of the cull shader with debugging. More... | |
| virtual bool | bindIndirectThingsDebug (const DtGlBuffer *gpuDofTransformBuffer, const osg::Camera *camera) |
| bind the debug indirect command buffer, dof transform buffer and the specs buffer This allows us to draw all instances that are not switched out, lod'ed out (all non view frustum culled instances) More... | |
| virtual void | unbindIndirectThingsDebug (const osg::Camera *camera) |
| unbind the debug indirect command buffer, dof transform buffer and the specs buffer More... | |
| virtual bool | useInstanceCount (void) const |
| whether we are optimizing for shared models (useInstanceCount()=true) or unique models (useInstanceCount()=false), across instances More... | |
| virtual int | numDrawCommands (const osg::Camera *camera) const |
| The number of draw commands generated. More... | |
| virtual void | releaseGLObjects (osg::State *state) const |
| release the GL objects for the GpuCulling compute shader More... | |
| virtual void | reloadShaders () const |
| destroy the cull program and shader if they exists so they can be recreated next frame. More... | |
| virtual bool | buffersInitializedForCamera (const osg::Camera *camera) const |
| check to see if the buffers for this camera have been initialized. More... | |
| virtual unsigned int | maxNumInstances (void) const |
| get the max number of instances that can possibly be rendered if none are culled out. More... | |
| virtual const VectorStateIdOffsetAndMaxCommands & | stateIdOffsetAndMaxCommands (void) const |
| get the map of the state id to their offset/number More... | |
| virtual const std::vector < InstancesOffsetAndNumOfInstances > & | instancesOffsetAndNumInstances (void) const |
| access the instances offset and num of instances map More... | |
| virtual bool | readyToUpdateAndGpuBuffersNeedUpdate () const |
| helper function to decide if a job should be launched More... | |
| virtual bool | gpuBuffersNeedUpdate () const |
| is anything in the buffers dirty? More... | |
| virtual bool | textureUpdateDirty () const |
| are there textures that still need updating. More... | |
| virtual void | setTextureUpdateDirty (bool flag) |
| inform that textures are dirty More... | |
| virtual bool | perGeomInstanceDataDirty () const |
| is per geom instance data dirty? More... | |
| virtual void | setPerGeomInstanceDataDirty (bool flag) |
| set the per geom instance data dirty More... | |
| virtual bool | instancesInvalidatedDirty () const |
| were any instances invalidated? More... | |
| virtual void | invalidateInstance (int instanceId, int offset, int size) |
| invalidate an instance More... | |
| virtual const DtGlBuffer * | gpuInputPerGeomInstancesBuffer (void) const |
| Accessor for the gpu per geom instances buffer. More... | |
| virtual const DtGlBuffer * | gpuMaterialsBuffer () const |
| Accessor for the gpu materials buffer. More... | |
| virtual void | fillOutputInstances (std::vector< DtVector4< int > > &outputInstances, const osg::Camera *camera) const |
| For debugging. Get the values of the output instances computed by the compute shader. More... | |
| virtual const DtIndirectEffectTexturesTemplate & | currentEffectTexturesState () const |
| get the current effect texture state as it was after the last time the textures were sent down More... | |
| virtual void | setName (const std::string &name) |
| set a name on this (useful for debugging) More... | |
| virtual const std::string & | name (void) const |
| get the name on this (useful for debugging) More... | |
Protected Member Functions | |
| DtGpuCulling (DtDe &de, DtInstanceContainer &container) | |
| constructor More... | |
| virtual void | updateGpuTexturesBuffer (osg::RenderInfo &renderInfo) |
| The buffer containing the bindless textures' addresses of the model textures. More... | |
| virtual void | updateInstancesOffsetAndInstances (const MapIntToInt &modelIdsToNumInstances) |
| update the myInstancesOffsetAndNumInstances vector so it is ready to be used More... | |
| virtual void | updateInstancesOffsetAndInstancesBuffer (void) |
| update the myGpuInstancesOffsetAndNumInstancesBuffer More... | |
| virtual void | updateStateIdToMaxNumCommands (const MapIntToInt &modelIdsToNumInstances) |
| update the myStateIdToMaxNumCommands with the correct max state instances for each state More... | |
| virtual void | updateStateIdToMaxNumCommandsBuffer (void) |
| update the myGpuStateIdToMaxNumCommandsBuffer with the correct max state instances for each state More... | |
| virtual bool | checkSpecBuffersOk (void) const |
| check a few of the buffers to make sure they are not null More... | |
| virtual void | releaseCameraToBufferMap (DtGLDeleteObjectManager &deleteManager, const CameraToBufferMap &cameraToBufferMap) const |
| release the resources for all the buffers in a camera to buffer map More... | |
| virtual void | deleteBuffers (void) |
| delete buffers More... | |
| virtual void | deleteCameraToBufferMap (CameraToBufferMap &cameraToBufferMap) |
| delete all the buffers in a camera to buffer map More... | |
| virtual void | flushCameraSpecificBuffers () |
| flush any buffers from the maps of cameras to buffers that no longer have a valid camera. More... | |
| virtual void | flushSingleCameraSpecificBufferMap (CameraToBufferMap &cameraToBufferMap) |
| flush a single camera to buffer map More... | |
| virtual void | flushSingleCameraSet (CameraSet &cameraSet) |
| flush a single camera set. More... | |
| virtual void | updateGpuInputPerGeomInstancesBufferByInvalidating () |
| update the various buffers that are fed to the cull shader -> if new models came in -> if textures became available (they can be asynchronously available, e.g. More... | |
| virtual void | updateGpuGeometrySpecificationsBuffer () |
| virtual void | updateGpuMaterialsBuffer () |
| virtual void | updateGpuInputPerGeomInstancesBuffer () |
| virtual void | updateGpuLightPointBuffers () |
| virtual void | updateGpuIndirectBuffersInstanceCount (const MapIntToInt &modelIdsToNumInstances, const osg::Camera *camera) |
| virtual void | updateGpuIndirectBuffersNonInstanceCount (const MapIntToInt &modelIdsToNumInstances, const osg::Camera *camera) |
| virtual void | clearGpuIndirectBuffer (const osg::Camera *camera) |
| virtual void | clearStateIdCommandCountBuffer () |
Private Member Functions | |
| DtGpuCulling ()=delete | |
| default constructor More... | |
| DtGpuCulling (const DtGpuCulling &other)=delete | |
| Copy Constructor not implemented – Copy Not Allowed. More... | |
| DtGpuCulling & | operator= (const DtGpuCulling &other)=delete |
| Assignment Operator Not implemented – Assignment Not Allowed. More... | |
Friends | |
| class | DtGpuCullingCreator |
This class is a component of the DtIndirectGeometry It inputs are: -> the instances registered with DtIndirectGeometry -> the viewing parameters (view matrix, projection matrix, etc) -> the indirect registrar (so that it can generate gpu data for -> the models of the instances from the interim data accessible -> via the registrar It outputs are: -> Tndirect command buffer -> The count of the indirect commands -> The input instances shuffled around/culled/lod'ed reflecting -> their order within the indirect command buffer generated -> It will also (optionally) do culling and lod.
| typedef std::vector<StateIdOffsetAndMaxCommands> makVrv::DtGpuCulling::VectorStateIdOffsetAndMaxCommands |
| typedef std::map<osg::observer_ptr<const osg::Camera>, DtGlBuffer*> makVrv::DtGpuCulling::CameraToBufferMap |
| typedef std::set<osg::observer_ptr<const osg::Camera> > makVrv::DtGpuCulling::CameraSet |
|
protected |
constructor
|
virtual |
destructor
|
privatedelete |
default constructor
|
privatedelete |
Copy Constructor not implemented – Copy Not Allowed.
|
privatedelete |
Assignment Operator Not implemented – Assignment Not Allowed.
|
virtual |
set the registrar
|
virtual |
set the compute shader config
|
virtual |
get the compute shader config
|
virtual |
get the compute shader config (non-const version)
|
virtual |
updateGpuBuffers outInstanceTransformsUpdated indicates whether instance transforms that were marked dirty were sent to the GPU.
This may not always happen with a call to updateGpuBuffers.
|
virtual |
indicate to the culling that model ids to num instances changed so that internal maps get updated
|
virtual |
update the buffers that are needed to be correct every frame
|
virtual |
Do the culling (view frustum, lod, switch)
|
virtual |
bind the output instance buffer
|
virtual |
unbind the output instance buffer
|
virtual |
bind the indirect command buffer and the count buffer returns false if handle is 0.
Can happen if the buffer hasn't been re-created yet (e.g. when the context is deleted and recreated), depending on the job/frame syc this can happen a few frames later
|
virtual |
unbind the indirect command buffer and the count buffer
|
virtual |
Bind the buffer containing the output instances of the cull shader with debugging.
This is the buffer representing the non-switched otu & non-loded out instances (all non view frustum culled instances).
|
virtual |
Unbind the buffer containing the output instances of the cull shader with debugging.
|
virtual |
bind the debug indirect command buffer, dof transform buffer and the specs buffer This allows us to draw all instances that are not switched out, lod'ed out (all non view frustum culled instances)
|
virtual |
unbind the debug indirect command buffer, dof transform buffer and the specs buffer
|
virtual |
whether we are optimizing for shared models (useInstanceCount()=true) or unique models (useInstanceCount()=false), across instances
|
virtual |
The number of draw commands generated.
Is a value between [0, DtIndirectGeoUtils::getMaxDrawCountNoCullingNoLod()], inclusive
|
virtual |
release the GL objects for the GpuCulling compute shader
|
virtual |
destroy the cull program and shader if they exists so they can be recreated next frame.
|
virtual |
check to see if the buffers for this camera have been initialized.
get the max number of instances that can possibly be rendered if none are culled out.
|
virtual |
get the map of the state id to their offset/number
|
virtual |
access the instances offset and num of instances map
|
virtual |
helper function to decide if a job should be launched
|
virtual |
is anything in the buffers dirty?
|
virtual |
are there textures that still need updating.
|
virtual |
inform that textures are dirty
|
virtual |
is per geom instance data dirty?
|
virtual |
set the per geom instance data dirty
|
virtual |
were any instances invalidated?
|
virtual |
invalidate an instance
|
virtual |
Accessor for the gpu per geom instances buffer.
|
virtual |
Accessor for the gpu materials buffer.
|
virtual |
For debugging. Get the values of the output instances computed by the compute shader.
|
virtual |
get the current effect texture state as it was after the last time the textures were sent down
|
virtual |
set a name on this (useful for debugging)
|
virtual |
get the name on this (useful for debugging)
|
protectedvirtual |
update the various buffers that are fed to the cull shader -> if new models came in -> if textures became available (they can be asynchronously available, e.g.
via osg ico) -> if the number of instances changed
|
protectedvirtual |
|
protectedvirtual |
|
protectedvirtual |
|
protectedvirtual |
|
protectedvirtual |
|
protectedvirtual |
|
protectedvirtual |
|
protectedvirtual |
|
protectedvirtual |
The buffer containing the bindless textures' addresses of the model textures.
|
protectedvirtual |
update the myInstancesOffsetAndNumInstances vector so it is ready to be used
|
protectedvirtual |
update the myGpuInstancesOffsetAndNumInstancesBuffer
|
protectedvirtual |
update the myStateIdToMaxNumCommands with the correct max state instances for each state
|
protectedvirtual |
update the myGpuStateIdToMaxNumCommandsBuffer with the correct max state instances for each state
|
protectedvirtual |
check a few of the buffers to make sure they are not null
|
protectedvirtual |
release the resources for all the buffers in a camera to buffer map
|
protectedvirtual |
delete buffers
|
protectedvirtual |
delete all the buffers in a camera to buffer map
|
protectedvirtual |
flush any buffers from the maps of cameras to buffers that no longer have a valid camera.
|
protectedvirtual |
flush a single camera to buffer map
|
protectedvirtual |
flush a single camera set.
|
friend |
|
protected |
|
protected |
|
protected |
contains switch states/ lod info
|
protected |
|
protected |
|
protected |
The spec buffer containing GeometrySpecifications for all the models/lods of the passed in instances.
|
protected |
c++ buffer that holds the same info
|
protected |
The spec buffer containing Materials for all the models/lods of the passed in instances.
|
protected |
c++ buffer that holds the same info
|
protected |
|
mutableprotected |
these are mutable so the [] operator on the maps can be used in const functions The indirect command buffer that will be generated
|
mutableprotected |
The re-distributed/culled/switched/lod'ed instances (a subset of the input instances)
|
mutableprotected |
The re-distributed/culled/switched/lod'ed instances' offset into the per instance data buffer, so that per intsance data can be accessed.
|
mutableprotected |
The re-distributed switched/lod'ed instances but not culled out via cull shader for debugging.
|
protected |
The indirect command buffer for debugging culling.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
mutableprotected |
Keep track of the first model and what index to start using bindless textures.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |