VR-Forces 5.0.1 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::list
< DtTreeRequestOutput
RequestOutputList
 
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 ()
 
RequestOutputListrequestOutput ()
 
NodeSetunloaded ()
 
void setForestDeleted (DtStreamedSpeedTreeForest *forest)
 
void setNodeUnloaded (const osg::Node *node)
 
void enqueue (const osgEarth::CustomFeatureNode *featureNode, DtTreeRequestOutput *out, DtStreamedSpeedTreeForest *forest, const osg::Node *dataNode, bool useScaleRandomization, bool useOrientationRandomization, float treeMinScale, float treeMaxScale)
 
virtual void run ()
 
void handleRequest (const DtTreeRequestMessage &msg)
 
bool isForestDeleted (DtStreamedSpeedTreeForest *forest)
 
bool isNodeUnloaded (const osg::Node *node)
 
void mergeTreeRequests ()
 
void block ()
 
void release ()
 
virtual void updateBlock ()
 
virtual void stopMergingWork ()
 
virtual bool workToDo () const
 
virtual bool fetchAndActivateTask ()
 
- Public Member Functions inherited from makVrv::DtVirtualBaseClass
 DtVirtualBaseClass ()
 
virtual ~DtVirtualBaseClass ()
 

Static Public Member Functions

static DtStreamedSpeedTreeThreadinstance (DtDe &de)
 
static std::size_t hash_value (const std::string &modelDefName, const osgEarth::CustomFeatureNode::OsgEarthMarkerRequest &val)
 

Protected Member Functions

 DtStreamedSpeedTreeThread (DtDe &de)
 
virtual double rotationAngleFromGeocentricQuaternion (const osg::Quat &rotation, const osg::Vec3d &location)
 

Protected Attributes

DtDemyDe
 
std::deque
< DtTreeRequestMessage * > 
myMessageQueue
 
OpenThreads::Block myBlock
 
boost::mutex myMessageQueueMutex
 
StringSet myValidModelDefinitions
 
ForestSet myDeletedForests
 
RequestOutputList myTreeRequestOutput
 
NodeSet myUnloadedNodes
 
bool myTimeToStop
 
osg::EllipsoidModel * myEllipsoidModel
 
tbb::atomic< boolmyStopWork
 
tbb::atomic< boolmyWorkToDo
 
tbb::atomic< boolmyTbbTaskActive
 

Private Member Functions

 DtStreamedSpeedTreeThread ()
 

Member Typedef Documentation

List type for output objects.

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 ( DtDe de)
protected

CTOR.

makVrv::DtStreamedSpeedTreeThread::DtStreamedSpeedTreeThread ( )
private

Unimplemented default CTOR.

Member Function Documentation

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

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

RequestOutputList& makVrv::DtStreamedSpeedTreeThread::requestOutput ( )

List of allocated output objects.

Requestors should find an unused output object if possible and if not, push a new one to the end of the list

NodeSet& makVrv::DtStreamedSpeedTreeThread::unloaded ( )

Set of unloaded feature request nodes.

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

void makVrv::DtStreamedSpeedTreeThread::setForestDeleted ( DtStreamedSpeedTreeForest forest)

Add a forest object to the deleted set.

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

Add a node to the unloaded set.

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

Enqueue a new request message.

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

Thread main loop.

void makVrv::DtStreamedSpeedTreeThread::handleRequest ( const DtTreeRequestMessage msg)

Process the message into tree records.

bool makVrv::DtStreamedSpeedTreeThread::isForestDeleted ( DtStreamedSpeedTreeForest forest)

Check whether a forest is in the deleted set.

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

Check whether a node is in the unloaded set.

static std::size_t makVrv::DtStreamedSpeedTreeThread::hash_value ( const std::string &  modelDefName,
const osgEarth::CustomFeatureNode::OsgEarthMarkerRequest val 
)
static

Marker request hash function.

Hashes on request name and XYZ position

void makVrv::DtStreamedSpeedTreeThread::mergeTreeRequests ( )

Callback to merge processed tree requests into a SpeedTree forest called by persistent job.

void makVrv::DtStreamedSpeedTreeThread::block ( )

Wait, don't process more trees.

void makVrv::DtStreamedSpeedTreeThread::release ( )

Allow more tree processing.

virtual void makVrv::DtStreamedSpeedTreeThread::updateBlock ( )
virtual

Tell the SpeedTreeThread there are more trees to process.

virtual void makVrv::DtStreamedSpeedTreeThread::stopMergingWork ( )
virtual

Tell the SpeedTreeThread merging code to wait till next frame.

virtual bool makVrv::DtStreamedSpeedTreeThread::workToDo ( ) const
virtual

check if there is work for this thread to merge

virtual bool makVrv::DtStreamedSpeedTreeThread::fetchAndActivateTask ( )
virtual

Return the current task active value and set it to true.

virtual double makVrv::DtStreamedSpeedTreeThread::rotationAngleFromGeocentricQuaternion ( const osg::Quat &  rotation,
const osg::Vec3d &  location 
)
protectedvirtual

Member Data Documentation

DtDe& makVrv::DtStreamedSpeedTreeThread::myDe
protected
std::deque<DtTreeRequestMessage*> makVrv::DtStreamedSpeedTreeThread::myMessageQueue
protected

Queue of marker request messages.

Lock qm before using

OpenThreads::Block makVrv::DtStreamedSpeedTreeThread::myBlock
protected
boost::mutex makVrv::DtStreamedSpeedTreeThread::myMessageQueueMutex
protected

Mutex controlling access to q.

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

RequestOutputList makVrv::DtStreamedSpeedTreeThread::myTreeRequestOutput
protected

List of allocated output objects.

Requestors should find an unused output object if possible and if not, push a new one to the end of the list

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

bool makVrv::DtStreamedSpeedTreeThread::myTimeToStop
protected

Flag to tell the thread to stop.

osg::EllipsoidModel* makVrv::DtStreamedSpeedTreeThread::myEllipsoidModel
protected
tbb::atomic< bool> makVrv::DtStreamedSpeedTreeThread::myStopWork
protected

Flag to tell the merging to stop.

tbb::atomic< bool> makVrv::DtStreamedSpeedTreeThread::myWorkToDo
protected
tbb::atomic< bool> makVrv::DtStreamedSpeedTreeThread::myTbbTaskActive
protected

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

Document ID: Generated on Mon Jun 20 00:38:30 EDT 2022 from SVN revision 244029
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)