diff options
author | Piotr Dziwinski <piotrdz@gmail.com> | 2013-10-13 14:44:12 +0200 |
---|---|---|
committer | Piotr Dziwinski <piotrdz@gmail.com> | 2013-10-13 14:44:12 +0200 |
commit | 9017dbbbdb1f59971b17976d7cf95fe39469d82a (patch) | |
tree | 6b791f48c9167eebaa428a432081196a89d9c389 /src/graphics/engine/terrain.cpp | |
parent | ccb63bd29e0cc7957be53cb40889496d04527d7a (diff) | |
download | colobot-9017dbbbdb1f59971b17976d7cf95fe39469d82a.tar.gz colobot-9017dbbbdb1f59971b17976d7cf95fe39469d82a.tar.bz2 colobot-9017dbbbdb1f59971b17976d7cf95fe39469d82a.zip |
Fixed CTerrain-related memory leaks
Diffstat (limited to 'src/graphics/engine/terrain.cpp')
-rw-r--r-- | src/graphics/engine/terrain.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/graphics/engine/terrain.cpp b/src/graphics/engine/terrain.cpp index 4fe3057..4b5384e 100644 --- a/src/graphics/engine/terrain.cpp +++ b/src/graphics/engine/terrain.cpp @@ -90,7 +90,7 @@ bool CTerrain::Generate(int mosaicCount, int brickCountPow2, float brickSize, std::vector<int>(dim).swap(m_textures); dim = m_mosaicCount*m_mosaicCount; - std::vector<int>(dim).swap(m_objRanks); + std::vector<int>(dim, -1).swap(m_objRanks); return true; } @@ -258,6 +258,23 @@ TerrainRes CTerrain::GetResource(const Math::Vector &p) void CTerrain::FlushRelief() { m_relief.clear(); + m_resources.clear(); + m_textures.clear(); + + for (int objRank : m_objRanks) + { + if (objRank == -1) + continue; + + int baseObjRank = m_engine->GetObjectBaseRank(objRank); + + if (baseObjRank != -1) + m_engine->DeleteBaseObject(baseObjRank); + + m_engine->DeleteObject(objRank); + } + + m_objRanks.clear(); } /** |