diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2022-10-06 07:11:48 +0200 |
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2022-10-06 07:11:48 +0200 |
| commit | 66ee29df9c19e35b4c126e12e48bc144fe72eb22 (patch) | |
| tree | c5d8a80cb917a1e33d8efdf6ffc653694e67c759 /loader-impl.cpp | |
| parent | 9b2b5c5fd5880f35e2e952bb89fc709f4b814364 (diff) | |
a
Diffstat (limited to 'loader-impl.cpp')
| -rw-r--r-- | loader-impl.cpp | 89 |
1 files changed, 0 insertions, 89 deletions
diff --git a/loader-impl.cpp b/loader-impl.cpp deleted file mode 100644 index 24d43fdb..00000000 --- a/loader-impl.cpp +++ /dev/null @@ -1,89 +0,0 @@ -#include "loader.hpp" -#include "tile-atlas.hpp" -#include "compat/assert.hpp" -#include <Corrade/Containers/Optional.h> -#include <Corrade/Containers/StringView.h> -#include <Corrade/PluginManager/PluginManager.h> -#include <Corrade/Utility/Resource.h> -#include <Magnum/ImageView.h> -#include <Magnum/Trade/AbstractImporter.h> -#include <Magnum/Trade/ImageData.h> -#include <Magnum/Trade/AbstractImageConverter.h> -#include <unordered_map> -#include <utility> -#include <optional> - -namespace Magnum::Examples { - -struct loader_impl final : loader_ -{ - std::optional<Utility::Resource> shader_res; - PluginManager::Manager<Trade::AbstractImporter> importer_plugins; - Containers::Pointer<Trade::AbstractImporter> tga_importer = - importer_plugins.loadAndInstantiate("AnyImageImporter"); - - PluginManager::Manager<Trade::AbstractImageConverter> image_converter_plugins; - Containers::Pointer<Trade::AbstractImageConverter> tga_converter = - image_converter_plugins.loadAndInstantiate("AnyImageConverter"); - - std::unordered_map<std::string, std::shared_ptr<struct tile_atlas>> atlas_map; - - std::string shader(const Containers::StringView& filename) override; - Trade::ImageData2D tile_texture(const Containers::StringView& filename) override; - std::shared_ptr<struct tile_atlas> tile_atlas(const Containers::StringView& filename, Vector2i size) override; - - explicit loader_impl(); - ~loader_impl() override; -}; - -std::string loader_impl::shader(const Containers::StringView& filename) -{ - if (!shader_res) - shader_res = std::make_optional<Utility::Resource>("game/shaders"); - auto ret = shader_res->getString(filename); - if (ret.isEmpty()) - ABORT("can't find shader resource '%s'", filename.cbegin()); - return ret; -} - -std::shared_ptr<tile_atlas> loader_impl::tile_atlas(const Containers::StringView& name, Vector2i size) -{ - auto it = atlas_map.find(name); - if (it != atlas_map.end()) - return it->second; - auto image = tile_texture(name); - auto atlas = std::make_shared<struct tile_atlas>(name, image, size); - atlas_map[name] = atlas; - return atlas; -} - -Trade::ImageData2D loader_impl::tile_texture(const Containers::StringView& filename) -{ - if(!tga_importer || !tga_importer->openFile(filename)) - ABORT("can't open tile image '%s'", filename.cbegin()); - auto img = tga_importer->image2D(0); - if (!img) - ABORT("can't allocate tile image for '%s'", filename.cbegin()); - auto ret = std::move(*img); - return ret; -} - -void loader_::destroy() -{ - loader.~loader_(); - new (&loader) loader_impl(); -} - -loader_impl::loader_impl() = default; -loader_impl::~loader_impl() = default; - -static loader_& make_default_loader() -{ - static loader_impl loader_singleton{}; - return loader_singleton; -} - -// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables) -loader_& loader = make_default_loader(); - -} // namespace Magnum::Examples |
