Avoid std::vector::erase in particle system (erase in any sequence-independent vector is a waste as it shifts all elements to maintain element-ordering and contiguity). Replaced with swap and pop.
This commit is contained in:
@@ -710,7 +710,9 @@ void LLViewerPartSim::updateSimulation()
|
|||||||
|
|
||||||
if (mViewerPartSources[i]->isDead())
|
if (mViewerPartSources[i]->isDead())
|
||||||
{
|
{
|
||||||
mViewerPartSources.erase(mViewerPartSources.begin() + i);
|
mViewerPartSources[i] = mViewerPartSources.back();
|
||||||
|
mViewerPartSources.pop_back();
|
||||||
|
//mViewerPartSources.erase(mViewerPartSources.begin() + i);
|
||||||
count--;
|
count--;
|
||||||
i+=deldir;
|
i+=deldir;
|
||||||
}
|
}
|
||||||
@@ -747,7 +749,9 @@ void LLViewerPartSim::updateSimulation()
|
|||||||
if (!mViewerPartGroups[i]->getCount())
|
if (!mViewerPartGroups[i]->getCount())
|
||||||
{
|
{
|
||||||
delete mViewerPartGroups[i];
|
delete mViewerPartGroups[i];
|
||||||
mViewerPartGroups.erase(mViewerPartGroups.begin() + i);
|
mViewerPartGroups[i] = mViewerPartGroups.back();
|
||||||
|
mViewerPartGroups.pop_back();
|
||||||
|
//mViewerPartGroups.erase(mViewerPartGroups.begin() + i);
|
||||||
i--;
|
i--;
|
||||||
count--;
|
count--;
|
||||||
}
|
}
|
||||||
@@ -838,7 +842,12 @@ void LLViewerPartSim::cleanupRegion(LLViewerRegion *regionp)
|
|||||||
if ((*iter)->getRegion() == regionp)
|
if ((*iter)->getRegion() == regionp)
|
||||||
{
|
{
|
||||||
delete *iter;
|
delete *iter;
|
||||||
i = mViewerPartGroups.erase(iter);
|
*iter = mViewerPartGroups.back();
|
||||||
|
bool done = (i == mViewerPartGroups.end());
|
||||||
|
mViewerPartGroups.pop_back();
|
||||||
|
if(done)
|
||||||
|
break;
|
||||||
|
//i = mViewerPartGroups.erase(iter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user