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

Thread object to convert tree marker requests into tree records in a worker thread.

Inheritance diagram for makVrv::DtStreamedSpeedTreeThread:
Inheritance graph
[legend]

Public Types

typedef std::unordered_set
< const osg::Node * > 
NodeSet
 
typedef std::unordered_set
< DtStreamedSpeedTreeForest * > 
ForestSet
 
typedef std::unordered_set
< std::string > 
StringSet
 

Public Member Functions

virtual ~DtStreamedSpeedTreeThread ()
 
virtual void setForestDeleted (DtStreamedSpeedTreeForest *forest)
 
virtual void setNodeUnloaded (const osg::Node *node)
 
virtual void enqueue (DtStreamedSpeedTreeForest *forest, const osgEarth::CustomFeatureNode *featureNode, const osg::Node *dataNode, bool useScaleRandomization, bool useOrientationRandomization, float treeMinScale, float treeMaxScale)
 
virtual bool workToDo (void) const
 
- Public Member Functions inherited from makVrv::DtVirtualBaseClass
 DtVirtualBaseClass ()
 
virtual ~DtVirtualBaseClass ()
 

Static Public Member Functions

static DtStreamedSpeedTreeThreadinstance (DtDe &de)
 

Protected Member Functions

 DtStreamedSpeedTreeThread (DtDe &de)
 
virtual void processMessage (const DtTreeRequestMessage &msg)
 
virtual void mergeTreeRequests (DtStreamedSpeedTreeForest *forest, const osg::Node *node)
 
virtual bool isForestDeleted (DtStreamedSpeedTreeForest *forest) const
 
virtual bool isNodeUnloaded (const osg::Node *node) const
 
virtual double rotationAngleFromGeocentricQuaternion (const osg::Quat &rotation, const osg::Vec3d &location) const
 
virtual std::size_t hash_value (const std::string &modelDefName, const osgEarth::CustomFeatureNode::OsgEarthMarkerRequest &val) const
 
virtual void run ()
 
virtual DtTreeRecordgetTreeRecordFromPool (void)
 
virtual void returnTreeRecordToPool (DtTreeRecord *treeRecord)
 

Protected Attributes

DtDemyDe
 
tbb::concurrent_bounded_queue
< DtTreeRequestMessage * > 
myMessageQueue
 
std::atomic< boolmyStopWork
 
std::thread myWorkerThread
 
StringSet myValidModelDefinitions
 
ForestSet myDeletedForests
 
NodeSet myUnloadedNodes
 
osg::EllipsoidModel * myEllipsoidModel
 
std::unordered_map
< std::string, std::string > 
myModelDefinitionCache
 
std::unordered_map
< std::string, std::vector
< DtTreeRecord * > > 
myScratchModelDefsToTreesToAdd
 
std::deque< DtTreeRecord * > myTreeRecordPool
 

Private Member Functions

 DtStreamedSpeedTreeThread ()=delete
 
 DtStreamedSpeedTreeThread (const DtStreamedSpeedTreeThread &rhs)=delete
 
DtStreamedSpeedTreeThreadoperator= (const DtStreamedSpeedTreeThread &rhs)=delete
 

Member Typedef Documentation

typedef std::unordered_set<const osg::Node*> makVrv::DtStreamedSpeedTreeThread::NodeSet

Set of request nodes.

Set of forests.

typedef std::unordered_set<std::string> makVrv::DtStreamedSpeedTreeThread::StringSet

Set of model definition names.

Constructor & Destructor Documentation

virtual makVrv::DtStreamedSpeedTreeThread::~DtStreamedSpeedTreeThread ( )
virtual

DTOR.

makVrv::DtStreamedSpeedTreeThread::DtStreamedSpeedTreeThread ( )
privatedelete

Unimplemented default CTOR.

makVrv::DtStreamedSpeedTreeThread::DtStreamedSpeedTreeThread ( const DtStreamedSpeedTreeThread rhs)
privatedelete
makVrv::DtStreamedSpeedTreeThread::DtStreamedSpeedTreeThread ( DtDe de)
protected

CTOR.

Member Function Documentation

static DtStreamedSpeedTreeThread& makVrv::DtStreamedSpeedTreeThread::instance ( DtDe de)
static

Get the instance of the thread object from its owner de.

DtStreamedSpeedTreeThread& makVrv::DtStreamedSpeedTreeThread::operator= ( const DtStreamedSpeedTreeThread rhs)
privatedelete
virtual void makVrv::DtStreamedSpeedTreeThread::setForestDeleted ( DtStreamedSpeedTreeForest forest)
virtual

Add a forest object to the deleted set.

virtual void makVrv::DtStreamedSpeedTreeThread::setNodeUnloaded ( const osg::Node *  node)
virtual

Add a node to the unloaded set.

virtual void makVrv::DtStreamedSpeedTreeThread::enqueue ( DtStreamedSpeedTreeForest forest,
const osgEarth::CustomFeatureNode featureNode,
const osg::Node *  dataNode,
bool  useScaleRandomization,
bool  useOrientationRandomization,
float  treeMinScale,
float  treeMaxScale 
)
virtual

Enqueue a new request message.

virtual bool makVrv::DtStreamedSpeedTreeThread::workToDo ( void  ) const
virtual
virtual void makVrv::DtStreamedSpeedTreeThread::processMessage ( const DtTreeRequestMessage msg)
protectedvirtual

Handle a single popped DtTreeRequestMessage This is called from run() in the worker thread This prepares myScratchModelDefsToTreesToAdd.

virtual void makVrv::DtStreamedSpeedTreeThread::mergeTreeRequests ( DtStreamedSpeedTreeForest forest,
const osg::Node *  node 
)
protectedvirtual

Process the trees requested to be added from the popped DtTreeRequestMessage (which is in myScratchModelDefsToTreesToAdd) and add them to the forest in question. This is called after handle request.

virtual bool makVrv::DtStreamedSpeedTreeThread::isForestDeleted ( DtStreamedSpeedTreeForest forest) const
protectedvirtual

Check whether a forest is in the deleted set.

virtual bool makVrv::DtStreamedSpeedTreeThread::isNodeUnloaded ( const osg::Node *  node) const
protectedvirtual

Check whether a node is in the unloaded set.

virtual double makVrv::DtStreamedSpeedTreeThread::rotationAngleFromGeocentricQuaternion ( const osg::Quat &  rotation,
const osg::Vec3d &  location 
) const
protectedvirtual
virtual std::size_t makVrv::DtStreamedSpeedTreeThread::hash_value ( const std::string &  modelDefName,
const osgEarth::CustomFeatureNode::OsgEarthMarkerRequest val 
) const
protectedvirtual

Hashes on request name and XYZ position.

virtual void makVrv::DtStreamedSpeedTreeThread::run ( )
protectedvirtual

Thread main loop.

virtual DtTreeRecord* makVrv::DtStreamedSpeedTreeThread::getTreeRecordFromPool ( void  )
protectedvirtual

get a record from the pool

virtual void makVrv::DtStreamedSpeedTreeThread::returnTreeRecordToPool ( DtTreeRecord treeRecord)
protectedvirtual

return a tree record to the pool

Member Data Documentation

DtDe& makVrv::DtStreamedSpeedTreeThread::myDe
protected
tbb::concurrent_bounded_queue<DtTreeRequestMessage*> makVrv::DtStreamedSpeedTreeThread::myMessageQueue
protected

Queue of marker request messages.

Lock qm before using

std::atomic< bool> makVrv::DtStreamedSpeedTreeThread::myStopWork
protected

Flag to tell the merging to stop.

std::thread makVrv::DtStreamedSpeedTreeThread::myWorkerThread
protected
StringSet makVrv::DtStreamedSpeedTreeThread::myValidModelDefinitions
protected

Cache of valid SpeedTree model definitions.

Allows filtering out requests with invalid model definitions

ForestSet makVrv::DtStreamedSpeedTreeThread::myDeletedForests
protected

Set of deleted forest objects.

The forest object adds itself here on deletion to avoid adding trees to a deleted forest

NodeSet makVrv::DtStreamedSpeedTreeThread::myUnloadedNodes
protected

Set of unloaded feature request nodes.

Requestors should add nodes to this set when they are deleted to prevent adding trees after deletion

osg::EllipsoidModel* makVrv::DtStreamedSpeedTreeThread::myEllipsoidModel
protected
std::unordered_map<std::string, std::string> makVrv::DtStreamedSpeedTreeThread::myModelDefinitionCache
protected
std::unordered_map<std::string, std::vector<DtTreeRecord*> > makVrv::DtStreamedSpeedTreeThread::myScratchModelDefsToTreesToAdd
protected

worksspace

std::deque<DtTreeRecord*> makVrv::DtStreamedSpeedTreeThread::myTreeRecordPool
protected

use pool to avoid fragmentation/repeated news/deletes


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

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)