summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/lltoolmorph.cpp11
-rw-r--r--indra/newview/llvoavatar.cpp10
2 files changed, 11 insertions, 10 deletions
diff --git a/indra/newview/lltoolmorph.cpp b/indra/newview/lltoolmorph.cpp
index a545d32d12..11dd26309e 100644
--- a/indra/newview/lltoolmorph.cpp
+++ b/indra/newview/lltoolmorph.cpp
@@ -192,17 +192,20 @@ void LLVisualParamHint::preRender(bool clear_depth)
gAgentAvatarp->updateGeometry(gAgentAvatarp->mDrawable);
gAgentAvatarp->updateLOD();
- if (gAgentAvatarp->mDrawable->isState(LLDrawable::REBUILD_GEOMETRY))
+ if (gAgentAvatarp->mDrawable->isState(LLDrawable::REBUILD_GEOMETRY)
+ || gAgentAvatarp->mDirtyMesh > 0)
{
- LL_WARNS_ONCE("ParamHint") << "preRender: clearing REBUILD_GEOMETRY after updateGeometry/updateLOD"
+ // updateLOD marks meshes for an update.
+ LL_DEBUGS("ParamHint") << "preRender: updateMeshData"
<< " param=" << mVisualParam->getName()
<< " dirtyMesh=" << gAgentAvatarp->mDirtyMesh
+ << " rebuildGeom=" << gAgentAvatarp->mDrawable->isState(LLDrawable::REBUILD_GEOMETRY)
<< LL_ENDL;
- // Clear REBUILD_GEOMETRY so that renderSkinned inside generateImpostor
+ // Clear states and force update so that renderSkinned inside generateImpostor
// does not re-run updateMeshData() with a partially consistent mesh state,
// which would reassign mFace pointers on some meshes while others are
// mid-draw with stale vertex offsets.
- gAgentAvatarp->mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY);
+ gAgentAvatarp->updateMeshData();
}
}
else
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 89ee5ede2a..78d9c1fa4c 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2583,6 +2583,10 @@ void LLVOAvatar::updateMeshData()
f_num++ ;
}
}
+
+ mDirtyMesh = 0;
+ mNeedsSkin = true;
+ mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY);
}
}
@@ -5217,9 +5221,6 @@ U32 LLVOAvatar::renderSkinned()
if (needs_rebuild || mDirtyMesh >= 2 || mVisibilityRank <= 4)
{
updateMeshData();
- mDirtyMesh = 0;
- mNeedsSkin = true;
- mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY);
}
}
@@ -10803,9 +10804,6 @@ bool LLVOAvatar::updateLOD()
if (mDirtyMesh >= 2 || mDrawable->isState(LLDrawable::REBUILD_GEOMETRY))
{ //LOD changed or new mesh created, allocate new vertex buffer if needed
updateMeshData();
- mDirtyMesh = 0;
- mNeedsSkin = true;
- mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY);
}
updateVisibility();