diff options
-rw-r--r-- | src/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/resources/loaders/atlasloader.cpp | 62 | ||||
-rw-r--r-- | src/resources/loaders/atlasloader.h | 38 | ||||
-rw-r--r-- | src/resources/mapreader.cpp | 6 | ||||
-rw-r--r-- | src/resources/resourcemanager/resourcemanager.cpp | 26 | ||||
-rw-r--r-- | src/resources/resourcemanager/resourcemanager.h | 3 |
7 files changed, 110 insertions, 31 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 862c91690..8b0c0f4ce 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -719,6 +719,8 @@ SET(SRCS resources/db/skillunitdb.h resources/resource.cpp resources/resource.h + resources/loaders/atlasloader.cpp + resources/loaders/atlasloader.h resources/loaders/imageloader.cpp resources/loaders/imageloader.h resources/loaders/imagesetloader.cpp @@ -1419,6 +1421,8 @@ SET(DYE_CMD_SRCS resources/imagewriter.h resources/resource.cpp resources/resource.h + resources/loaders/atlasloader.cpp + resources/loaders/atlasloader.h resources/loaders/imageloader.cpp resources/loaders/imageloader.h resources/loaders/imagesetloader.cpp diff --git a/src/Makefile.am b/src/Makefile.am index 3e0e436b1..687137dfe 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -390,6 +390,8 @@ SRC += events/actionevent.h \ enums/resources/questtype.h \ resources/resource.cpp \ resources/resource.h \ + resources/loaders/atlasloader.cpp \ + resources/loaders/atlasloader.h \ resources/loaders/imageloader.cpp \ resources/loaders/imageloader.h \ resources/loaders/imagesetloader.cpp \ diff --git a/src/resources/loaders/atlasloader.cpp b/src/resources/loaders/atlasloader.cpp new file mode 100644 index 000000000..d641e3bd4 --- /dev/null +++ b/src/resources/loaders/atlasloader.cpp @@ -0,0 +1,62 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2016 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * 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 2 of the License, or + * 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 <http://www.gnu.org/licenses/>. + */ + +#ifdef USE_OPENGL + +#include "logger.h" + +#include "resources/atlas/atlasmanager.h" +#include "resources/atlas/atlasresource.h" + +#include "resources/loaders/atlasloader.h" + +#include "resources/resourcemanager/resourcemanager.h" + +#include "utils/checkutils.h" + +#include "debug.h" + +struct AtlasLoader final +{ + const std::string name; + const StringVect *files; + + static Resource *load(const void *const v) + { + if (!v) + return nullptr; + + const AtlasLoader *const rl = static_cast<const AtlasLoader *const>(v); + AtlasResource *const resource = AtlasManager::loadTextureAtlas( + rl->name, *rl->files); + if (!resource) + reportAlways("Atlas creation error: %s", rl->name.c_str()); + return resource; + } +}; + +Resource *Loader::getAtlas(const std::string &name, + const StringVect &files) +{ + AtlasLoader rl = { name, &files }; + return resourceManager->get("atlas_" + name, AtlasLoader::load, &rl); +} + +#endif // USE_OPENGL diff --git a/src/resources/loaders/atlasloader.h b/src/resources/loaders/atlasloader.h new file mode 100644 index 000000000..81f8e6274 --- /dev/null +++ b/src/resources/loaders/atlasloader.h @@ -0,0 +1,38 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2016 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * 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 2 of the License, or + * 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 <http://www.gnu.org/licenses/>. + */ + +#ifndef RESOURCES_LOADERS_ATLASLOADER_H +#define RESOURCES_LOADERS_ATLASLOADER_H +#ifdef USE_OPENGL + +#include "utils/stringvector.h" + +#include "localconsts.h" + +class Resource; + +namespace Loader +{ + Resource *getAtlas(const std::string &name, + const StringVect &files) A_WARN_UNUSED; +} // namespace Loader + +#endif // USE_OPENGL +#endif // RESOURCES_LOADERS_ATLASLOADER_H diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp index 161144a7d..9cc2542a5 100644 --- a/src/resources/mapreader.cpp +++ b/src/resources/mapreader.cpp @@ -42,6 +42,7 @@ #ifdef USE_OPENGL #include "resources/db/mapdb.h" +#include "resources/loaders/atlasloader.h" #endif #include "resources/map/tileanimation.h" @@ -351,8 +352,9 @@ Map *MapReader::readMap(XmlNodePtrConst node, const std::string &path) const MapInfo *const info = MapDB::getMapAtlas(fileName); if (info) { - map->setAtlas(resourceManager->getAtlas( - info->atlas, *info->files)); + map->setAtlas(Loader::getAtlas( + info->atlas, + *info->files)); } } BLOCK_END("MapReader::readMap load atlas") diff --git a/src/resources/resourcemanager/resourcemanager.cpp b/src/resources/resourcemanager/resourcemanager.cpp index 539e89d3a..3bde069e5 100644 --- a/src/resources/resourcemanager/resourcemanager.cpp +++ b/src/resources/resourcemanager/resourcemanager.cpp @@ -528,32 +528,6 @@ Resource *ResourceManager::get(const std::string &idPath, } #ifdef USE_OPENGL -struct AtlasLoader final -{ - const std::string name; - const StringVect *files; - - static Resource *load(const void *const v) - { - if (!v) - return nullptr; - - const AtlasLoader *const rl = static_cast<const AtlasLoader *const>(v); - AtlasResource *const resource = AtlasManager::loadTextureAtlas( - rl->name, *rl->files); - if (!resource) - reportAlways("Atlas creation error: %s", rl->name.c_str()); - return resource; - } -}; - -Resource *ResourceManager::getAtlas(const std::string &name, - const StringVect &files) -{ - AtlasLoader rl = { name, &files }; - return get("atlas_" + name, AtlasLoader::load, &rl); -} - struct ShaderLoader final { const std::string name; diff --git a/src/resources/resourcemanager/resourcemanager.h b/src/resources/resourcemanager/resourcemanager.h index d8b080b68..cadc437d5 100644 --- a/src/resources/resourcemanager/resourcemanager.h +++ b/src/resources/resourcemanager/resourcemanager.h @@ -134,9 +134,6 @@ class ResourceManager final : public MemoryCounter bool addResource(const std::string &idPath, Resource *const resource); #ifdef USE_OPENGL - Resource *getAtlas(const std::string &name, - const StringVect &files) A_WARN_UNUSED; - Resource *getShader(const unsigned int type, const std::string &name) A_WARN_UNUSED; |