1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-01-19 23:23:54 +00:00
openmw/components/resource/niffilemanager.cpp

66 lines
1.7 KiB
C++
Raw Normal View History

#include "niffilemanager.hpp"
2022-07-21 11:51:34 +00:00
#include <iostream>
2016-02-09 17:11:07 +00:00
#include <osg/Object>
#include <osg/Stats>
2016-02-09 17:11:07 +00:00
#include <components/vfs/manager.hpp>
#include "objectcache.hpp"
namespace Resource
{
class NifFileHolder : public osg::Object
{
public:
NifFileHolder(const Nif::NIFFilePtr& file)
: mNifFile(file)
{
}
NifFileHolder(const NifFileHolder& copy, const osg::CopyOp& copyop)
: mNifFile(copy.mNifFile)
{
}
2024-01-16 19:56:58 +00:00
NifFileHolder() = default;
META_Object(Resource, NifFileHolder)
Nif::NIFFilePtr mNifFile;
};
2024-01-17 17:10:42 +00:00
NifFileManager::NifFileManager(const VFS::Manager* vfs, const ToUTF8::StatelessUtf8Encoder* encoder)
// NIF files aren't needed any more once the converted objects are cached in SceneManager / BulletShapeManager,
// so no point in using an expiry delay.
: ResourceManager(vfs, 0)
2024-01-16 19:56:58 +00:00
, mEncoder(encoder)
{
}
2024-01-16 19:56:58 +00:00
NifFileManager::~NifFileManager() = default;
Nif::NIFFilePtr NifFileManager::get(VFS::Path::NormalizedView name)
{
osg::ref_ptr<osg::Object> obj = mCache->getRefFromObjectCache(name);
if (obj)
return static_cast<NifFileHolder*>(obj.get())->mNifFile;
else
{
auto file = std::make_shared<Nif::NIFFile>(name.value());
2024-01-16 19:56:58 +00:00
Nif::Reader reader(*file, mEncoder);
reader.parse(mVFS->get(name));
obj = new NifFileHolder(file);
mCache->addEntryToObjectCache(name, obj);
return file;
}
}
2022-09-22 18:26:05 +00:00
void NifFileManager::reportStats(unsigned int frameNumber, osg::Stats* stats) const
{
stats->setAttribute(frameNumber, "Nif", mCache->getCacheSize());
}
}