#pragma once #include "core/log.h" #include "rendering/texture.h" #include #include #include namespace Donut { class HDRIManager { public: static HDRIManager& get() { static HDRIManager instance; return instance; } Ref load_hdri(const std::string& path); Ref get_current_hdri() const { return m_current_hdri; } void set_current_hdri(const std::string& path); const std::vector& get_available_hdri() const { return m_available_hdri; } std::string get_hdri_name(const std::string& path) const; void clear_cache(); private: HDRIManager() = default; ~HDRIManager() = default; HDRIManager(const HDRIManager&) = delete; HDRIManager& operator=(const HDRIManager&) = delete; std::unordered_map> m_hdri_cache; Ref m_current_hdri; std::vector m_available_hdri = { "assets/hdri/hdr_blue_nebulae_1.hdr", "assets/hdri/hdr_subdued_blue_nebulae.hdr", "assets/hdri/hdr_subdued_multi_nebulae.hdr" }; }; };