From dfa5f78af2f68bed5907555e19aba87536fee9be Mon Sep 17 00:00:00 2001 From: Delta18-Git <64347927+Delta18-Git@users.noreply.github.com> Date: Wed, 14 May 2025 22:22:32 +0530 Subject: [PATCH 1/7] feat(resource manager): adds manager for textures adds a resource manager for loading and unloading assets, as well as for lazily creating textures --- CMakeLists.txt | 1 + include/engine/core/resource.hpp | 29 +++++++++++++++ include/engine/core/texture.hpp | 4 +-- include/engine/engine.hpp | 5 +-- include/vendored/vendored.cmake | 10 ++++-- src/engine/core/resource.cpp | 62 ++++++++++++++++++++++++++++++++ src/engine/core/texture.cpp | 5 +++ src/engine/engine.cpp | 4 +++ 8 files changed, 113 insertions(+), 7 deletions(-) create mode 100644 include/engine/core/resource.hpp create mode 100644 src/engine/core/resource.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 23190e3..a4e05de 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,7 @@ target_link_libraries(GameEngine PRIVATE SDL3::SDL3 SDL3_ttf::SDL3_ttf + SDL3_image::SDL3_image imgui_sdl3 spdlog ) diff --git a/include/engine/core/resource.hpp b/include/engine/core/resource.hpp new file mode 100644 index 0000000..8351109 --- /dev/null +++ b/include/engine/core/resource.hpp @@ -0,0 +1,29 @@ +#ifndef RESOURCE_HPP +#define RESOURCE_HPP +#include +#include +#include +#include +#include +namespace Engine { +// add more resource types later (font, audio) +enum class ResourceType { Texture }; +class ResourceManager { + public: + explicit ResourceManager(Renderer &renderer); + ~ResourceManager(); + + void AddResource(const std::string &path, ResourceType type); + bool RemoveResource(const std::string_view path, ResourceType type); + + std::shared_ptr FindTexture(const std::string_view path); + + private: + void CreateTexture(const std::string_view path); + + Renderer &m_renderer; + std::unordered_map m_resourcePaths; + std::unordered_map> m_textureMap; +}; +} // namespace Engine +#endif diff --git a/include/engine/core/texture.hpp b/include/engine/core/texture.hpp index 72a8b83..55f60d6 100644 --- a/include/engine/core/texture.hpp +++ b/include/engine/core/texture.hpp @@ -6,9 +6,7 @@ class Texture { public: Texture() = default; ~Texture(); - // bool LoadFromFile(Renderer &renderer, const std::string &path); - // |- Handled by ResourceManager - void SetTexture(SDL_Texture *texture) { m_texture = texture; } + void SetTexture(SDL_Texture *texture); SDL_Texture *GetSDLTexture() const { return m_texture; } int GetWidth() const { return m_width; } int GetHeight() const { return m_height; } diff --git a/include/engine/engine.hpp b/include/engine/engine.hpp index 408d401..2b46f01 100644 --- a/include/engine/engine.hpp +++ b/include/engine/engine.hpp @@ -1,5 +1,6 @@ #ifndef _ENGINE_HPP #define _ENGINE_HPP +#include #include #include #include @@ -28,7 +29,7 @@ class Engine { RenderManager &GetRenderManager(); // InputHandler &GetInputs(); // AudioSystem &GetAudio(); - // ResourceManager &GetResources(); + ResourceManager &GetResources(); // Time &GetTime(); private: Engine() = default; @@ -41,12 +42,12 @@ class Engine { std::unique_ptr m_renderer; std::unique_ptr m_eventHandler; std::unique_ptr m_renderManager; + std::unique_ptr m_resManager; // from main.cpp here as well // TODO: Later implementation // std::unique_ptr m_inputHandler; // std::unique_ptr m_audioSystem; - // std::unique_ptr m_resManager; // std::unique_ptr