diff options
Diffstat (limited to 'src/resources')
-rw-r--r-- | src/resources/db/mapdb.cpp | 12 | ||||
-rw-r--r-- | src/resources/db/mapdb.h | 2 | ||||
-rw-r--r-- | src/resources/mapreader.cpp | 27 | ||||
-rw-r--r-- | src/resources/mapreader.h | 10 |
4 files changed, 51 insertions, 0 deletions
diff --git a/src/resources/db/mapdb.cpp b/src/resources/db/mapdb.cpp index 5e9f31cfc..48d234bb4 100644 --- a/src/resources/db/mapdb.cpp +++ b/src/resources/db/mapdb.cpp @@ -210,3 +210,15 @@ const MapInfo *MapDB::getMapAtlas(const std::string &name) info->files = &((*it2).second); return info; } + +const MapInfo *MapDB::getAtlas(const std::string &name) +{ + MapInfo *const info = new MapInfo; + + const AtlasCIter it = mAtlases.find(name); + if (it == mAtlases.end()) + return nullptr; + info->atlas = name; + info->files = &(*it).second; + return info; +} diff --git a/src/resources/db/mapdb.h b/src/resources/db/mapdb.h index dfc0f1ca1..2a71de1ce 100644 --- a/src/resources/db/mapdb.h +++ b/src/resources/db/mapdb.h @@ -55,6 +55,8 @@ namespace MapDB const MapInfo *getMapAtlas(const std::string &name) A_WARN_UNUSED; + const MapInfo *getAtlas(const std::string &name) A_WARN_UNUSED; + // Maps DB typedef std::map<std::string, std::string> Maps; typedef Maps::iterator MapIterator; diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp index 67ce2f465..8c45cfc3c 100644 --- a/src/resources/mapreader.cpp +++ b/src/resources/mapreader.cpp @@ -64,6 +64,10 @@ typedef std::map<std::string, XmlNodePtr>::iterator LayerInfoIterator; typedef std::set<XML::Document*>::iterator DocIterator; +#ifdef USE_OPENGL +Resource *MapReader::mEmptyAtlas = nullptr; +#endif // USE_OPENGL + namespace { std::map<std::string, XmlNodePtr> mKnownLayers; @@ -1235,3 +1239,26 @@ void MapReader::updateMusic(Map *const map) if (PhysFs::exists(paths.getStringValue("music").append(name).c_str())) map->setProperty("music", name); } + +#ifdef USE_OPENGL +void MapReader::loadEmptyAtlas() +{ + if (!graphicsManager.getUseAtlases()) + return; + + const MapInfo *const info = MapDB::getAtlas( + paths.getStringValue("emptyAtlasName")); + if (info) + { + mEmptyAtlas = Loader::getAtlas( + info->atlas, + *info->files); + } +} + +void MapReader::unloadEmptyAtlas() +{ + if (mEmptyAtlas) + mEmptyAtlas->decRef(); +} +#endif // USE_OPENGL diff --git a/src/resources/mapreader.h b/src/resources/mapreader.h index 37b511d03..48a9edd0c 100644 --- a/src/resources/mapreader.h +++ b/src/resources/mapreader.h @@ -30,6 +30,7 @@ class Map; class MapHeights; class Properties; +class Resource; class Tileset; /** @@ -62,6 +63,11 @@ class MapReader final static void readLayer(const XmlNodePtr node, Map *const map) A_NONNULL(2); +#ifdef USE_OPENGL + static void loadEmptyAtlas(); + static void unloadEmptyAtlas(); +#endif // USE_OPENGL + private: /** * Reads the properties element. @@ -105,6 +111,10 @@ class MapReader final static void loadLayers(const std::string &path); static void unloadTempLayers(); + +#ifdef USE_OPENGL + static Resource *mEmptyAtlas; +#endif // USE_OPENGL }; #endif // RESOURCES_MAPREADER_H |