/* * Copyright (C) 2022 Riyyi * * SPDX-License-Identifier: MIT */ #pragma once #include // uint32_t #include // std::shared_ptr #include // std::string #include // std::unordered_map #include "ruc/singleton.h" namespace Inferno { class Texture { public: Texture(const std::string& path); virtual ~Texture(); void bind(uint32_t unit = 0) const; void unbind() const; inline std::string path() const { return m_path; } inline uint32_t width() const { return m_width; } inline uint32_t height() const { return m_height; } inline uint32_t id() const { return m_id; } inline uint32_t internalFormat() const { return m_internalFormat; } inline uint32_t dataFormat() const { return m_dataFormat; } protected: void create(unsigned char* data); private: std::string m_path; uint32_t m_width; uint32_t m_height; uint32_t m_id; uint32_t m_internalFormat; uint32_t m_dataFormat; }; // ------------------------------------- class TextureManager final : public ruc::Singleton { public: TextureManager(s); virtual ~TextureManager(); void add(const std::string& path, std::shared_ptr texture); std::shared_ptr load(const std::string& path); std::shared_ptr get(const std::string& path); bool exists(const std::string& path); void remove(const std::string& path); void remove(std::shared_ptr texture); private: std::unordered_map> m_textureList; }; } // namespace Inferno