/* * * 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 . */ #ifndef BLT_WITH_GRAPHICS_RESOURCE_MANAGER_H #define BLT_WITH_GRAPHICS_RESOURCE_MANAGER_H #include #include #include #include #include #include #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 textures_to_load; std::vector loaded_textures; blt::hashmap_t 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 get(const std::string& name) { if (name.empty() || textures_2d.find(name) == textures_2d.end()) return {}; return textures_2d[name]; } /** * Directly sets the internal representation of the texture. Can be used to set custom, non file system loaded textures. * Note: this function takes ownership of the ptr. */ inline void set(std::string_view name, texture_gl2D* texture) { textures_2d[name] = texture; } void cleanup(); }; } #endif //BLT_WITH_GRAPHICS_RESOURCE_MANAGER_H