VR-Forces 4.0.4 Class Documentation
include/vantageTerrainImplementation/boundingVolumeTerrainSourceTracker.h
Go to the documentation of this file.
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 

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)