1 #include "landmanager.hpp"
2
3 #include <osg/Stats>
4
5 #include <components/resource/objectcache.hpp>
6
7 #include "../mwbase/environment.hpp"
8 #include "../mwbase/world.hpp"
9 #include "../mwworld/esmstore.hpp"
10
11 namespace MWRender
12 {
13
LandManager(int loadFlags)14 LandManager::LandManager(int loadFlags)
15 : GenericResourceManager<std::pair<int, int> >(nullptr)
16 , mLoadFlags(loadFlags)
17 {
18 mCache = new CacheType;
19 }
20
getLand(int x,int y)21 osg::ref_ptr<ESMTerrain::LandObject> LandManager::getLand(int x, int y)
22 {
23 osg::ref_ptr<osg::Object> obj = mCache->getRefFromObjectCache(std::make_pair(x,y));
24 if (obj)
25 return static_cast<ESMTerrain::LandObject*>(obj.get());
26 else
27 {
28 const ESM::Land* land = MWBase::Environment::get().getWorld()->getStore().get<ESM::Land>().search(x,y);
29 if (!land)
30 return nullptr;
31 osg::ref_ptr<ESMTerrain::LandObject> landObj (new ESMTerrain::LandObject(land, mLoadFlags));
32 mCache->addEntryToObjectCache(std::make_pair(x,y), landObj.get());
33 return landObj;
34 }
35 }
36
reportStats(unsigned int frameNumber,osg::Stats * stats) const37 void LandManager::reportStats(unsigned int frameNumber, osg::Stats *stats) const
38 {
39 stats->setAttribute(frameNumber, "Land", mCache->getCacheSize());
40 }
41
42
43 }
44