78 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include <filesystem>
 | |
| 
 | |
| namespace Assets {
 | |
| 
 | |
| class TextAsset;
 | |
| 
 | |
| class TextureAsset;
 | |
| 
 | |
| } // namespace Assets
 | |
| 
 | |
| namespace lt {
 | |
| 
 | |
| class Shader;
 | |
| class Texture;
 | |
| 
 | |
| /**
 | |
|  * Asset is the data on the disk.
 | |
|  * Resource is the data on the gpu/cpu
 | |
|  *
 | |
|  * eg. TextureAsset is the file on the disk
 | |
|  * eg. Texture is the representation of it in the GPU
 | |
|  */
 | |
| class AssetManager
 | |
| {
 | |
| public:
 | |
| 	static void load_shader(
 | |
| 	    const std::string &name,
 | |
| 	    const std::filesystem::path &vertex_path,
 | |
| 	    const std::filesystem::path &pixel_path
 | |
| 	)
 | |
| 	{
 | |
| 		instance().load_shader_impl(name, vertex_path, pixel_path);
 | |
| 	}
 | |
| 
 | |
| 	static void load_texture(const std::string &name, const std::filesystem::path &path)
 | |
| 	{
 | |
| 		instance().load_texture_impl(name, path);
 | |
| 	}
 | |
| 
 | |
| 	static auto get_shader(const std::string &name) -> Ref<Shader>
 | |
| 	{
 | |
| 		return instance().m_shaders[name];
 | |
| 	}
 | |
| 
 | |
| 	static auto get_texture(const std::string &name) -> Ref<Texture>
 | |
| 	{
 | |
| 		return instance().m_textures[name];
 | |
| 	}
 | |
| 
 | |
| private:
 | |
| 	AssetManager() = default;
 | |
| 
 | |
| 	static auto instance() -> AssetManager &;
 | |
| 
 | |
| 	void load_shader_impl(
 | |
| 	    const std::string &name,
 | |
| 	    const std::filesystem::path &vertex_path,
 | |
| 	    const std::filesystem::path &pixel_path
 | |
| 	);
 | |
| 
 | |
| 	void load_texture_impl(const std::string &name, const std::filesystem::path &path);
 | |
| 
 | |
| 	auto get_or_load_text_asset(const std::filesystem::path &path) -> Ref<Assets::TextAsset>;
 | |
| 
 | |
| 	auto get_or_load_texture_asset(const std::filesystem::path &path) -> Ref<Assets::TextureAsset>;
 | |
| 
 | |
| 	std::unordered_map<std::string, Ref<Assets::TextAsset>> m_text_assets;
 | |
| 
 | |
| 	std::unordered_map<std::string, Ref<Assets::TextureAsset>> m_texture_assets;
 | |
| 
 | |
| 	std::unordered_map<std::string, Ref<Shader>> m_shaders;
 | |
| 
 | |
| 	std::unordered_map<std::string, Ref<Texture>> m_textures;
 | |
| };
 | |
| 
 | |
| } // namespace lt
 |