llvolumemgr.h

Go to the documentation of this file.
00001 
00032 #ifndef LL_LLVOLUMEMGR_H
00033 #define LL_LLVOLUMEMGR_H
00034 
00035 #include <map>
00036 
00037 #include "llvolume.h"
00038 #include "llmemory.h"
00039 #include "llthread.h"
00040 
00041 class LLVolumeParams;
00042 class LLVolumeLODGroup;
00043 
00044 class LLVolumeLODGroup : public LLThreadSafeRefCount
00045 {
00046 protected:
00047         ~LLVolumeLODGroup();
00048         
00049 public:
00050         enum
00051         {
00052                 NUM_LODS = 4
00053         };
00054 
00055         LLVolumeLODGroup(const LLVolumeParams &params);
00056 
00057         BOOL derefLOD(LLVolume *volumep);
00058         static S32 getDetailFromTan(const F32 tan_angle);
00059         static F32 getVolumeScaleFromDetail(const S32 detail);
00060 
00061         LLVolume *getLOD(const S32 detail);
00062         const LLVolumeParams &getParams() const { return mParams; };
00063 
00064         F32     dump();
00065         friend std::ostream& operator<<(std::ostream& s, const LLVolumeLODGroup& volgroup);
00066 
00067 protected:
00068         LLVolumeParams mParams;
00069 
00070         S32 mLODRefs[NUM_LODS];
00071         LLVolume *mVolumeLODs[NUM_LODS];
00072         static F32 mDetailThresholds[NUM_LODS];
00073         static F32 mDetailScales[NUM_LODS];
00074         S32             mAccessCount[NUM_LODS];
00075 };
00076 
00077 class LLVolumeMgr
00078 {
00079 public:
00080         static void initClass();
00081         static BOOL cleanupClass();
00082         
00083 public:
00084         LLVolumeMgr();
00085         ~LLVolumeMgr();
00086         BOOL cleanup();                 // Cleanup all volumes being managed, returns TRUE if no dangling references
00087         LLVolume *getVolume(const LLVolumeParams &volume_params, const S32 detail);
00088         void cleanupVolume(LLVolume *volumep);
00089 
00090         void dump();
00091         friend std::ostream& operator<<(std::ostream& s, const LLVolumeMgr& volume_mgr);
00092 
00093 protected:
00094         typedef std::map<const LLVolumeParams*, LLVolumeLODGroup*, LLVolumeParams::compare> volume_lod_group_map_t;
00095         typedef volume_lod_group_map_t::const_iterator volume_lod_group_map_iter;
00096         volume_lod_group_map_t mVolumeLODGroups;
00097 
00098         LLMutex* mDataMutex;
00099         
00100 //      S32 mNumVolumes;
00101 };
00102 
00103 extern LLVolumeMgr* gVolumeMgr;
00104 
00105 #endif // LL_LLVOLUMEMGR_H

Generated on Thu Jul 1 06:09:42 2010 for Second Life Viewer by  doxygen 1.4.7