VR-Forces 4.3 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
boundingVolumeTerrainSourceTracker.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2010 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>
15 #include <geometry/spatialSubdivision.h>
16 #include <boost/unordered_map.hpp>
17 
23 
24 //VR-Link includes
25 #include <vlutil/vlSmartPointers.h>
26 #include <matrix/coordTransform.h>
27 
28 #include <tbb/spin_rw_mutex.h>
29 
30 #include <string>
31 #include <list>
32 #include <stack>
33 
36 
38 
39 
45  : public DtTerrainSourceTracker
46 {
47 public:
48 
49  //Struct defining the elemnt to add to the spatial subdivision for paged-in
50  //nodes. This is a different data structure from the paged-out nodes because
51  //there is additional data.
53  {
55  : myId(id)
56  , myStatus(status)
57  {
58 
59  }
60 
61  DtNodeStatusSSELement(std::pair<DtNodeId, DtPagedNodeStatusPtr> idStatusPair)
62  : myId(idStatusPair.first)
63  , myStatus(idStatusPair.second)
64  {
65 
66  }
67 
68  DtExtent extent()
69  {
70  return myStatus->myBoundingInfo.extent();
71  }
72 
73  void expandExtent(DtExtent& extent) const
74  {
75  myStatus->myBoundingInfo.expandExtent(extent);
76  }
77 
80  };
81  typedef boost::shared_ptr<DtNodeStatusSSELement> DtNodeStatusSSElementPtr;
82 
83  typedef DtSpatialSubdivision<DtNodeBoundingInfoPtr> DtSpatialNodeBoundingInfoContainer;
84  typedef DtSpatialSubdivision<DtNodeStatusSSElementPtr> DtSpatialNodeStatusContainer;
85 
87 
89 
90  virtual void updatePagedOutInfo(bool worldPagedOut,
91  const DtNodeBoundingInfoList& volumes);
92 
93  virtual void updatePagedInInfo(
94  const DtNodeBoundingInfoMap& volumes,
95  DtTerrainIntersectIDType intersectId = 0);
96 
97  virtual void removePagedInInfo(DtNodeId node);
98 
99  virtual bool dataAvailable(DtPagingMetaDataPtr metaData,
100  DtTerrainPagingGeometryPtr geometry);
101 
102  virtual void pageInData(DtPagingMetaDataPtr metaData,
103  DtTerrainPagingGeometryPtr geometry);
104 
105  virtual void drawDebugInfo(btIDebugDraw* debugDrawer);
106 
107  virtual bool canPageOutData(DtTerrainIntersectIDType intersectId);
108 
109  virtual void pageOutOldestData(const int priority);
110 
111  virtual DtTerrainIntersectIDType findOldestPagedData(unsigned int& numTrianglesOut);
112 
113  virtual void printBoundingVolumes() const;
114 
115  virtual bool getPagedOutNodes(DtTerrainPagingGeometryPtr geometry,
116  DtNodeBoundingInfoSet& nodes);
117 
118  virtual bool getPagedInNodes(DtTerrainPagingGeometryPtr geometry,
119  DtPagedNodeStatusMap& nodes);
120 
121 protected:
122 
123  virtual bool getPagedOutNodes(const DtSphere& sphere,
124  DtNodeBoundingInfoSet& nodes);
125  virtual bool getPagedOutNodes(const DtLocalVertexList& vertexList,
126  DtNodeBoundingInfoSet& nodes);
127  virtual bool getPagedOutNodes(const DtChord& chord,
128  DtNodeBoundingInfoSet& nodes);
129 
130  virtual bool getPagedInNodes(const DtSphere& sphere,
131  DtPagedNodeStatusMap& nodes);
132  virtual bool getPagedInNodes(const DtLocalVertexList& vertexList,
133  DtPagedNodeStatusMap& nodes);
134  virtual bool getPagedInNodes(const DtChord& chord,
135  DtPagedNodeStatusMap& nodes);
136 
137  virtual DtPageInGeometryCommand* createPageInGeometryCommand(
138  DtPagingMetaDataPtr metaData);
139 
140  virtual DtPageOutNodesCommand* createPageOutNodesCommand(
141  DtPagingMetaDataPtr metaData);
142 
143  virtual unsigned int getNumTriangles(DtNodeId node);
144 
145  virtual bool initializePagedOutSpatialSubdivision();
146  virtual bool initializePagedInSpatialSubdivision();
147 
148  virtual bool createPagedOutSpatialContainer(const DtExtent& extent);
149  virtual bool createPagedInSpatialContainer(const DtExtent& extent);
150 
151  virtual void addTerrainNodes(const DtNodeBoundingInfoList& nodes);
152  virtual void addTerrainNodes(const DtPagedNodeStatusMap& nodes);
153 
154 protected:
155 
157 
161 
164 
166 
169 
176 
179 
180  mutable tbb::spin_rw_mutex mySpatialSubdivisionMutex;
181 };
182 
183 
184 

Document ID: Generated on Wed Mar 11 21:20:57 EDT 2015 from SVN revision 150940
Copyright © 2005-2014 VT MÄK. All Rights Reserved (www.mak.com)