diff options
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/lltoolmorph.cpp | 11 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.cpp | 10 |
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(); |
