Add singleton to shader and texture manager

This commit is contained in:
Riyyi
2021-01-11 01:23:38 +01:00
parent 7dea148ef8
commit 57a34b8be1
5 changed files with 59 additions and 4 deletions
+13 -4
View File
@@ -37,19 +37,28 @@ namespace Inferno {
Input::initialize(); Input::initialize();
ShaderManager* shaderManager = new ShaderManager();
shaderManager->initialize();
TextureManager* textureManager = new TextureManager();
textureManager->initialize();
m_cameraO = std::make_shared<OrthographicCamera>(); m_cameraO = std::make_shared<OrthographicCamera>();
m_cameraP = std::make_shared<PerspectiveCamera>(); m_cameraP = std::make_shared<PerspectiveCamera>();
TextureManager textureManager;
m_texture = textureManager.load("assets/gfx/test.png");
m_texture2 = textureManager.load("assets/gfx/test-inverted.png");
Renderer2D::initialize(); Renderer2D::initialize();
// Load assets
m_texture = TextureManager::the().load("assets/gfx/test.png");
m_texture2 = TextureManager::the().load("assets/gfx/test-inverted.png");
} }
Application::~Application() Application::~Application()
{ {
Renderer2D::destroy(); Renderer2D::destroy();
TextureManager::the().destroy();
ShaderManager::the().destroy();
// Input::destroy(); // Input::destroy();
Settings::destroy(); Settings::destroy();
} }
+16
View File
@@ -191,6 +191,22 @@ namespace Inferno {
// ----------------------------------------- // -----------------------------------------
ShaderManager* ShaderManager::s_instance = nullptr;
void ShaderManager::initialize()
{
ASSERT(!s_instance, "ShaderManager already exists!");
s_instance = this;
dbg(Log::Info) << "ShaderManager initialized";
}
void ShaderManager::destroy()
{
delete s_instance;
s_instance = nullptr;
}
void ShaderManager::add(const std::string& name, const std::shared_ptr<Shader>& shader) void ShaderManager::add(const std::string& name, const std::shared_ptr<Shader>& shader)
{ {
// Construct (key, value) pair and insert it into the unordered_map // Construct (key, value) pair and insert it into the unordered_map
+7
View File
@@ -47,6 +47,9 @@ namespace Inferno {
class ShaderManager { class ShaderManager {
public: public:
void initialize();
void destroy();
void add(const std::string& name, const std::shared_ptr<Shader>& shader); void add(const std::string& name, const std::shared_ptr<Shader>& shader);
std::shared_ptr<Shader> load(const std::string& name); std::shared_ptr<Shader> load(const std::string& name);
std::shared_ptr<Shader> load(const std::string& vertexSource, std::shared_ptr<Shader> load(const std::string& vertexSource,
@@ -57,12 +60,16 @@ namespace Inferno {
void remove(const std::string& name); void remove(const std::string& name);
void remove(const std::shared_ptr<Shader>& shader); void remove(const std::shared_ptr<Shader>& shader);
static inline ShaderManager& the() { return *s_instance; }
protected: protected:
std::string computeName(const std::string& vertexSource, std::string computeName(const std::string& vertexSource,
const std::string& fragmentSource); const std::string& fragmentSource);
private: private:
std::unordered_map<std::string, std::shared_ptr<Shader>> m_shaderList; std::unordered_map<std::string, std::shared_ptr<Shader>> m_shaderList;
static ShaderManager* s_instance;
}; };
} }
+16
View File
@@ -101,6 +101,22 @@ namespace Inferno {
// ----------------------------------------- // -----------------------------------------
TextureManager* TextureManager::s_instance = nullptr;
void TextureManager::initialize()
{
ASSERT(!s_instance, "TextureManager already exists!");
s_instance = this;
dbg(Log::Info) << "TextureManager initialized";
}
void TextureManager::destroy()
{
delete s_instance;
s_instance = nullptr;
}
void TextureManager::add(const std::string& path, const std::shared_ptr<Texture>& texture) void TextureManager::add(const std::string& path, const std::shared_ptr<Texture>& texture)
{ {
// Construct (key, value) pair and insert it into the unordered_map // Construct (key, value) pair and insert it into the unordered_map
+7
View File
@@ -39,6 +39,9 @@ namespace Inferno {
class TextureManager { class TextureManager {
public: public:
void initialize();
void destroy();
void add(const std::string& path, const std::shared_ptr<Texture>& texture); void add(const std::string& path, const std::shared_ptr<Texture>& texture);
std::shared_ptr<Texture> load(const std::string& path); std::shared_ptr<Texture> load(const std::string& path);
std::shared_ptr<Texture> get(const std::string& path); std::shared_ptr<Texture> get(const std::string& path);
@@ -47,8 +50,12 @@ namespace Inferno {
void remove(const std::string& path); void remove(const std::string& path);
void remove(const std::shared_ptr<Texture>& texture); void remove(const std::shared_ptr<Texture>& texture);
static inline TextureManager& the() { return *s_instance; }
private: private:
std::unordered_map<std::string, std::shared_ptr<Texture>> m_textureList; std::unordered_map<std::string, std::shared_ptr<Texture>> m_textureList;
static TextureManager* s_instance;
}; };
} }