Tools/MeshExtractor: Get rid of some memory leaks

This commit is contained in:
Subv
2012-09-29 15:38:31 -05:00
parent 1a7f0658b2
commit 987436ceea
9 changed files with 48 additions and 6 deletions

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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; }

View File

@@ -10,6 +10,7 @@ class LiquidHandler
{
public:
LiquidHandler(ADT* adt);
ADT* Source;
std::vector<Vector3> Vertices;
std::vector<Triangle<uint32> > Triangles;

View File

@@ -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;
}

View File

@@ -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();

View File

@@ -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;
}

View File

@@ -29,6 +29,7 @@ class WorldModelHandler : public ObjectDataHandler
{
public:
WorldModelHandler(ADT* adt);
~WorldModelHandler();
std::vector<Vector3> Vertices;
std::vector<Triangle<uint32> > Triangles;