Sorry for the basic question… but I cannot figure out.
In 1.7 release source code sample 20_HugeObjectCount, I add following code in HugeObjectCount::HandleUpdate() to remove and add nodes every 3 seconds at runtime.
My environment is win7+vs 2017 community +x64
{//test
static float accTime = 0.0f;
accTime += timeStep;
if (accTime >= 3.0f)
{
accTime = 0.0f;
ResourceCache* cache = GetSubsystem<ResourceCache>();
if (!useGroups_)
{
/*remove boxes*/
while( boxNodes_.Size())
{
SharedPtr<Node> n = boxNodes_.Back();
boxNodes_.Pop();
n->Remove();
}
/*add back boxes*/
// Create individual box StaticModels in the scene
for (int y = -125; y < 125; ++y)
{
for (int x = -125; x < 125; ++x)
{
Node* boxNode = scene_->CreateChild("Box");
boxNode->SetPosition(Vector3(x * 0.3f, 0.0f, y * 0.3f));
boxNode->SetScale(0.25f);
StaticModel* boxObject = boxNode->CreateComponent<StaticModel>();
boxObject->SetModel(cache->GetResource<Model>("Models/Box.mdl"));
boxNodes_.Push(SharedPtr<Node>(boxNode));
}
}
}
else
{
/*remove boxes*/
const Vector<SharedPtr<Node> >& boxgrp = scene_->GetChildren();
for (unsigned ii = 0; ii < boxgrp.Size(); ii++)
{
StaticModelGroup * lastGroup = boxgrp[ii]->GetComponent<StaticModelGroup>();
if (lastGroup != NULL)
lastGroup->RemoveAllInstanceNodes();
}
while( boxNodes_.Size())
{
SharedPtr<Node> n = boxNodes_.Back();
n->Remove();
boxNodes_.Pop();
}
/*add back boxes*/
unsigned ii = 0;
StaticModelGroup * lastGroup = boxgrp[ii]->GetComponent<StaticModelGroup>();
for (int y = -125; y < 125; ++y)
{
for (int x = -125; x < 125; ++x)
{
if (lastGroup == 0 || lastGroup->GetNumInstanceNodes() >= 25 * 25)
{
for (ii = ii + 1;; ii++)
{
StaticModelGroup * next = boxgrp[ii]->GetComponent<StaticModelGroup>();
if (next != NULL)
{
lastGroup = next;
break;
}
}
}
Node* boxNode = scene_->CreateChild("Box");
boxNode->SetPosition(Vector3(x * 0.3f, 0.0f, y * 0.3f));
boxNode->SetScale(0.25f);
boxNodes_.Push(SharedPtr<Node>(boxNode));
lastGroup->AddInstanceNode(boxNode);
}
}
}
}
}
Basically it uses node->remove() to remove node.
But I saw memory usage monitor in visual studio 2017 just went larger and larger no matter use of staticModelGroup or not.
Do I write something wrong?
Thanks!