VR-Forces 5.0.3 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
boundingVolumeTerrainSourceTracker.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
10 
12 
13 //Mak Terrain Toolkit includes
14 #include <geometry/sphere.h>
16 #include <boost/unordered_map.hpp>
17 
23 #include <vrfutil/sphere2.h>
24 
25 //VR-Link includes
26 #include <vlutil/vlSmartPointers.h>
27 #include <matrix/coordTransform.h>
28 
29 #include <string>
30 #include <list>
31 #include <stack>
32 
36 class DtLocalVertexList;
37 
39 
40 
46  : public DtTerrainSourceTracker
47 {
48 public:
49 
50  //Struct defining the elemnt to add to the spatial subdivision for paged-in
51  //nodes. This is a different data structure from the paged-out nodes because
52  //there is additional data.
54  {
56  : myId(id)
57  , myStatus(status)
58  {
59 
60  }
61 
62  DtNodeStatusSSELement(std::pair<DtNodeId, DtPagedNodeStatusPtr> idStatusPair)
63  : myId(idStatusPair.first)
64  , myStatus(idStatusPair.second)
65  {
66 
67  }
68 
70  {
71  return myStatus->myBoundingInfo.extent();
72  }
73 
74  void expandExtent(DtExtent& extent) const
75  {
76  myStatus->myBoundingInfo.expandExtent(extent);
77  }
78 
81  };
82  typedef boost::shared_ptr<DtNodeStatusSSELement> DtNodeStatusSSElementPtr;
83 
86 
88 
90 
91  virtual void updatePagedOutInfo(const DtNodeBoundingInfoList& volumes, bool invalid = false);
92 
95  virtual void updatePagedOutInfo(
96  const DtNodeBoundingInfoList& volumes,
97  const DtNodeBoundingInfoList& removed,
98  bool invalid = false);
99 
100  virtual void updatePagedInInfo(
101  const DtNodeBoundingInfoMap& volumes,
102  DtTerrainIntersectIDType intersectId = 0);
103 
104  virtual void removePagedInInfo(DtNodeId node);
105 
106  virtual bool dataAvailable(DtPagingMetaDataPtr metaData,
107  DtTerrainPagingGeometryPtr geometry);
108 
109  virtual bool isPagedOut(DtTerrainPagingGeometryPtr geometry, std::set<std::string>& retVec);
110 
111  virtual void pageInData(DtPagingMetaDataPtr metaData,
112  DtTerrainPagingGeometryPtr geometry);
113 
114  virtual bool canPageOutData(DtTerrainIntersectIDType intersectId);
115 
116  virtual void pageOutOldestData(const int priority);
117 
118  virtual DtTerrainIntersectIDType findOldestPagedData(unsigned int& numTrianglesOut);
119 
120  virtual void printInfo() const;
121 
124  virtual bool geometryIntersectPagedOutNodes(DtTerrainPagingGeometryPtr geometry);
125 
128  virtual bool geometryIntersectPagedOutNodes(DtTerrainPagingGeometryPtr geometry, std::set<std::string>& retVec);
129 
132  virtual bool geometryIntersectPagedInNodes(DtPagingMetaDataPtr metaData, DtTerrainPagingGeometryPtr geometry);
133 
135  virtual void getPageOutData(DtNodeBoundingList& nodeBoundingList);
136 
138  virtual void getPageInData(DtNodeBoundingList& nodeBoundingList);
139 
140 protected:
141 
144  virtual bool geometryIntersectPagedOutNodes(const DtSphere& sphere);
145  virtual bool geometryIntersectPagedOutNodes(const DtLocalVertexList& vertexList);
146  virtual bool geometryIntersectPagedOutNodes(const DtChord& chord);
147 
151  virtual bool geometryIntersectPagedOutNodes(const DtSphere& sphere, std::set<std::string>& retVec);
152  virtual bool geometryIntersectPagedOutNodes(const DtLocalVertexList& vertexList, std::set<std::string>& retVec);
153  virtual bool geometryIntersectPagedOutNodes(const DtChord& chord, std::set<std::string>& retVec);
154 
157  virtual bool geometryIntersectPagedInNodes(DtPagingMetaDataPtr metaData, const DtSphere& sphere);
158  virtual bool geometryIntersectPagedInNodes(DtPagingMetaDataPtr metaData, const DtLocalVertexList& vertexList);
159  virtual bool geometryIntersectPagedInNodes(DtPagingMetaDataPtr metaData, const DtChord& chord);
160 
161 
162  virtual DtTerrainIntersectIDType findOldestPagedDataUnlocked(unsigned int& numTrianglesOut);
163 
164  virtual DtPageInGeometryCommand* createPageInGeometryCommand(
165  DtPagingMetaDataPtr metaData);
166 
167  virtual DtPageOutNodesCommand* createPageOutNodesCommand(
168  DtPagingMetaDataPtr metaData);
169 
170  virtual unsigned int getNumTriangles(DtNodeId node);
171 
172 
173 protected:
177 
180 
181  tbb::atomic<bool> myInvalidFlag;
182 
184  tbb::atomic<bool> myRecomputeOldestPagedObject;
185 
193 
194  mutable tbb::spin_rw_mutex myPagedInMutex;
195  mutable tbb::spin_rw_mutex myPagedOutMutex;
196 
198 };
199 
200 
201 
DtBoost::shared_ptr< DtPagedNodeStatus > DtPagedNodeStatusPtr
Definition: boundingNodeInfo.h:88
NOTE: This entire class is deprecated, in favor of Dt3dChord.
Definition: chord.h:40
DtBoost::shared_ptr< DtTerrainPagingGeometry > DtTerrainPagingGeometryPtr
Definition: terrainPagingGeometry.h:46
boost::unordered_map< DtNodeId, DtNodeBoundingInfoPtr > DtNodeBoundingInfoMap
Definition: boundingNodeInfo.h:132
tbb::spin_rw_mutex myPagedOutMutex
Definition: boundingVolumeTerrainSourceTracker.h:195
Definition: sphere.h:22
boost::unordered_map< DtNodeId, DtPagedNodeStatusPtr > DtPagedNodeStatusMap
Definition: boundingNodeInfo.h:134
virtual void pageInData(DtPagingMetaDataPtr metaData, DtTerrainPagingGeometryPtr geometry)=0
Page in data within geometry. Determines which tiles are within the geometry and adds a page in comma...
The DtExtent represents an axis-aligned 3d bounding box.
Definition: extent.h:43
virtual void pageOutOldestData(const int priority)=0
Adds a page out command for the least-recently-used tileID to myCommandQueue.
virtual void getPageInData(DtNodeBoundingList &nodeBoundingList)
Return a list of bounding sphere that represent the the paged out tiles.
std::list< DtNodeBoundingInfoPtr > DtNodeBoundingInfoList
Definition: boundingNodeInfo.h:130
tbb::concurrent_queue< DtTerrainPagerCommand * > DtPagerCommandQueue
Definition: vantageTerrainImplementationUtil.h:40
DtVector mySpatialSubdivisionDimensions
Definition: boundingVolumeTerrainSourceTracker.h:197
Definition: boundingVolumeCommands.h:43
void expandExtent(DtExtent &extent) const
Definition: boundingVolumeTerrainSourceTracker.h:74
virtual bool dataAvailable(DtPagingMetaDataPtr metaData, DtTerrainPagingGeometryPtr geometry)=0
DtSpatialSubdivision< DtNodeBoundingInfoPtr > DtSpatialNodeBoundingInfoContainer
Definition: boundingVolumeTerrainSourceTracker.h:84
const Coordinate_System * myCoordSys
Definition: boundingVolumeTerrainSourceTracker.h:192
virtual void printInfo() const
DtNodeId myId
Definition: boundingVolumeTerrainSourceTracker.h:79
Definition: boundingVolumeTerrainSourceTracker.h:53
Definition: coordSystem.h:54
DtNodeBoundingInfoList myPagedOutAreas
For now, just a primitive list of spheres. This should be an optimized data structure for speed...
Definition: boundingVolumeTerrainSourceTracker.h:176
std::list< DtSphere2 > DtNodeBoundingList
Definition: sphere2.h:20
boost::shared_ptr< DtNodeStatusSSELement > DtNodeStatusSSElementPtr
Definition: boundingVolumeTerrainSourceTracker.h:82
Base class for Terrain Source trackers. Determines if the necessary data To perform an intersection i...
Definition: terrainSourceTracker.h:75
Command which causes all data within the specified geometry to be paged in by the terrain pager...
Definition: boundingVolumeCommands.h:16
tbb::spin_rw_mutex myPagedInMutex
Definition: boundingVolumeTerrainSourceTracker.h:194
DtNodeId myOldestPagedObject
Definition: boundingVolumeTerrainSourceTracker.h:183
DtSpatialSubdivision< DtNodeStatusSSElementPtr > DtSpatialNodeStatusContainer
Definition: boundingVolumeTerrainSourceTracker.h:85
virtual void getPageOutData(DtNodeBoundingList &nodeBoundingList)
Return a list of bounding sphere that represent the the paged in tiles.
A DtBoundingVolumeTerrainSourceTracker tracks data from a paging terrain source for purposes such as ...
Definition: boundingVolumeTerrainSourceTracker.h:45
DtPagedNodeStatusPtr myStatus
Definition: boundingVolumeTerrainSourceTracker.h:80
DtNodeStatusSSELement(std::pair< DtNodeId, DtPagedNodeStatusPtr > idStatusPair)
Definition: boundingVolumeTerrainSourceTracker.h:62
#define DT_DLL_vantageTerrainImplementation
This file is used to determine how to build.
Definition: vantageTerrainImplementationDefines.h:28
DtExtent extent()
Definition: boundingVolumeTerrainSourceTracker.h:69
The DtSpatialSubdivision class represents a uniform spatial container. The container is divided up in...
Definition: spatialSubdivision.h:169
DtSpatialNodeStatusContainer * myPagedInSpatialNodeContainer
Definition: boundingVolumeTerrainSourceTracker.h:191
This class wraps the VR-Vantage Display Engine, and uses as a terrain loader and intersector. This is the terrain engine that powers the DtVantageTerrainImplementation. The DtVantageTerrainEngine runs the DtDe it its own thread, and processes commands thought the command queue.
Definition: vantageTerrainEngine.h:99
virtual bool canPageOutData(DtTerrainIntersectIDType intersectId)=0
tbb::atomic< bool > myInvalidFlag
Definition: boundingVolumeTerrainSourceTracker.h:181
class DtLocalVertexList:
Definition: localVertexList.h:20
DtBoost::shared_ptr< DtPagingMetaData > DtPagingMetaDataPtr
Definition: terrainPagingGeometry.h:101
DtNodeStatusSSELement(DtNodeId id, DtPagedNodeStatusPtr status)
Definition: boundingVolumeTerrainSourceTracker.h:55
DtSpatialNodeBoundingInfoContainer * myPagedOutSpatialNodeContainer
Spatial subdivision for finding relevant bounding nodes. The subdivision is projected into topo from ...
Definition: boundingVolumeTerrainSourceTracker.h:190
tbb::atomic< bool > myRecomputeOldestPagedObject
Definition: boundingVolumeTerrainSourceTracker.h:184
virtual DtTerrainIntersectIDType findOldestPagedData(unsigned int &numTriangles)=0
Finds the least-recently-used tile and set myOldestPagedObject to it.
DtPagedNodeStatusMap myPagedInAreas
List of paged in volumes. Used for tracking usage for paging out.
Definition: boundingVolumeTerrainSourceTracker.h:179

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)