92 lines
2.4 KiB
C++
92 lines
2.4 KiB
C++
#include <asset_manager/asset_manager.hpp>
|
|
#include <asset_parser/assets/text.hpp>
|
|
#include <asset_parser/assets/texture.hpp>
|
|
#include <logger/logger.hpp>
|
|
#include <renderer/graphics_context.hpp>
|
|
#include <renderer/shader.hpp>
|
|
#include <renderer/texture.hpp>
|
|
|
|
namespace lt {
|
|
|
|
/* static */ auto AssetManager::instance() -> AssetManager &
|
|
{
|
|
static auto instance = AssetManager {};
|
|
return instance;
|
|
}
|
|
|
|
void AssetManager::load_shader_impl(
|
|
const std::string &name,
|
|
const std::filesystem::path &vertex_path,
|
|
const std::filesystem::path &pixel_path
|
|
)
|
|
{
|
|
try
|
|
{
|
|
log_trc("Loading shader:");
|
|
log_trc("\tname : {}", name);
|
|
log_trc("\tvertex path: {}", vertex_path.string());
|
|
log_trc("\tpixel path : {}", pixel_path.string());
|
|
|
|
m_shaders[name] = Ref<Shader>(Shader::create(
|
|
get_or_load_text_asset(vertex_path.string()),
|
|
get_or_load_text_asset(pixel_path),
|
|
GraphicsContext::get_shared_context()
|
|
));
|
|
}
|
|
catch (const std::exception &exp)
|
|
{
|
|
log_err("Failed to load shader:");
|
|
log_err("\tname : {}", name);
|
|
log_err("\tvertex path: {}", vertex_path.string());
|
|
log_err("\tpixel path : {}", pixel_path.string());
|
|
log_err("\texception : {}", exp.what());
|
|
}
|
|
}
|
|
|
|
void AssetManager::load_texture_impl(const std::string &name, const std::filesystem::path &path)
|
|
{
|
|
try
|
|
{
|
|
log_trc("Loading texture:");
|
|
log_trc("\tname: {}", name);
|
|
log_trc("\tpath: {}", path.string());
|
|
|
|
m_textures[name] = Ref<Texture>(
|
|
Texture::create(get_or_load_texture_asset(path), GraphicsContext::get_shared_context())
|
|
);
|
|
}
|
|
catch (const std::exception &exp)
|
|
{
|
|
log_err("Failed to load texture:");
|
|
log_err("\tname : {}", name);
|
|
log_err("\tpath : {}", path.string());
|
|
log_err("\texception: {}", exp.what());
|
|
}
|
|
}
|
|
|
|
auto AssetManager::get_or_load_text_asset(const std::filesystem::path &path)
|
|
-> Ref<Assets::TextAsset>
|
|
{
|
|
const auto key = std::filesystem::canonical(path).string();
|
|
if (!m_text_assets.contains(key))
|
|
{
|
|
m_text_assets.emplace(key, create_ref<Assets::TextAsset>(path));
|
|
}
|
|
|
|
return m_text_assets[key];
|
|
}
|
|
|
|
auto AssetManager::get_or_load_texture_asset(const std::filesystem::path &path)
|
|
-> Ref<Assets::TextureAsset>
|
|
{
|
|
const auto key = std::filesystem::canonical(path).string();
|
|
if (!m_texture_assets.contains(key))
|
|
{
|
|
m_texture_assets.emplace(key, create_ref<Assets::TextureAsset>(path));
|
|
}
|
|
|
|
return m_texture_assets[key];
|
|
}
|
|
|
|
|
|
} // namespace lt
|