summaryrefslogtreecommitdiff
path: root/indra/newview/lldrawable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/lldrawable.cpp')
-rw-r--r--indra/newview/lldrawable.cpp59
1 files changed, 34 insertions, 25 deletions
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index 4eda2b92b3..7cfb58e544 100644
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -254,11 +254,17 @@ S32 LLDrawable::findReferences(LLDrawable *drawablep)
return count;
}
+static LLFastTimer::DeclareTimer FTM_ALLOCATE_FACE("Allocate Face", true);
+
LLFace* LLDrawable::addFace(LLFacePool *poolp, LLViewerTexture *texturep)
{
- LLMemType mt(LLMemType::MTYPE_DRAWABLE);
- LLFace *face = new LLFace(this, mVObjp);
+ LLFace *face;
+ {
+ LLFastTimer t(FTM_ALLOCATE_FACE);
+ face = new LLFace(this, mVObjp);
+ }
+
if (!face) llerrs << "Allocating new Face: " << mFaces.size() << llendl;
if (face)
@@ -280,10 +286,12 @@ LLFace* LLDrawable::addFace(LLFacePool *poolp, LLViewerTexture *texturep)
LLFace* LLDrawable::addFace(const LLTextureEntry *te, LLViewerTexture *texturep)
{
- LLMemType mt(LLMemType::MTYPE_DRAWABLE);
-
LLFace *face;
- face = new LLFace(this, mVObjp);
+
+ {
+ LLFastTimer t(FTM_ALLOCATE_FACE);
+ face = new LLFace(this, mVObjp);
+ }
face->setTEOffset(mFaces.size());
face->setTexture(texturep);
@@ -624,7 +632,9 @@ BOOL LLDrawable::updateMove()
{
return FALSE;
}
-
+
+ makeActive();
+
BOOL done;
if (isState(MOVE_UNDAMPED))
@@ -633,7 +643,6 @@ BOOL LLDrawable::updateMove()
}
else
{
- makeActive();
done = updateMoveDamped();
}
return done;
@@ -763,8 +772,6 @@ void LLDrawable::updateDistance(LLCamera& camera, bool force_update)
void LLDrawable::updateTexture()
{
- LLMemType mt(LLMemType::MTYPE_DRAWABLE);
-
if (isDead())
{
llwarns << "Dead drawable updating texture!" << llendl;
@@ -951,6 +958,12 @@ LLSpatialGroup* LLDrawable::getSpatialGroup() const
void LLDrawable::setSpatialGroup(LLSpatialGroup *groupp)
{
+ //precondition: mSpatialGroupp MUST be null or DEAD or mSpatialGroupp MUST NOT contain this
+ llassert(!mSpatialGroupp || mSpatialGroupp->isDead() || !mSpatialGroupp->hasElement(this));
+
+ //precondition: groupp MUST be null or groupp MUST contain this
+ llassert(!groupp || groupp->hasElement(this));
+
/*if (mSpatialGroupp && (groupp != mSpatialGroupp))
{
mSpatialGroupp->setState(LLSpatialGroup::GEOM_DIRTY);
@@ -970,9 +983,12 @@ void LLDrawable::setSpatialGroup(LLSpatialGroup *groupp)
}
}
- mSpatialGroupp = groupp;
+ //postcondition: if next group is NULL, previous group must be dead OR NULL OR binIndex must be -1
+ //postcondition: if next group is NOT NULL, binIndex must not be -1
+ llassert(groupp == NULL ? (mSpatialGroupp == NULL || mSpatialGroupp->isDead()) || getBinIndex() == -1 :
+ getBinIndex() != -1);
- llassert((mSpatialGroupp == NULL) ? getBinIndex() == -1 : getBinIndex() != -1);
+ mSpatialGroupp = groupp;
}
LLSpatialPartition* LLDrawable::getSpatialPartition()
@@ -1400,7 +1416,7 @@ void LLSpatialBridge::updateDistance(LLCamera& camera_in, bool force_update)
markDead();
return;
}
-
+
if (gShiftFrame)
{
return;
@@ -1483,13 +1499,11 @@ void LLSpatialBridge::cleanupReferences()
LLDrawable::cleanupReferences();
if (mDrawable)
{
- LLSpatialGroup* group = mDrawable->getSpatialGroup();
- if (group)
- {
- group->mOctreeNode->remove(mDrawable);
- mDrawable->setSpatialGroup(NULL);
- }
+ /*
+ DON'T DO THIS -- this should happen through octree destruction
+
+ mDrawable->setSpatialGroup(NULL);
if (mDrawable->getVObj())
{
LLViewerObject::const_child_list_t& child_list = mDrawable->getVObj()->getChildren();
@@ -1500,15 +1514,10 @@ void LLSpatialBridge::cleanupReferences()
LLDrawable* drawable = child->mDrawable;
if (drawable)
{
- LLSpatialGroup* group = drawable->getSpatialGroup();
- if (group)
- {
- group->mOctreeNode->remove(drawable);
- drawable->setSpatialGroup(NULL);
- }
+ drawable->setSpatialGroup(NULL);
}
}
- }
+ }*/
LLDrawable* drawablep = mDrawable;
mDrawable = NULL;