VR-Forces 5.0.2 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Classes | Public Member Functions | Static Public Member Functions | Public Attributes | Protected Types | Protected Member Functions | Protected Attributes | Static Protected Attributes | Private Member Functions | Friends
makVrv::DtIndirectGeometry Class Reference

 \ ::,

which allows us to hook into our indirect engine to render using indirect rendering. In the case of features, the

See Also
DtIndirectGeometry is parented to the feature tile nodes and manages the indirect rendering of all the feature points in that tile. For paging databases it manages the indirect rendering of a complete tile. For terrain patches it manages the indirect rendering of the full patch. For entities the
DtIndirectGeometry is managed by a
DtIndirectGeometryGrid which has a
DtIndirectGeometry per geo cell. Contains some managers for processing the state (
DtIndirectSwitchManager,
DtIndirectDofManager,
DtIndirectLodManager,
DtIndirectUvOffsetManager,
DtIndirectPerInstanceDataManager) Uses a
DtGpuCulling object for processing the state of the entities and culling them to setup the command buffer for drawing. Finally
DtIndirectDrawComponent objects are used to draw the geometry based on the state
Inheritance diagram for makVrv::DtIndirectGeometry:
Inheritance graph
[legend]

Classes

struct  TotalCounter
 

Public Member Functions

virtual void setName (const std::string &name) override
 
virtual void setRegistrar (DtIndirectGeometryRegistrar *registrar)
 
virtual
DtIndirectGeometryRegistrar
registrar ()
 
virtual const charclassName () const
 
virtual void drawImplementation (osg::RenderInfo &renderInfo) const
 
virtual unsigned int rebuildRegistrar (osg::RenderInfo &renderInfo) const
 
virtual int addInstance (const DtIndirectGeometryInstance &instance)
 
virtual int addInstance (int modelId, const osg::Matrixd &xForm, float modelScale, float modelRadius, int lightPointGroupId)
 
virtual void accept (osg::NodeVisitor &nv)
 
virtual void setParent (const osg::Group *parent)
 
virtual void setRegistrarInvalid (void)
 
virtual void releaseGLObjects (osg::State *state) const
 
virtual void accept (osg::PrimitiveFunctor &functor) const
 
virtual void setupIndirect ()
 
virtual void setupIndirectShadersOnly ()
 
virtual void setLocalOriginTransform (const osg::Matrixd &localOriginTransform)
 
virtual const osg::Matrixd & localOriginTransform () const
 
virtual bool actuallyAddQueuedUpInstances (void)
 
virtual void launchMainThreadJobAndWait (DtDe &de, DtOsgRenderer &renderer)
 
virtual boost::condition_variable & waitCondition ()
 
virtual void updateGpuBuffers (osg::RenderInfo &renderInfo)
 
virtual void setFadeParameters (const DtIndirectFadeParameters &fadeParameters)
 
virtual const
DtIndirectFadeParameters
fadeParameters (void) const
 
virtual void perCameraUpdateAndCull (osg::RenderInfo &renderInfo, const osg::Camera *camera, const osg::Matrix &modelViewMatrix, const osg::FrameStamp *frameStamp)
 
virtual void fillViewParameters (DtIndirectViewParameters &destViewParameters, const osg::Matrix &modelViewMatrix, const osg::Camera *camera, osg::RenderInfo &renderInfo) const
 
virtual void fillAltitude3d (DtIndirectViewParameters &destViewParameters, const Vector3_64 &eye) const
 
virtual bool readyToRender (const int instanceIdInIndirect) const
 
virtual bool instanceEverAdded (void) const
 
virtual int numValidInstances (void) const
 
virtual const osg::Geode * parentGeode (void) const
 
virtual osg::Geode * parentGeode (void)
 
virtual void setUpdateBuffersJobsRequiredCurrentFrame (bool requiredCurrentFrame)
 
virtual bool updateBuffersJobsRequiredCurrentFrame (void) const
 

Static Public Member Functions

static int numIndirectGeometries (void)
 
static void setTrackObjects (bool val)
 
static bool trackObjects (void)
 

Public Attributes

friend DtIndirectGeometryCreator
 

Protected Types

typedef std::unordered_map
< int, int
MapIndirectIdToInstanceContainerId
 

Protected Member Functions

 DtIndirectGeometry (DtDe &de, const DtCullShaderConfig &cullShaderConfig, bool terrainPatch, bool managesIndividualInstances)
 
virtual ~DtIndirectGeometry ()
 
virtual bool addInstanceActual (const DtIndirectGeometryInstance &instance)
 
virtual void setupShadersIfNecessary ()
 
virtual void setupDebugUniforms ()
 
virtual void installDefaultMaterial (osg::StateSet *ss)
 
virtual void slot_reloadShaders ()
 
virtual void updateIndicesCount (const DtIndirectModelInfo &modelInfo, int instanceContainerIndex)
 
virtual void updateModelIdsToInstances (int modelId, int instanceId, bool add)
 
virtual void drawFromCommandBuffer (osg::RenderInfo &renderInfo, const DtIndirectViewParameters &viewParameters, const osg::Camera *camera) const
 
virtual void updateInstancePositionOrientationAddedActual (const DtIndirectGeometryInstance &instance, int outInstanceIndex)
 
virtual void updateInstanceSwitchesAddedActual (const DtIndirectGeometryInstance &instance, int outInstanceIndex)
 
virtual void updateInstanceSequencesAddedActual (const DtIndirectGeometryInstance &instance, int outInstanceIndex)
 
virtual void updateInstanceUvOffsetsAddedActual (const DtIndirectGeometryInstance &instance, int outInstanceIndex)
 
virtual void updateInstanceColorAddedActual (const DtIndirectGeometryInstance &instance, int outInstanceIndex)
 
virtual void updateInstanceOtherData0AddedActual (const DtIndirectGeometryInstance &instance, int outInstanceIndex)
 
virtual void updateInstanceVisibilityLightPointMaxDistanceActual (const DtIndirectGeometryInstance &instance, int outInstanceIndex)
 
virtual bool updateInstanceDeletionBeforeAddedActual (const DtIndirectGeometryInstance &instance)
 
virtual void updateInstancesDofsAddedActual (const DtIndirectGeometryInstance &instance, int outInstanceIndex)
 
virtual void reloadShadersIfNecessary (void) const
 
virtual void update (const osg::FrameStamp *frameStamp)
 
virtual void adjustDofConstraintsIfNecessary (osgSim::DOFTransform *clone)
 
virtual DtIndirectDrawComponentdrawComponent (int stateId) const
 
virtual bool hasLightPoints (void) const
 
virtual bool hasDepthOnly (void) const
 
virtual bool isDepthOnly (int stateId) const
 
virtual void debugDrawIfNecessary (osg::RenderInfo &renderInfo, const int maxCommands, const osg::Camera *camera)
 
virtual void deleteDrawComponents (void)
 
virtual void initDrawComponents (void)
 
virtual const
DtOsgCullVisitorParameters
findCullVisitorParameters (osg::RenderInfo &renderInfo) const
 
virtual void setPureSignalBasedUpdates (bool val)
 
virtual void initializeUbosIfNecessary (osg::RenderInfo &renderInfo) const
 
virtual void slot_coordinateSystemChanged ()
 

Protected Attributes

osg::ref_ptr
< DtIndirectGeometryRegistrar
myRegistrar
 
tbb::concurrent_queue
< DtIndirectGeometryInstance
myQueueInstancesToAdd
 
DtGpuCullingmyGpuCulling
 
MapIntToInt myModelIDsToInstances
 
MapIntToInt myInstancesToModelIds
 
const bool myIsTerrainPatch
 
const bool myManagesIndividualInstances
 
DtIndirectEffectTexturesTemplate myEffectTexturesState
 
unsigned int myNumTextCoordArrays
 
DtSignalConnectionManager myConnections
 
osg::Matrixd myLocalOriginTransformMatrix
 
int myNumIndicesAcrossAllModels
 
std::map< int, intmyInstanceContainerIdToNumIndices
 
bool myLastDebugIndirectColorOn
 
bool myLastColorizePerDrawableEnabled
 
bool myLastMissingTextureColorOn
 
DtIndirectVaoManagermyVaoManager
 
int myId
 
DtInstanceContainer myInstanceContainer
 
DtIndirectSwitchManagermySwitchManager
 
DtIndirectDofManagermyDofManager
 
DtIndirectLodManagermyLodManager
 
DtIndirectUvOffsetManagermyUvOffsetManager
 
DtIndirectPerInstanceDataManagermyPerInstanceDataManager
 
unsigned int myMutableLastRegistrarRebuildNumber
 
unsigned int myMutableLastFrameTexturesUpdated
 
bool myMutableShadersSetup
 
bool myMutableShouldReloadShaders
 
MapIndirectIdToInstanceContainerId myMapIndirectIdToInstanceContainerId
 
unsigned int myLastFrameUpdated
 
const osg::Camera * myLastCamera
 
boost::condition_variable myWaitCondition
 
boost::mutex myWaitMutex
 
boost::mutex myInternalsMutex
 
osg::ref_ptr
< DtIndirectGeometryInitMainThreadJob
myMainThreadInitJob
 
osg::ref_ptr
< DtIndirectGeometryUpdateBuffersMainThreadJob
myMainThreadUpdateBuffersJob
 
osg::ref_ptr
< DtIndirectGeometryUpdateMainThreadJob
myMainThreadUpdateJob
 
DtIndirectFadeParameters myFadeParameters
 
std::atomic< intmyRunningInstanceId
 
DtIndirectDefaultDrawComponentmyDefaultDrawComponent
 
DtIndirectLightPointDrawComponentmyLightPointDrawComponent
 
DtIndirectDebugCullComponentmyIndirectDebugCullComponent
 
osg::ref_ptr< osg::StateSet > myDefaultDrawStateSet
 
osg::ref_ptr< osg::StateSet > myLightPointDrawStateSet
 
osg::ref_ptr< osg::StateSet > myDepthOnlyDrawStateSet
 
bool myUpdateBuffersJobsRequiredCurrentFrame
 
unsigned int myLastFrameUpdateTraversed
 
bool myMutableOutputInstancesBuffersChanged
 
DtGlBuffermyGpuShaderUbo = nullptr
 
int myGpuShaderUboBinding = -1
 
DtIndirectShaderConstantsmyShaderConstants = nullptr
 
DtOsgLightPointManagermyLightPointManager
 
DtDemyDe
 
DtCoordinateSystemmyCoordinateSystem = nullptr
 

Static Protected Attributes

static bool theTrackObjects
 
static TotalCounter theTotalCounter
 

Private Member Functions

 DtIndirectGeometry ()=delete
 
 DtIndirectGeometry (const DtIndirectGeometry &other)=delete
 
DtIndirectGeometryoperator= (const DtIndirectGeometry &other)=delete
 

Friends

class DtIndirectGeometryInitMainThreadJob
 

Member Typedef Documentation

Map of instances' id in indirect geometry to their id in the instance container.

Constructor & Destructor Documentation

makVrv::DtIndirectGeometry::DtIndirectGeometry ( DtDe de,
const DtCullShaderConfig cullShaderConfig,
bool  terrainPatch,
bool  managesIndividualInstances 
)
protected

purposely protected. only creator can create

Parameters
terrainPatch: whether a terrain patch
managesIndividualInstances: only true for entities
virtual makVrv::DtIndirectGeometry::~DtIndirectGeometry ( )
protectedvirtual

purposely protected

makVrv::DtIndirectGeometry::DtIndirectGeometry ( )
privatedelete

not allowed

makVrv::DtIndirectGeometry::DtIndirectGeometry ( const DtIndirectGeometry other)
privatedelete

Copy Constructor not implemented – Copy Not Allowed.

Member Function Documentation

DtIndirectGeometry& makVrv::DtIndirectGeometry::operator= ( const DtIndirectGeometry other)
privatedelete

Assignment Operator Not implemented – Assignment Not Allowed.

virtual void makVrv::DtIndirectGeometry::setName ( const std::string &  name)
overridevirtual

set the name for the base class, the culling and the main thread job

virtual void makVrv::DtIndirectGeometry::setRegistrar ( DtIndirectGeometryRegistrar registrar)
virtual

set the registrar

Parameters
registrarThe indirect geometry registrar which will contain the 'specs' corresponding to models whose instances this DtIndirectGeometry rendered This is purposely separated out from DtIndirectGeometry, because several DtIndirectGeometry'ies may share the same models (for example cdb gt layers), in which case all DtIndirectGeometry'ies share the same registrar or use the 1 registrar per tile (as is the case with cdb gs layers) in which case one registrar is made per geometry(tile)
virtual DtIndirectGeometryRegistrar* makVrv::DtIndirectGeometry::registrar ( )
virtual

provide access to this indirect geometries indirect registrar

virtual const char* makVrv::DtIndirectGeometry::className ( ) const
virtual

get the classes name in a char pointer. Used by OSG to identify objects of this class

virtual void makVrv::DtIndirectGeometry::drawImplementation ( osg::RenderInfo &  renderInfo) const
virtual

inherited from osg::drawable will do the culling/lod'ing of the instances (via compute shaders) , and subsequent rendering of the instances

virtual unsigned int makVrv::DtIndirectGeometry::rebuildRegistrar ( osg::RenderInfo &  renderInfo) const
virtual

draw imp helper function returns myLastRebuiltFrameNum

virtual int makVrv::DtIndirectGeometry::addInstance ( const DtIndirectGeometryInstance instance)
virtual

Add an 'instance' of a model which has lod, transform, switch and node path information used by vrvOsg to add instances from: -paging databases and terrain patches -osgEarth features returns the instance id in the indirect geometry for the added instance.

virtual int makVrv::DtIndirectGeometry::addInstance ( int  modelId,
const osg::Matrixd &  xForm,
float  modelScale,
float  modelRadius,
int  lightPointGroupId 
)
virtual

Add a simple instance of a model which only has lod and transform information used by vrvOsg to add instances from: -entity indirect path instances -CDB instances returns the instance id in the indirect geometry for the added instance.

virtual void makVrv::DtIndirectGeometry::accept ( osg::NodeVisitor &  nv)
virtual

overridden: because we do certain processing (state set modification, etc) that needs to happen outside of the draw pass. So, we check for and do this in the cull visitor pass

virtual void makVrv::DtIndirectGeometry::setParent ( const osg::Group *  parent)
virtual

Typically a feature tile node/cdb group node.

virtual void makVrv::DtIndirectGeometry::setRegistrarInvalid ( void  )
virtual

Indicate to us that our registrar is now invalid registrars are externally held, and the DtIndirectGeometry needs to know this because it may be deleted much after the registrar has been deleted, and possibly internally to osg.

virtual void makVrv::DtIndirectGeometry::releaseGLObjects ( osg::State *  state) const
virtual

release all gl objects used by this indirect geometry

virtual void makVrv::DtIndirectGeometry::accept ( osg::PrimitiveFunctor &  functor) const
virtual

override of Drawable function which allows the osg Statistics to work for Indirect Geometry

virtual void makVrv::DtIndirectGeometry::setupIndirect ( )
virtual

Makes sure Indirect Geometry is ready to go, can be called from multiple threads (e.g. cdb) -draw components' effect textures' state is setup correctly -debug uniforms are set up correctly.

virtual void makVrv::DtIndirectGeometry::setupIndirectShadersOnly ( )
virtual

Makes sure Indirect Geometry is ready to go, can be called from multiple threads (e.g. cdb) -draw components' effect textures' state is setup correctly.

virtual const osg::Geode* makVrv::DtIndirectGeometry::parentGeode ( void  ) const
virtual

internal. Access the parent geode for this indirect geometry

virtual osg::Geode* makVrv::DtIndirectGeometry::parentGeode ( void  )
virtual

internal. Access the parent geode for this indirect geometry

virtual void makVrv::DtIndirectGeometry::setLocalOriginTransform ( const osg::Matrixd &  localOriginTransform)
virtual

set the matrix used to adjust the local origin of this indirect geometry this is used to fix precision issue that arise from having large numbers in the vertex buffers or in the instance transforms

virtual const osg::Matrixd& makVrv::DtIndirectGeometry::localOriginTransform ( ) const
virtual

get the matrix used to adjust the local origin of this indirect geometry this is used to fix precision issue that arise from having large numbers in the vertex buffers or in the instance transforms

virtual bool makVrv::DtIndirectGeometry::actuallyAddQueuedUpInstances ( void  )
virtual

adds all instances that have been queued up by calling addInstanceActual with them as the parameter

virtual void makVrv::DtIndirectGeometry::launchMainThreadJobAndWait ( DtDe de,
DtOsgRenderer renderer 
)
virtual

finish initialization of geometry

virtual boost::condition_variable& makVrv::DtIndirectGeometry::waitCondition ( )
virtual

returns a wait condition for use as a sync point between class and main thread job

virtual void makVrv::DtIndirectGeometry::updateGpuBuffers ( osg::RenderInfo &  renderInfo)
virtual

helper function for job to call the culling and lod updater

virtual void makVrv::DtIndirectGeometry::setFadeParameters ( const DtIndirectFadeParameters fadeParameters)
virtual

set the fade parameters

virtual const DtIndirectFadeParameters& makVrv::DtIndirectGeometry::fadeParameters ( void  ) const
virtual

set the fade parameters

virtual void makVrv::DtIndirectGeometry::perCameraUpdateAndCull ( osg::RenderInfo &  renderInfo,
const osg::Camera *  camera,
const osg::Matrix &  modelViewMatrix,
const osg::FrameStamp *  frameStamp 
)
virtual

update any per camera data that is needed and then run the cull compute shader for this camera

virtual void makVrv::DtIndirectGeometry::fillViewParameters ( DtIndirectViewParameters destViewParameters,
const osg::Matrix &  modelViewMatrix,
const osg::Camera *  camera,
osg::RenderInfo &  renderInfo 
) const
virtual

calculate and fill the destination view parameters based on the model view, camera, and renderInfo

virtual void makVrv::DtIndirectGeometry::fillAltitude3d ( DtIndirectViewParameters destViewParameters,
const Vector3_64 eye 
) const
virtual

This is used for ocean polygons' rejection It matches the altitude3d computation for the cull visitor It only is set if the indirect geometry has ocean polygons (this can be queried by seeing its value from the cull config)

virtual void makVrv::DtIndirectGeometry::setUpdateBuffersJobsRequiredCurrentFrame ( bool  requiredCurrentFrame)
virtual

set/get whether to force immediate update of patch indirect geometries internal buffers. Internal gpu buffers are not necessarily updated in a given frame/tick even if they are dirty (i.e. new models, textures came in). Setting this to true forces the internal buffers to update immediately that frame/tick.

virtual bool makVrv::DtIndirectGeometry::updateBuffersJobsRequiredCurrentFrame ( void  ) const
virtual

set/get whether to force immediate update of patch indirect geometries internal buffers. Internal gpu buffers are not necessarily updated in a given frame/tick even if they are dirty (i.e. new models, textures came in). Setting this to true forces the internal buffers to update immediately that frame/tick.

virtual bool makVrv::DtIndirectGeometry::readyToRender ( const int  instanceIdInIndirect) const
virtual

can the instance be rendered this frame?

virtual bool makVrv::DtIndirectGeometry::instanceEverAdded ( void  ) const
virtual

was an instance ever added? not the same as numInstances() (implemented as pass through to the internal instance container)

virtual int makVrv::DtIndirectGeometry::numValidInstances ( void  ) const
virtual

the number of (valid) instances (implemented as pass through to the internal instance container)

static void makVrv::DtIndirectGeometry::setTrackObjects ( bool  val)
static

debug log level output is provided when objects construct/deleted

static bool makVrv::DtIndirectGeometry::trackObjects ( void  )
static

debug log level output is provided when objects construct/deleted

static int makVrv::DtIndirectGeometry::numIndirectGeometries ( void  )
static

total currently

virtual bool makVrv::DtIndirectGeometry::addInstanceActual ( const DtIndirectGeometryInstance instance)
protectedvirtual

actually add the instances that were queued up via possibly multiple threads this happens as part of the culling call

virtual void makVrv::DtIndirectGeometry::setupShadersIfNecessary ( )
protectedvirtual

to initialize the shader files cache, because DtIndirectGeometry doesn't have direct access to DtDe yet (it could; but that would break the cdb plugin) lock myInternalsMutex before calling

virtual void makVrv::DtIndirectGeometry::setupDebugUniforms ( )
protectedvirtual

setup the uniforms needed to visualize debug information for indirect geometry lock myInternalsMutex before calling

virtual void makVrv::DtIndirectGeometry::installDefaultMaterial ( osg::StateSet *  ss)
protectedvirtual

install a default material on ourselves, so that there's no state leakage with regards ubos/osg::material because we are using materials encoded into an ssbo for indirect rendering

virtual void makVrv::DtIndirectGeometry::slot_reloadShaders ( )
protectedvirtual

slot for handling when the shaders are reloaded

virtual void makVrv::DtIndirectGeometry::updateIndicesCount ( const DtIndirectModelInfo modelInfo,
int  instanceContainerIndex 
)
protectedvirtual

internal method to update num of triangles that this geometry will render in the worst case (all lods across all models across all instances)

virtual void makVrv::DtIndirectGeometry::updateModelIdsToInstances ( int  modelId,
int  instanceId,
bool  add 
)
protectedvirtual

increment the number of instance for the model id (called internally when an instance is added)

virtual void makVrv::DtIndirectGeometry::drawFromCommandBuffer ( osg::RenderInfo &  renderInfo,
const DtIndirectViewParameters viewParameters,
const osg::Camera *  camera 
) const
protectedvirtual

setup and draw a command buffer

virtual void makVrv::DtIndirectGeometry::updateInstancePositionOrientationAddedActual ( const DtIndirectGeometryInstance instance,
int  outInstanceIndex 
)
protectedvirtual

added actual functions are called when the instance is added to update the state that has been already set for that instance and pass it down to the managers.

update an instances position and orientation

Reimplemented in makVrv::DtIndirectEntityGeometry.

virtual void makVrv::DtIndirectGeometry::updateInstanceSwitchesAddedActual ( const DtIndirectGeometryInstance instance,
int  outInstanceIndex 
)
protectedvirtual

update an instance's switches

Reimplemented in makVrv::DtIndirectEntityGeometry.

virtual void makVrv::DtIndirectGeometry::updateInstanceSequencesAddedActual ( const DtIndirectGeometryInstance instance,
int  outInstanceIndex 
)
protectedvirtual

update an instance's sequences

Reimplemented in makVrv::DtIndirectEntityGeometry.

virtual void makVrv::DtIndirectGeometry::updateInstanceUvOffsetsAddedActual ( const DtIndirectGeometryInstance instance,
int  outInstanceIndex 
)
protectedvirtual

set all the uv offsets that have been saved off from before the instance was added.

Reimplemented in makVrv::DtIndirectEntityGeometry.

virtual void makVrv::DtIndirectGeometry::updateInstanceColorAddedActual ( const DtIndirectGeometryInstance instance,
int  outInstanceIndex 
)
protectedvirtual

set color that has been saved off before the instance was added

Reimplemented in makVrv::DtIndirectEntityGeometry.

virtual void makVrv::DtIndirectGeometry::updateInstanceOtherData0AddedActual ( const DtIndirectGeometryInstance instance,
int  outInstanceIndex 
)
protectedvirtual

set otherdata0 that has been saved off before the instance was added

Reimplemented in makVrv::DtIndirectEntityGeometry.

virtual void makVrv::DtIndirectGeometry::updateInstanceVisibilityLightPointMaxDistanceActual ( const DtIndirectGeometryInstance instance,
int  outInstanceIndex 
)
protectedvirtual

set visibility, light point max distance and other data 1 that has been saved off before the instance was added

Reimplemented in makVrv::DtIndirectEntityGeometry.

virtual bool makVrv::DtIndirectGeometry::updateInstanceDeletionBeforeAddedActual ( const DtIndirectGeometryInstance instance)
protectedvirtual

check to see if this instance was marked for deletion before it was added

Reimplemented in makVrv::DtIndirectEntityGeometry.

virtual void makVrv::DtIndirectGeometry::updateInstancesDofsAddedActual ( const DtIndirectGeometryInstance instance,
int  outInstanceIndex 
)
protectedvirtual

update an instance's dofs states

Reimplemented in makVrv::DtIndirectEntityGeometry.

virtual void makVrv::DtIndirectGeometry::reloadShadersIfNecessary ( void  ) const
protectedvirtual

reload the shaders if necessary (marks a flag and they are reloaded before the next draw.

virtual void makVrv::DtIndirectGeometry::update ( const osg::FrameStamp *  frameStamp)
protectedvirtual

run update on managers that need to run during the update traversal. Currenly only the dof manager. The dof manager needs to update so that the dof transforms are updated in time for the post update to update the observer if it is attached to a part.

virtual void makVrv::DtIndirectGeometry::adjustDofConstraintsIfNecessary ( osgSim::DOFTransform *  clone)
protectedvirtual

adjust dof constraints, if needed

virtual DtIndirectDrawComponent* makVrv::DtIndirectGeometry::drawComponent ( int  stateId) const
protectedvirtual

get the indirect draw component for a particular state

virtual bool makVrv::DtIndirectGeometry::hasLightPoints ( void  ) const
protectedvirtual

similar to the drawComponent above, but checks for the existence of GL_POINTS (light points) primitives

virtual bool makVrv::DtIndirectGeometry::hasDepthOnly ( void  ) const
protectedvirtual

whether has depth only components

virtual bool makVrv::DtIndirectGeometry::isDepthOnly ( int  stateId) const
protectedvirtual

whether is depth only

virtual void makVrv::DtIndirectGeometry::debugDrawIfNecessary ( osg::RenderInfo &  renderInfo,
const int  maxCommands,
const osg::Camera *  camera 
)
protectedvirtual
virtual void makVrv::DtIndirectGeometry::deleteDrawComponents ( void  )
protectedvirtual

delete the draw components

virtual void makVrv::DtIndirectGeometry::initDrawComponents ( void  )
protectedvirtual

initialize the draw components

virtual const DtOsgCullVisitorParameters* makVrv::DtIndirectGeometry::findCullVisitorParameters ( osg::RenderInfo &  renderInfo) const
protectedvirtual

get the cull visitor parameters based on the current render info.

virtual void makVrv::DtIndirectGeometry::setPureSignalBasedUpdates ( bool  val)
protectedvirtual

indicate whether this manager's switches get updated per frame via looking at the actual switches/multi-switches or directly using signals This is only true for entities

virtual void makVrv::DtIndirectGeometry::initializeUbosIfNecessary ( osg::RenderInfo &  renderInfo) const
protectedvirtual

init the ubo if necessary

virtual void makVrv::DtIndirectGeometry::slot_coordinateSystemChanged ( )
protectedvirtual

slot for when the coordinate system changes

Friends And Related Function Documentation

needed to give access to wait conditions and mutexes.

Member Data Documentation

friend makVrv::DtIndirectGeometry::DtIndirectGeometryCreator
osg::ref_ptr<DtIndirectGeometryRegistrar> makVrv::DtIndirectGeometry::myRegistrar
protected

pointer to the (external) registrar

tbb::concurrent_queue<DtIndirectGeometryInstance> makVrv::DtIndirectGeometry::myQueueInstancesToAdd
protected

addInstance may be called from multiple threads. Hence, concurrent queue

DtGpuCulling* makVrv::DtIndirectGeometry::myGpuCulling
protected
MapIntToInt makVrv::DtIndirectGeometry::myModelIDsToInstances
protected
MapIntToInt makVrv::DtIndirectGeometry::myInstancesToModelIds
protected
const bool makVrv::DtIndirectGeometry::myIsTerrainPatch
protected
const bool makVrv::DtIndirectGeometry::myManagesIndividualInstances
protected
DtIndirectEffectTexturesTemplate makVrv::DtIndirectGeometry::myEffectTexturesState
protected

the accumulated effect textures' state which represents the superset of all effect textures cumulatively used by the models of the instances of this Indirect geometry

unsigned int makVrv::DtIndirectGeometry::myNumTextCoordArrays
protected
DtSignalConnectionManager makVrv::DtIndirectGeometry::myConnections
protected
osg::Matrixd makVrv::DtIndirectGeometry::myLocalOriginTransformMatrix
protected
int makVrv::DtIndirectGeometry::myNumIndicesAcrossAllModels
protected

number of indices across all unique models across instances

std::map<int, int> makVrv::DtIndirectGeometry::myInstanceContainerIdToNumIndices
protected
bool makVrv::DtIndirectGeometry::myLastDebugIndirectColorOn
protected
bool makVrv::DtIndirectGeometry::myLastColorizePerDrawableEnabled
protected
bool makVrv::DtIndirectGeometry::myLastMissingTextureColorOn
protected
DtIndirectVaoManager& makVrv::DtIndirectGeometry::myVaoManager
protected

This is de-referenced here for speed.

int makVrv::DtIndirectGeometry::myId
protected

a unique id for the geometry

DtInstanceContainer makVrv::DtIndirectGeometry::myInstanceContainer
protected

container for all the instances registered here

DtIndirectSwitchManager* makVrv::DtIndirectGeometry::mySwitchManager
protected
DtIndirectDofManager* makVrv::DtIndirectGeometry::myDofManager
protected
DtIndirectLodManager* makVrv::DtIndirectGeometry::myLodManager
protected
DtIndirectUvOffsetManager* makVrv::DtIndirectGeometry::myUvOffsetManager
protected
DtIndirectPerInstanceDataManager* makVrv::DtIndirectGeometry::myPerInstanceDataManager
protected
unsigned int makVrv::DtIndirectGeometry::myMutableLastRegistrarRebuildNumber
mutableprotected
unsigned int makVrv::DtIndirectGeometry::myMutableLastFrameTexturesUpdated
mutableprotected
bool makVrv::DtIndirectGeometry::myMutableShadersSetup
mutableprotected
bool makVrv::DtIndirectGeometry::myMutableShouldReloadShaders
mutableprotected

FIXME should be a static but currently the cull shader is per indirect.

MapIndirectIdToInstanceContainerId makVrv::DtIndirectGeometry::myMapIndirectIdToInstanceContainerId
protected
unsigned int makVrv::DtIndirectGeometry::myLastFrameUpdated
protected
const osg::Camera* makVrv::DtIndirectGeometry::myLastCamera
protected
boost::condition_variable makVrv::DtIndirectGeometry::myWaitCondition
protected
boost::mutex makVrv::DtIndirectGeometry::myWaitMutex
protected
boost::mutex makVrv::DtIndirectGeometry::myInternalsMutex
protected
osg::ref_ptr<DtIndirectGeometryInitMainThreadJob> makVrv::DtIndirectGeometry::myMainThreadInitJob
protected
osg::ref_ptr<DtIndirectGeometryUpdateBuffersMainThreadJob> makVrv::DtIndirectGeometry::myMainThreadUpdateBuffersJob
protected
osg::ref_ptr<DtIndirectGeometryUpdateMainThreadJob> makVrv::DtIndirectGeometry::myMainThreadUpdateJob
protected
DtIndirectFadeParameters makVrv::DtIndirectGeometry::myFadeParameters
protected
std::atomic<int> makVrv::DtIndirectGeometry::myRunningInstanceId
protected
DtIndirectDefaultDrawComponent* makVrv::DtIndirectGeometry::myDefaultDrawComponent
protected
DtIndirectLightPointDrawComponent* makVrv::DtIndirectGeometry::myLightPointDrawComponent
protected
DtIndirectDebugCullComponent* makVrv::DtIndirectGeometry::myIndirectDebugCullComponent
protected
osg::ref_ptr<osg::StateSet> makVrv::DtIndirectGeometry::myDefaultDrawStateSet
protected
osg::ref_ptr<osg::StateSet> makVrv::DtIndirectGeometry::myLightPointDrawStateSet
protected
osg::ref_ptr<osg::StateSet> makVrv::DtIndirectGeometry::myDepthOnlyDrawStateSet
protected
bool makVrv::DtIndirectGeometry::myUpdateBuffersJobsRequiredCurrentFrame
protected

whether gpu buffers for instances are updated immediately

unsigned int makVrv::DtIndirectGeometry::myLastFrameUpdateTraversed
protected
bool makVrv::DtIndirectGeometry::myMutableOutputInstancesBuffersChanged
mutableprotected

Internal variable that tracks whether the output instance buffers via the culling got changed (resized, gpu address changed, etc). This indicates whether the vao needs to be re-generated.

DtGlBuffer* makVrv::DtIndirectGeometry::myGpuShaderUbo = nullptr
protected
int makVrv::DtIndirectGeometry::myGpuShaderUboBinding = -1
mutableprotected
DtIndirectShaderConstants* makVrv::DtIndirectGeometry::myShaderConstants = nullptr
protected
DtOsgLightPointManager& makVrv::DtIndirectGeometry::myLightPointManager
protected
DtDe& makVrv::DtIndirectGeometry::myDe
protected
DtCoordinateSystem* makVrv::DtIndirectGeometry::myCoordinateSystem = nullptr
protected

local clone of the system wide coordinate system. for thread safety.

bool makVrv::DtIndirectGeometry::theTrackObjects
staticprotected
TotalCounter makVrv::DtIndirectGeometry::theTotalCounter
staticprotected

The documentation for this class was generated from the following file:

Document ID: Generated on Sun Dec 4 20:22:03 EST 2022 from SVN revision 249613
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)