light/modules/engine/src/utils/resource_manager.cpp

72 lines
1.7 KiB
C++
Raw Normal View History

2025-07-05 13:28:41 +03:30
#include <engine/graphics/graphics_context.hpp>
#include <engine/graphics/shader.hpp>
#include <engine/graphics/texture.hpp>
#include <engine/utils/file_manager.hpp>
#include <engine/utils/resource_manager.hpp>
namespace Light {
void ResourceManager::load_shader_impl(
2025-07-05 13:28:41 +03:30
const std::string &name,
const std::string &vertexPath,
const std::string &pixelPath
)
{
// check
lt_assert(!vertexPath.empty(), "Empty 'vertexPath'");
lt_assert(!pixelPath.empty(), "Empty 'pixelPath'");
2025-07-05 13:28:41 +03:30
// load files
2025-07-06 14:02:50 +03:30
auto vertexFile = FileManager::read_text_file(vertexPath);
auto pixelFile = FileManager::read_text_file(pixelPath);
2025-07-05 13:28:41 +03:30
// check
lt_assert(vertexFile.is_valid(), "Failed to read vertex file: {}", vertexPath);
lt_assert(pixelFile.is_valid(), "Failed to read vertex file: {}", pixelPath);
2025-07-05 13:28:41 +03:30
// create shader
m_shaders[name] = Ref<Shader>(
Shader::create(vertexFile, pixelFile, GraphicsContext::get_shared_context())
2025-07-05 13:28:41 +03:30
);
// free file
vertexFile.release();
pixelFile.release();
2025-07-05 13:28:41 +03:30
}
void ResourceManager::load_texture_impl(
2025-07-05 13:28:41 +03:30
const std::string &name,
const std::string &path,
unsigned int desiredComponents /* = 4u */
)
{
// load file
2025-07-06 14:02:50 +03:30
auto imgFile = FileManager::read_image_file(path, desiredComponents);
2025-07-05 13:28:41 +03:30
// create texture
m_textures[name] = Ref<Texture>(Texture::create(
imgFile.get_width(),
imgFile.get_height(),
imgFile.get_components(),
2025-07-05 16:07:51 +03:30
imgFile.get_data(),
GraphicsContext::get_shared_context(),
2025-07-05 13:28:41 +03:30
path
));
// free file
imgFile.release();
2025-07-05 13:28:41 +03:30
}
void ResourceManager::release_texture_impl(const std::string &name)
2025-07-05 13:28:41 +03:30
{
if (!m_textures[name])
2025-07-05 13:28:41 +03:30
{
2025-07-06 16:30:38 +03:30
log_wrn("Failed to find texture named: {}", name);
2025-07-05 13:28:41 +03:30
return;
}
m_textures[name] = nullptr;
2025-07-05 13:28:41 +03:30
}
} // namespace Light