/* * <Short Description> * Copyright (C) 2023 Brett Terpstra * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef BLT_WITH_GRAPHICS_RESOURCE_MANAGER_H #define BLT_WITH_GRAPHICS_RESOURCE_MANAGER_H #include <blt/std/hashmap.h> #include <blt/gfx/texture.h> #include <mutex> #include <vector> #include <optional> #include <string> #include "blt/compatibility.h" namespace blt::gfx { struct loadable_texture { std::string path; std::string name; loadable_texture() = default; loadable_texture(std::string path, std::string name): path(std::move(path)), name(std::move(name)) {} }; class resource_manager { private: std::mutex load_lock; std::mutex save_lock; std::vector<loadable_texture> textures_to_load; std::vector<texture_file*> loaded_textures; HASHMAP<std::string, texture_gl2D*> textures_2d; public: resource_manager() = default; void enqueue(std::string path, std::string name = ""); void load_resources(std::size_t threads = 8); inline std::optional<texture_gl2D*> get(const std::string& name) { if (name.empty() || textures_2d.find(name) == textures_2d.end()) return {}; return textures_2d[name]; } void cleanup(); }; } #endif //BLT_WITH_GRAPHICS_RESOURCE_MANAGER_H