This commit is contained in:
2022-04-24 22:12:07 +02:00
parent 40a1723544
commit 3cfdd7a3f2
43 changed files with 777 additions and 457 deletions

View File

@@ -0,0 +1,67 @@
#include "ResourceHandler.h"
#include "../util/Log.h"
#include "CubeMap.h"
#include "Model.h"
#include "Texture.h"
#include <algorithm>
ResourceHandler ResourceHandler::s_instance;
ResourceHandler &ResourceHandler::instance()
{
return s_instance;
}
template <typename T, typename... Param>
ResourceId ResourceHandler::registerResource(Param const &...param)
{
auto resource = std::make_shared<T>(param...);
m_resources.emplace(resource->id(), resource);
return resource->id();
}
template ResourceId ResourceHandler::registerResource<Texture>(TextureDescriptor const &);
template ResourceId ResourceHandler::registerResource<TextureCubeMap>(TextureCubeMapDescriptor const &);
template ResourceId ResourceHandler::registerResource<InternalCubeMap>(int const &);
template ResourceId ResourceHandler::registerResource<Model>(ModelDescriptor const &);
const std::shared_ptr<Resource> ResourceHandler::resource(const ResourceId id) const
{
auto it = m_resources.find(id);
if (it != m_resources.end()) {
auto resource = it->second;
if (!resource->isInitialized())
resource->initialize();
return resource;
}
Log::logger().warn("Could not find resource with id {}", id);
return std::shared_ptr<Resource>();
}
const std::shared_ptr<Resource> ResourceHandler::resource(const std::string &name) const
{
auto it = std::find_if(m_resources.begin(), m_resources.end(), [&name](const auto &resource) {
if (auto namedResource = std::dynamic_pointer_cast<NamedResource>(resource.second)) {
return namedResource->name() == name;
}
return false;
});
if (it != m_resources.end()) {
auto resource = it->second;
if (!resource->isInitialized())
resource->initialize();
return resource;
}
Log::logger().warn("Could not find resource with unique name \"{}\"", name);
return std::shared_ptr<Resource>();
}