Fix horrible memory leak

This commit is contained in:
Jack Andersen 2016-04-05 17:28:10 -10:00
parent 234573938a
commit 3723076ae3
3 changed files with 16 additions and 7 deletions

View File

@ -40,6 +40,8 @@ struct ANCS : BigYAML
atUint32 idx; atUint32 idx;
std::string name; std::string name;
UniqueID32 cmdl; UniqueID32 cmdl;
UniqueID32 _cskrOld;
UniqueID32 _cinfOld;
AuxiliaryID32 cskr = _S("skin"); AuxiliaryID32 cskr = _S("skin");
AuxiliaryID32 cinf = {_S("layout"), _S(".blend")}; AuxiliaryID32 cinf = {_S("layout"), _S(".blend")};
@ -145,6 +147,7 @@ struct ANCS : BigYAML
std::vector<Effect> effects; std::vector<Effect> effects;
UniqueID32 cmdlOverlay; UniqueID32 cmdlOverlay;
UniqueID32 _cskrOverlayOld;
AuxiliaryID32 cskrOverlay = _S("skin"); AuxiliaryID32 cskrOverlay = _S("skin");
std::vector<atUint32> animIdxs; std::vector<atUint32> animIdxs;
@ -569,11 +572,11 @@ struct ANCS : BigYAML
DNAANCS::CharacterResInfo<UniqueID32>& chOut = out.back(); DNAANCS::CharacterResInfo<UniqueID32>& chOut = out.back();
chOut.name = ci.name; chOut.name = ci.name;
chOut.cmdl = ci.cmdl; chOut.cmdl = ci.cmdl;
chOut.cskr = ci.cskr.getBaseId(); chOut.cskr = ci._cskrOld;
chOut.cinf = ci.cinf.getBaseId(); chOut.cinf = ci._cinfOld;
if (ci.cmdlOverlay) if (ci.cmdlOverlay)
chOut.overlays.emplace_back(FOURCC('OVER'), std::make_pair(ci.cmdlOverlay, ci.cskrOverlay.getBaseId())); chOut.overlays.emplace_back(FOURCC('OVER'), std::make_pair(ci.cmdlOverlay, ci._cskrOverlayOld));
} }
} }
@ -599,8 +602,11 @@ struct ANCS : BigYAML
{ {
for (CharacterSet::CharacterInfo& character : characterSet.characters) for (CharacterSet::CharacterInfo& character : characterSet.characters)
{ {
character._cskrOld = character.cskr;
character._cinfOld = character.cinf;
character.cskr = character.cmdl; character.cskr = character.cmdl;
character.cinf = ancsId; character.cinf = ancsId;
character._cskrOverlayOld = character.cskrOverlay;
character.cskrOverlay = character.cmdlOverlay; character.cskrOverlay = character.cmdlOverlay;
} }
} }

View File

@ -41,6 +41,8 @@ struct ANCS : BigYAML
atUint32 idx; atUint32 idx;
std::string name; std::string name;
UniqueID32 cmdl; UniqueID32 cmdl;
UniqueID32 _cskrOld;
UniqueID32 _cinfOld;
AuxiliaryID32 cskr = _S("skin"); AuxiliaryID32 cskr = _S("skin");
AuxiliaryID32 cinf = {_S("layout"), _S("skin")}; AuxiliaryID32 cinf = {_S("layout"), _S("skin")};
@ -88,6 +90,7 @@ struct ANCS : BigYAML
std::vector<Effect> effects; std::vector<Effect> effects;
UniqueID32 cmdlOverlay; UniqueID32 cmdlOverlay;
UniqueID32 _cskrOverlayOld;
AuxiliaryID32 cskrOverlay = _S("skin"); AuxiliaryID32 cskrOverlay = _S("skin");
std::vector<atUint32> animIdxs; std::vector<atUint32> animIdxs;
@ -201,11 +204,11 @@ struct ANCS : BigYAML
DNAANCS::CharacterResInfo<UniqueID32>& chOut = out.back(); DNAANCS::CharacterResInfo<UniqueID32>& chOut = out.back();
chOut.name = ci.name; chOut.name = ci.name;
chOut.cmdl = ci.cmdl; chOut.cmdl = ci.cmdl;
chOut.cskr = ci.cskr.getBaseId(); chOut.cskr = ci._cskrOld;
chOut.cinf = ci.cinf.getBaseId(); chOut.cinf = ci._cinfOld;
if (ci.cmdlOverlay) if (ci.cmdlOverlay)
chOut.overlays.emplace_back(FOURCC('OVER'), std::make_pair(ci.cmdlOverlay, ci.cskrOverlay.getBaseId())); chOut.overlays.emplace_back(FOURCC('OVER'), std::make_pair(ci.cmdlOverlay, ci._cskrOverlayOld));
} }
} }

2
hecl

@ -1 +1 @@
Subproject commit de043503e5d2312ccc10876b0ac3d5ebb91bb768 Subproject commit 22d1a5a98969e82bc314e9908f7f0d677eb4a9d5