trackgen: make global variable GroupRoot local

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@8496 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: 653fb615656e65a3da03d4dda8abc36762a43a85
Former-commit-id: 7c604688871e2e23cdad12eb54118acefbea2e33
This commit is contained in:
iobyte 2022-09-12 17:59:20 +00:00
parent fb1b6f9fa0
commit 966d295429

View file

@ -48,8 +48,6 @@
static char path[1024]; static char path[1024];
static char buf[1024]; static char buf[1024];
static ssgRoot *GroupRoot = nullptr;
struct group struct group
{ {
ssgBranch *br; ssgBranch *br;
@ -98,7 +96,7 @@ ApplyTransform(sgMat4 m, ssgBase *node)
{ {
((ssgLeaf *)node)->transform(m); ((ssgLeaf *)node)->transform(m);
} }
else else if (node->isAKindOf(ssgTypeBranch()))
{ {
ssgBranch *br = (ssgBranch *)node; ssgBranch *br = (ssgBranch *)node;
@ -247,7 +245,7 @@ AddToRoot(ssgRoot *Root, ssgEntity *node)
{ {
Root->addKid(node); Root->addKid(node);
} }
else else if (node->isAKindOf(ssgTypeBranch()))
{ {
ssgBranch *br = (ssgBranch *)node; ssgBranch *br = (ssgBranch *)node;
@ -480,7 +478,7 @@ ssgSaveACInner (ssgEntity *ent, FILE *save_fd)
/* insert one leaf in group */ /* insert one leaf in group */
static void static void
InsertInGroup(ssgEntity *ent) InsertInGroup(ssgEntity *ent, ssgRoot* GroupRoot)
{ {
int grIdx; int grIdx;
struct group *curGrp; struct group *curGrp;
@ -505,7 +503,7 @@ InsertInGroup(ssgEntity *ent)
/* insert leaves in groups */ /* insert leaves in groups */
static void static void
InsertInner(ssgEntity *ent) InsertInner(ssgEntity *ent, ssgRoot* GroupRoot)
{ {
/* WARNING - RECURSIVE! */ /* WARNING - RECURSIVE! */
@ -515,28 +513,21 @@ InsertInner(ssgEntity *ent)
for (int i = 0; i < br->getNumKids (); i++) for (int i = 0; i < br->getNumKids (); i++)
{ {
InsertInner(br->getKid (i)); InsertInner(br->getKid (i), GroupRoot);
} }
return; return;
} }
InsertInGroup (ent); InsertInGroup (ent, GroupRoot);
} }
static void static void
Group(tTrack *track, void *TrackHandle, ssgRoot *Root) Group(tTrack *track, void *TrackHandle, ssgRoot *Root, ssgRoot *GroupRoot)
{ {
tdble Margin; tdble Margin;
if (GroupRoot)
{
delete (GroupRoot);
}
GroupRoot = new ssgRoot();
Margin = GfParmGetNum(TrackHandle, TRK_SECT_TERRAIN, TRK_ATT_BMARGIN, nullptr, 100.0); Margin = GfParmGetNum(TrackHandle, TRK_SECT_TERRAIN, TRK_ATT_BMARGIN, nullptr, 100.0);
GroupSize = GfParmGetNum(TrackHandle, TRK_SECT_TERRAIN, TRK_ATT_GRPSZ, nullptr, 100.0); GroupSize = GfParmGetNum(TrackHandle, TRK_SECT_TERRAIN, TRK_ATT_GRPSZ, nullptr, 100.0);
XGroupOffset = track->min.x - Margin; XGroupOffset = track->min.x - Margin;
@ -553,7 +544,7 @@ Group(tTrack *track, void *TrackHandle, ssgRoot *Root)
Groups = (struct group *)calloc(GroupNb, sizeof (struct group)); Groups = (struct group *)calloc(GroupNb, sizeof (struct group));
InsertInner(Root); InsertInner(Root, GroupRoot);
} }
@ -631,7 +622,9 @@ GenerateObjects(tTrack *track, void *TrackHandle, void *CfgHandle, FILE *save_fd
} }
} }
Group(track, TrackHandle, Root); ssgRoot *GroupRoot = new ssgRoot();
Group(track, TrackHandle, Root, GroupRoot);
const char *extName = GfParmGetStr(CfgHandle, "Files", "object", "obj"); const char *extName = GfParmGetStr(CfgHandle, "Files", "object", "obj");
sprintf(buf, "%s-%s-%d.ac", outputFile.c_str(), extName, index); sprintf(buf, "%s-%s-%d.ac", outputFile.c_str(), extName, index);
@ -644,7 +637,8 @@ GenerateObjects(tTrack *track, void *TrackHandle, void *CfgHandle, FILE *save_fd
ssgSaveACInner(GroupRoot, save_fd); ssgSaveACInner(GroupRoot, save_fd);
} }
delete (Root); delete Root;
delete GroupRoot;
} while (!GfParmListSeekNext(TrackHandle, path)); } while (!GfParmListSeekNext(TrackHandle, path));
delete TrackRoot; delete TrackRoot;