![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 00006 #pragma once 00007 00010 00012 00013 #include <vantageTerrainImplementation/terrainSourceTracker.h> 00014 #include <vantageTerrainImplementation/pageInVisitor.h> 00015 #include <vantageTerrainImplementation/vantageTerrainImplementationDefines.h> 00016 #include <vantageTerrainImplementation/vantageTerrainImplementationUtil.h> 00017 #include <vantageTerrainImplementation/vantageTerrainConsoleCommands.h> 00018 00019 //Mak Terrain Toolkit includes 00020 #include <geometry/sphere.h> 00021 00022 //VR-Link includes 00023 #include <vlutil/vlSmartPointers.h> 00024 00025 #include <tbb/spin_rw_mutex.h> 00026 00027 #include <string> 00028 #include <list> 00029 #include <stack> 00030 00031 class DtPageInGeometryCommand; 00032 class DtPageOutNodesCommand; 00033 00034 struct DtNodeBoundingInfo 00035 { 00036 DtNodeBoundingInfo(DtSphere boundingSphere, std::string filename, 00037 bool knownNotFound) 00038 : myBoundingSphere(boundingSphere) 00039 , myFilename(filename) 00040 , myKnownNotFound(knownNotFound) 00041 { 00042 00043 } 00044 00045 DtSphere myBoundingSphere; 00046 std::string myFilename; 00047 bool myKnownNotFound; 00048 }; 00049 00050 00051 struct DtPagedNodeStatus 00052 { 00053 DtPagedNodeStatus(DtNodeBoundingInfo boundingInfo, unsigned int numTriangles, 00054 unsigned int lastUsed = 0) 00055 : myBoundingInfo(boundingInfo) 00056 , myNumTriangles(numTriangles) 00057 , myLastUsed(lastUsed) 00058 , myPendingRemoval(false) 00059 { 00060 00061 } 00062 00063 DtNodeBoundingInfo myBoundingInfo; 00064 unsigned int myLastUsed; 00065 unsigned int myNumTriangles; 00066 bool myPendingRemoval; 00067 }; 00068 00069 typedef DtBoost::shared_ptr< DtNodeBoundingInfo > DtNodeBoundingInfoPtr; 00070 typedef DtBoost::shared_ptr< DtPagedNodeStatus > DtPagedNodeStatusPtr; 00071 typedef std::list<DtNodeBoundingInfoPtr> DtNodeBoundingInfoList; 00072 typedef std::map<DtNodeId, DtNodeBoundingInfoPtr> DtNodeBoundingInfoMap; 00073 typedef std::map<DtNodeId, DtPagedNodeStatusPtr> DtPagedNodeStatusMap; 00074 typedef std::map<DtNodeId, int> DtNodeToChildCountMap; 00075 00080 class DT_DLL_vantageTerrainImplementation DtBoundingVolumeTerrainSourceTracker 00081 : public DtTerrainSourceTracker 00082 { 00083 public: 00084 00085 DtBoundingVolumeTerrainSourceTracker(DtPagerCommandQueue* commandQueue); 00086 00087 virtual ~DtBoundingVolumeTerrainSourceTracker(); 00088 00089 virtual void updatePagedOutInfo(bool worldPagedOut, 00090 const DtNodeBoundingInfoList& volumes); 00091 00092 virtual void updatePagedInInfo( 00093 const DtNodeBoundingInfoMap& volumes, 00094 const unsigned int intersectId = 0); 00095 00096 virtual void removePagedInInfo(DtNodeId node); 00097 00098 virtual bool dataAvailable(DtPagingMetaDataPtr metaData, 00099 DtTerrainPagingGeometryPtr geometry); 00100 00101 virtual void pageInData(DtPagingMetaDataPtr metaData, 00102 DtTerrainPagingGeometryPtr geometry); 00103 00104 virtual void drawDebugInfo(btIDebugDraw* debugDrawer); 00105 00106 virtual bool canPageOutData(unsigned int intersectId); 00107 00108 virtual void pageOutOldestData(const int priority); 00109 00110 virtual unsigned int findOldestPagedData(unsigned int& numTrianglesOut); 00111 00112 virtual void printBoundingVolumes() const; 00113 00114 virtual void setChildCount(DtNodeId node, const unsigned int& count); 00115 virtual const unsigned int childCount(DtNodeId node); 00116 virtual void removeChildCount(DtNodeId node); 00117 00118 protected: 00119 00120 virtual DtPageInGeometryCommand* createPageInGeometryCommand( 00121 DtPagingMetaDataPtr metaData); 00122 00123 virtual DtPageOutNodesCommand* createPageOutNodesCommand( 00124 DtPagingMetaDataPtr metaData); 00125 00126 virtual unsigned int getNumTriangles(DtNodeId node); 00127 00128 protected: 00129 00130 DtPrintBoundingVolumesCommand* myPrintBoundingVolumesCommand; 00131 00134 DtNodeBoundingInfoList myPagedOutAreas; 00135 00137 DtPagedNodeStatusMap myPagedInAreas; 00138 00139 bool myWorldPagedOut; 00140 00141 DtNodeId myOldestPagedObject; 00142 bool myRecomputeOldestPagedObject; 00143 00144 DtNodeToChildCountMap myNodeToChildCountMap; 00145 00146 }; 00147 00148 00149