VR-Forces 4.5 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>
16 #include <boost/unordered_map.hpp>
17 
24 
25 //VR-Link includes
26 #include <vlutil/vlSmartPointers.h>
27 #include <matrix/coordTransform.h>
28 
29 #include <tbb/spin_rw_mutex.h>
30 
31 #include <string>
32 #include <list>
33 #include <stack>
34 
38 
40 
41 
47  : public DtTerrainSourceTracker
48 {
49 public:
50 
51  //Struct defining the elemnt to add to the spatial subdivision for paged-in
52  //nodes. This is a different data structure from the paged-out nodes because
53  //there is additional data.
55  {
57  : myId(id)
58  , myStatus(status)
59  {
60 
61  }
62 
63  DtNodeStatusSSELement(std::pair<DtNodeId, DtPagedNodeStatusPtr> idStatusPair)
64  : myId(idStatusPair.first)
65  , myStatus(idStatusPair.second)
66  {
67 
68  }
69 
70  DtExtent extent()
71  {
72  return myStatus->myBoundingInfo.extent();
73  }
74 
75  void expandExtent(DtExtent& extent) const
76  {
77  myStatus->myBoundingInfo.expandExtent(extent);
78  }
79 
82  };
83  typedef boost::shared_ptr<DtNodeStatusSSELement> DtNodeStatusSSElementPtr;
84 
87 
89 
91 
92  virtual void updatePagedOutInfo(const DtNodeBoundingInfoList& volumes, bool invalid = false);
93 
94  virtual void updatePagedInInfo(
95  const DtNodeBoundingInfoMap& volumes,
96  DtTerrainIntersectIDType intersectId = 0);
97 
98  virtual void removePagedInInfo(DtNodeId node);
99 
100  virtual bool dataAvailable(DtPagingMetaDataPtr metaData,
101  DtTerrainPagingGeometryPtr geometry);
102 
103  virtual void pageInData(DtPagingMetaDataPtr metaData,
104  DtTerrainPagingGeometryPtr geometry);
105 
106  virtual void drawDebugInfo(btIDebugDraw* debugDrawer);
107  virtual void updateDrawer(bool force);
108 
109  virtual bool canPageOutData(DtTerrainIntersectIDType intersectId);
110 
111  virtual void pageOutOldestData(const int priority);
112 
113  virtual DtTerrainIntersectIDType findOldestPagedData(unsigned int& numTrianglesOut);
114 
115  virtual void printInfo() const;
116 
117  virtual bool getPagedOutNodes(DtTerrainPagingGeometryPtr geometry,
118  DtNodeBoundingInfoSet& nodes);
119 
120  virtual bool getPagedInNodes(DtTerrainPagingGeometryPtr geometry,
121  DtPagedNodeStatusMap& nodes);
122 
123  virtual bool setDrawMode(DtDrawMode mode);
124 
125 protected:
126 
127  virtual bool getPagedOutNodes(const DtSphere& sphere,
128  DtNodeBoundingInfoSet& nodes);
129  virtual bool getPagedOutNodes(const DtLocalVertexList& vertexList,
130  DtNodeBoundingInfoSet& nodes);
131  virtual bool getPagedOutNodes(const DtChord& chord,
132  DtNodeBoundingInfoSet& nodes);
133 
134  virtual bool getPagedInNodes(const DtSphere& sphere,
135  DtPagedNodeStatusMap& nodes);
136  virtual bool getPagedInNodes(const DtLocalVertexList& vertexList,
137  DtPagedNodeStatusMap& nodes);
138  virtual bool getPagedInNodes(const DtChord& chord,
139  DtPagedNodeStatusMap& nodes);
140 
141  virtual DtPageInGeometryCommand* createPageInGeometryCommand(
142  DtPagingMetaDataPtr metaData);
143 
144  virtual DtPageOutNodesCommand* createPageOutNodesCommand(
145  DtPagingMetaDataPtr metaData);
146 
147  virtual unsigned int getNumTriangles(DtNodeId node);
148 
149  virtual bool initializePagedOutSpatialSubdivision();
150  virtual bool initializePagedInSpatialSubdivision();
151 
152  virtual bool createPagedOutSpatialContainer(const DtExtent& extent);
153  virtual bool createPagedInSpatialContainer(const DtExtent& extent);
154 
155  virtual void addTerrainNodes(const DtNodeBoundingInfoList& nodes);
156  virtual void addTerrainNodes(const DtPagedNodeStatusMap& nodes);
157 
158 protected:
162 
165 
167 
170 
177 
178  mutable tbb::spin_rw_mutex mySpatialSubdivisionMutex;
179 
180  std::auto_ptr<DtSharedMemoryBulletDebugDrawer> myDrawer;
181 };
182 
183 
184 

Document ID: Generated on Thu Mar 23 18:54:12 EDT 2017 from SVN revision 174804
Copyright © 2005-2017 VT MÄK. All Rights Reserved (www.mak.com)