summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/defaults.cpp1
-rw-r--r--src/game.cpp8
-rw-r--r--src/resources/db/mapdb.cpp12
-rw-r--r--src/resources/db/mapdb.h2
-rw-r--r--src/resources/mapreader.cpp27
-rw-r--r--src/resources/mapreader.h10
6 files changed, 60 insertions, 0 deletions
diff --git a/src/defaults.cpp b/src/defaults.cpp
index bb6d7412e..f235d919e 100644
--- a/src/defaults.cpp
+++ b/src/defaults.cpp
@@ -639,6 +639,7 @@ DefaultsData* getPathsDefaults()
AddDEF("gmCommandSymbol", "@");
AddDEF("gmCharCommandSymbol", "#");
AddDEF("linkCommandSymbol", "=");
+ AddDEF("emptyAtlasName", "ignored");
AddDEF("palettesDir", "");
AddDEF("defaultPaletteFile", "palette.gpl");
diff --git a/src/game.cpp b/src/game.cpp
index 9906b8cf1..e6da61255 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -419,6 +419,10 @@ Game::Game() :
if (windowContainer)
windowContainer->add(windowMenu);
+#ifdef USE_OPENGL
+ MapReader::loadEmptyAtlas();
+#endif
+
initEngines();
chatWindow->postConnection();
@@ -450,6 +454,10 @@ Game::Game() :
Game::~Game()
{
+#ifdef USE_OPENGL
+ MapReader::unloadEmptyAtlas();
+#endif
+
settings.disableLoggingInGame = false;
touchManager.setInGame(false);
config.write();
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