aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/tools/mesh_extractor/ChunkedData.cpp9
-rw-r--r--src/tools/mesh_extractor/ChunkedData.h1
-rw-r--r--src/tools/mesh_extractor/DoodadHandler.cpp6
-rw-r--r--src/tools/mesh_extractor/DoodadHandler.h2
-rw-r--r--src/tools/mesh_extractor/LiquidHandler.h1
-rw-r--r--src/tools/mesh_extractor/TileBuilder.cpp24
-rw-r--r--src/tools/mesh_extractor/TileBuilder.h2
-rw-r--r--src/tools/mesh_extractor/WorldModelHandler.cpp8
-rw-r--r--src/tools/mesh_extractor/WorldModelHandler.h1
9 files changed, 48 insertions, 6 deletions
diff --git a/src/tools/mesh_extractor/ChunkedData.cpp b/src/tools/mesh_extractor/ChunkedData.cpp
index 470b8b94f39..35b1bcd5af0 100644
--- a/src/tools/mesh_extractor/ChunkedData.cpp
+++ b/src/tools/mesh_extractor/ChunkedData.cpp
@@ -61,3 +61,12 @@ Chunk* ChunkedData::GetChunkByName( std::string name )
return Chunks[i];
return NULL;
}
+
+ChunkedData::~ChunkedData()
+{
+ for (std::vector<Chunk*>::iterator itr = Chunks.begin(); itr != Chunks.end(); ++itr)
+ delete *itr;
+
+ Chunks.clear();
+ fclose(Stream);
+}
diff --git a/src/tools/mesh_extractor/ChunkedData.h b/src/tools/mesh_extractor/ChunkedData.h
index 6e102828222..d36d0868859 100644
--- a/src/tools/mesh_extractor/ChunkedData.h
+++ b/src/tools/mesh_extractor/ChunkedData.h
@@ -9,6 +9,7 @@ class ChunkedData
public:
ChunkedData(FILE* stream, uint32 maxLength, uint32 chunksHint = 300);
ChunkedData(std::string file, uint32 chunksHint = 300);
+ ~ChunkedData();
int GetFirstIndex(std::string name);
Chunk* GetChunkByName(std::string name);
diff --git a/src/tools/mesh_extractor/DoodadHandler.cpp b/src/tools/mesh_extractor/DoodadHandler.cpp
index 28bb9da5f21..6604aebe73a 100644
--- a/src/tools/mesh_extractor/DoodadHandler.cpp
+++ b/src/tools/mesh_extractor/DoodadHandler.cpp
@@ -99,3 +99,9 @@ void DoodadHandler::InsertModelGeometry(const DoodadDefinition& def, Model* mode
for (std::vector<Triangle<uint16> >::iterator itr = model->Triangles.begin(); itr != model->Triangles.end(); ++itr)
Triangles.push_back(Triangle<uint32>(Constants::TRIANGLE_TYPE_DOODAD, itr->V0 + vertOffset, itr->V1 + vertOffset, itr->V2 + vertOffset));
}
+
+DoodadHandler::~DoodadHandler()
+{
+ delete _definitions;
+ delete _paths;
+}
diff --git a/src/tools/mesh_extractor/DoodadHandler.h b/src/tools/mesh_extractor/DoodadHandler.h
index aa7e3cac20d..2e00696f7e5 100644
--- a/src/tools/mesh_extractor/DoodadHandler.h
+++ b/src/tools/mesh_extractor/DoodadHandler.h
@@ -32,6 +32,8 @@ class DoodadHandler : public ObjectDataHandler
{
public:
DoodadHandler(ADT* adt);
+ ~DoodadHandler();
+
std::vector<Vector3> Vertices;
std::vector<Triangle<uint32> > Triangles;
bool IsSane() { return _definitions && _paths; }
diff --git a/src/tools/mesh_extractor/LiquidHandler.h b/src/tools/mesh_extractor/LiquidHandler.h
index 138b2da2ad9..6e8d0081adb 100644
--- a/src/tools/mesh_extractor/LiquidHandler.h
+++ b/src/tools/mesh_extractor/LiquidHandler.h
@@ -10,6 +10,7 @@ class LiquidHandler
{
public:
LiquidHandler(ADT* adt);
+
ADT* Source;
std::vector<Vector3> Vertices;
std::vector<Triangle<uint32> > Triangles;
diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp
index 926d2591f1a..5c2c4faab80 100644
--- a/src/tools/mesh_extractor/TileBuilder.cpp
+++ b/src/tools/mesh_extractor/TileBuilder.cpp
@@ -225,16 +225,30 @@ uint8* TileBuilder::Build()
uint8* navData;
printf("[%02i,%02i] Creating the navmesh!\n", X, Y);
bool result = dtCreateNavMeshData(&params, &navData, &navDataSize);
- if (result)
+
+ // Free some memory
+ rcFreePolyMesh(pmesh);
+ rcFreePolyMeshDetail(dmesh);
+ delete tilebMax;
+ delete tilebMin;
+ delete areas;
+ delete triangles;
+ delete vertices;
+ delete bbMax;
+ delete bbMin;
+
+ if (result)
{
printf("[%02i,%02i] NavMesh created, size %i!\n", X, Y, navDataSize);
DataSize = navDataSize;
- rcFreePolyMesh(pmesh);
- rcFreePolyMeshDetail(dmesh);
return navData;
}
- rcFreePolyMesh(pmesh);
- rcFreePolyMeshDetail(dmesh);
return NULL;
}
+
+TileBuilder::~TileBuilder()
+{
+ delete Context;
+ delete _Geometry;
+}
diff --git a/src/tools/mesh_extractor/TileBuilder.h b/src/tools/mesh_extractor/TileBuilder.h
index f91a732f70c..e56b926e5a5 100644
--- a/src/tools/mesh_extractor/TileBuilder.h
+++ b/src/tools/mesh_extractor/TileBuilder.h
@@ -11,6 +11,8 @@ class TileBuilder
{
public:
TileBuilder(std::string world, int x, int y, uint32 mapId);
+ ~TileBuilder();
+
void CalculateTileBounds(float*& bmin, float*& bmax);
uint8* Build();
diff --git a/src/tools/mesh_extractor/WorldModelHandler.cpp b/src/tools/mesh_extractor/WorldModelHandler.cpp
index 636b06f6f73..edad6d1b6d8 100644
--- a/src/tools/mesh_extractor/WorldModelHandler.cpp
+++ b/src/tools/mesh_extractor/WorldModelHandler.cpp
@@ -24,7 +24,7 @@ WorldModelDefinition WorldModelDefinition::Read( FILE* file )
}
-WorldModelHandler::WorldModelHandler( ADT* adt ) : ObjectDataHandler(adt)
+WorldModelHandler::WorldModelHandler( ADT* adt ) : ObjectDataHandler(adt), _definitions(NULL), _paths(NULL)
{
if (!adt->HasObjectData)
return;
@@ -190,3 +190,9 @@ void WorldModelHandler::ReadModelPaths()
_paths->push_back(Utils::ReadString(dataStream));
}
}
+
+WorldModelHandler::~WorldModelHandler()
+{
+ delete _definitions;
+ delete _paths;
+}
diff --git a/src/tools/mesh_extractor/WorldModelHandler.h b/src/tools/mesh_extractor/WorldModelHandler.h
index daf0713ecd2..df5e3764eb5 100644
--- a/src/tools/mesh_extractor/WorldModelHandler.h
+++ b/src/tools/mesh_extractor/WorldModelHandler.h
@@ -29,6 +29,7 @@ class WorldModelHandler : public ObjectDataHandler
{
public:
WorldModelHandler(ADT* adt);
+ ~WorldModelHandler();
std::vector<Vector3> Vertices;
std::vector<Triangle<uint32> > Triangles;