SL-704, SL-759 - support for impostoring of animated objects, comment and code cleanup
parent
5c7f27562d
commit
0d2d6b42ba
|
|
@ -51,7 +51,7 @@
|
|||
<key>tags</key>
|
||||
<array>
|
||||
<!-- sample entry for debugging specific items
|
||||
<string>AXON</string>
|
||||
<string>AnimatedObjects</string>
|
||||
<string>Avatar</string>
|
||||
<string>Inventory</string>
|
||||
<string>SceneLoadTiming</string>
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ LLControlAvatar::~LLControlAvatar()
|
|||
// virtual
|
||||
void LLControlAvatar::initInstance()
|
||||
{
|
||||
// AXON - potential optimizations here: avoid creating system
|
||||
// Potential optimizations here: avoid creating system
|
||||
// avatar mesh content since it's not used. For now we just clean some
|
||||
// things up after the fact in releaseMeshData().
|
||||
LLVOAvatar::initInstance();
|
||||
|
|
@ -280,10 +280,11 @@ void LLControlAvatar::updateDebugText()
|
|||
type_string += "-";
|
||||
}
|
||||
}
|
||||
addDebugText(llformat("CAV obj %d anim %d active %s",
|
||||
total_linkset_count, animated_volume_count, active_string.c_str()));
|
||||
addDebugText(llformat("CAV obj %d anim %d active %s impost %d",
|
||||
total_linkset_count, animated_volume_count, active_string.c_str(), (S32) isImpostor()));
|
||||
addDebugText(llformat("types %s lods %s", type_string.c_str(), lod_string.c_str()));
|
||||
addDebugText(llformat("tris %d verts %d", total_tris, total_verts));
|
||||
addDebugText(llformat("pxarea %s", LLStringOps::getReadableNumber(getPixelArea()).c_str()));
|
||||
std::string region_name = "no region";
|
||||
if (mRootVolp->getRegion())
|
||||
{
|
||||
|
|
@ -335,7 +336,7 @@ void LLControlAvatar::updateAnimations()
|
|||
{
|
||||
if (!mRootVolp)
|
||||
{
|
||||
LL_WARNS_ONCE("AXON") << "No root vol" << LL_ENDL;
|
||||
LL_WARNS_ONCE("AnimatedObjects") << "No root vol" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -347,9 +347,14 @@ void LLPanelObject::getState( )
|
|||
// it's not entirely clear what the motivation is to have 3
|
||||
// different rules for enablement. At least the difference between
|
||||
// move and rotate looks like just a parens error, have updated accordingly.
|
||||
BOOL enable_move = objectp->permMove() && !objectp->isPermanentEnforced() && ((root_objectp == NULL) || !root_objectp->isPermanentEnforced()) && ((objectp->permModify() && !objectp->isAttachment()) || !gSavedSettings.getBOOL("EditLinkedParts"));
|
||||
BOOL enable_scale = objectp->permMove() && !objectp->isPermanentEnforced() && ((root_objectp == NULL) || !root_objectp->isPermanentEnforced()) && objectp->permModify();
|
||||
BOOL enable_rotate = objectp->permMove() && !objectp->isPermanentEnforced() && ((root_objectp == NULL) || !root_objectp->isPermanentEnforced()) && ((objectp->permModify() && !objectp->isAttachment()) || !gSavedSettings.getBOOL("EditLinkedParts"));
|
||||
BOOL enable_move = objectp->permMove() && !objectp->isPermanentEnforced() &&
|
||||
((root_objectp == NULL) || !root_objectp->isPermanentEnforced()) &&
|
||||
((objectp->permModify() && !objectp->isAttachment()) || !gSavedSettings.getBOOL("EditLinkedParts"));
|
||||
BOOL enable_scale = objectp->permMove() && !objectp->isPermanentEnforced() &&
|
||||
((root_objectp == NULL) || !root_objectp->isPermanentEnforced()) && objectp->permModify();
|
||||
BOOL enable_rotate = objectp->permMove() && !objectp->isPermanentEnforced() &&
|
||||
((root_objectp == NULL) || !root_objectp->isPermanentEnforced()) &&
|
||||
((objectp->permModify() && !objectp->isAttachment()) || !gSavedSettings.getBOOL("EditLinkedParts"));
|
||||
|
||||
S32 selected_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
|
||||
BOOL single_volume = (LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME ))
|
||||
|
|
|
|||
|
|
@ -5086,32 +5086,32 @@ void process_object_animation(LLMessageSystem *mesgsys, void **user_data)
|
|||
LLViewerObject *objp = gObjectList.findObject(uuid);
|
||||
if (!objp)
|
||||
{
|
||||
LL_WARNS("Messaging") << "AXON Received animation state for unknown object" << uuid << LL_ENDL;
|
||||
LL_WARNS("Messaging") << "Received animation state for unknown object" << uuid << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
LLVOVolume *volp = dynamic_cast<LLVOVolume*>(objp);
|
||||
if (!volp)
|
||||
{
|
||||
LL_WARNS("Messaging") << "AXON Received animation state for non-volume object" << uuid << LL_ENDL;
|
||||
LL_WARNS("Messaging") << "Received animation state for non-volume object" << uuid << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!volp->isAnimatedObject())
|
||||
{
|
||||
LL_WARNS("Messaging") << "AXON Received animation state for non-animated object" << uuid << LL_ENDL;
|
||||
LL_WARNS("Messaging") << "Received animation state for non-animated object" << uuid << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
LLControlAvatar *avatarp = volp->getControlAvatar();
|
||||
if (!avatarp)
|
||||
{
|
||||
LL_WARNS("Messaging") << "AXON no control avatar, ignoring" << LL_ENDL;
|
||||
LL_WARNS("Messaging") << "Received animation request for object with no control avatar, ignoring" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
S32 num_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_AnimationList);
|
||||
LL_DEBUGS("AXON") << "processing object animation requests, num_blocks " << num_blocks << LL_ENDL;
|
||||
LL_DEBUGS("AnimatedObjects") << "processing object animation requests, num_blocks " << num_blocks << LL_ENDL;
|
||||
|
||||
#if 1
|
||||
// Here we go into skinned mode once, the first time we get an
|
||||
|
|
@ -5156,8 +5156,8 @@ void process_object_animation(LLMessageSystem *mesgsys, void **user_data)
|
|||
mesgsys->getUUIDFast(_PREHASH_AnimationList, _PREHASH_AnimID, animation_id, i);
|
||||
mesgsys->getS32Fast(_PREHASH_AnimationList, _PREHASH_AnimSequenceID, anim_sequence_id, i);
|
||||
volp->mObjectSignaledAnimations[animation_id] = anim_sequence_id;
|
||||
LL_DEBUGS("AXON") << "got object animation request for object "
|
||||
<< uuid << " animation id " << animation_id << LL_ENDL;
|
||||
LL_DEBUGS("AnimatedObjects") << "got object animation request for object "
|
||||
<< uuid << " animation id " << animation_id << LL_ENDL;
|
||||
}
|
||||
|
||||
avatarp->updateAnimations();
|
||||
|
|
|
|||
|
|
@ -3461,6 +3461,10 @@ void LLVOAvatar::updateDebugText()
|
|||
LLVector3 pelvis_pos = mPelvisp->getPosition();
|
||||
debug_line += llformat(" rp %.3f pp %.3f", root_pos[2], pelvis_pos[2]);
|
||||
|
||||
S32 is_visible = (S32) isVisible();
|
||||
S32 is_m_visible = (S32) mVisible;
|
||||
debug_line += llformat(" v %d/%d", is_visible, is_m_visible);
|
||||
|
||||
addDebugText(debug_line);
|
||||
}
|
||||
|
||||
|
|
@ -3681,7 +3685,7 @@ void LLVOAvatar::computeUpdatePeriod()
|
|||
if (mDrawable.notNull()
|
||||
&& isVisible()
|
||||
&& (!isSelf() || visually_muted)
|
||||
&& !mIsDummy
|
||||
&& (!mIsDummy || isControlAvatar())
|
||||
&& sUseImpostors
|
||||
&& !mNeedsAnimUpdate
|
||||
&& !sFreezeCounter)
|
||||
|
|
@ -3900,7 +3904,7 @@ void LLVOAvatar::updateTimeStep()
|
|||
bool is_pure_dummy = mIsDummy && !isControlAvatar();
|
||||
if (!isSelf() && !is_pure_dummy) // ie, non-self avatars, and animated objects will be affected.
|
||||
{
|
||||
// AXON note that sInstances counts animated objects and
|
||||
// Note that sInstances counts animated objects and
|
||||
// standard avatars in the same bucket. Is this desirable?
|
||||
F32 time_quantum = clamp_rescale((F32)sInstances.size(), 10.f, 35.f, 0.f, 0.25f);
|
||||
F32 pixel_area_scale = clamp_rescale(mPixelArea, 100, 5000, 1.f, 0.f);
|
||||
|
|
@ -6162,7 +6166,7 @@ F32 LLVOAvatar::getTimeDilation()
|
|||
F32 LLVOAvatar::getPixelArea() const
|
||||
{
|
||||
// AXON UPDATE FOR CONTROL AVATARS
|
||||
if (mIsDummy)
|
||||
if (mIsDummy && !isControlAvatar())
|
||||
{
|
||||
return 100000.f;
|
||||
}
|
||||
|
|
@ -7138,9 +7142,14 @@ void LLVOAvatar::onGlobalColorChanged(const LLTexGlobalColor* global_color)
|
|||
updateMeshTextures();
|
||||
}
|
||||
|
||||
// FIXME: We have an mVisible member, set in updateVisibility(), but this
|
||||
// function doesn't return it! isVisible() and mVisible are used
|
||||
// different places for different purposes. mVisible seems to be more
|
||||
// related to whether the actual avatar mesh is shown, and isVisible()
|
||||
// to whether anything about the avatar is displayed in the scene.
|
||||
// Maybe better naming could make this clearer?
|
||||
BOOL LLVOAvatar::isVisible() const
|
||||
{
|
||||
// AXON should we flag control avs as invisible?
|
||||
return mDrawable.notNull()
|
||||
&& (!mOrphaned || isSelf())
|
||||
&& (mDrawable->isVisible() || mIsDummy);
|
||||
|
|
|
|||
|
|
@ -1354,7 +1354,7 @@ BOOL LLVOVolume::updateLOD()
|
|||
{
|
||||
std::string vobj_name = llformat("Vol%u", (U32) this);
|
||||
F32 est_tris = getEstTrianglesMax();
|
||||
LL_DEBUGS("AXONLinkset") << vobj_name << " updateLOD to " << getLOD() << ", tris " << est_tris << LL_ENDL;
|
||||
LL_DEBUGS("AnimatedObjectsLinkset") << vobj_name << " updateLOD to " << getLOD() << ", tris " << est_tris << LL_ENDL;
|
||||
}
|
||||
#endif
|
||||
gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, FALSE);
|
||||
|
|
@ -3396,10 +3396,10 @@ void LLVOVolume::setExtendedMeshFlags(U32 flags)
|
|||
param_block->setFlags(flags);
|
||||
}
|
||||
parameterChanged(LLNetworkData::PARAMS_EXTENDED_MESH, true);
|
||||
LL_DEBUGS("AXON") << (U32) this
|
||||
<< " new flags " << flags << " curr_flags " << curr_flags
|
||||
<< ", calling onSetExtendedMeshFlags()"
|
||||
<< LL_ENDL;
|
||||
LL_DEBUGS("AnimatedObjects") << (U32) this
|
||||
<< " new flags " << flags << " curr_flags " << curr_flags
|
||||
<< ", calling onSetExtendedMeshFlags()"
|
||||
<< LL_ENDL;
|
||||
onSetExtendedMeshFlags(flags);
|
||||
}
|
||||
}
|
||||
|
|
@ -3440,13 +3440,12 @@ void LLVOVolume::updateAnimatedObjectStateOnReparent(LLViewerObject *old_parent,
|
|||
{
|
||||
LLVOVolume *old_volp = dynamic_cast<LLVOVolume*>(old_parent);
|
||||
|
||||
// AXON - depending on whether animated objects can be attached,
|
||||
// we may want to include or remove the isAvatar() check.
|
||||
// BUG??
|
||||
if (new_parent && !new_parent->isAvatar())
|
||||
{
|
||||
if (mControlAvatar.notNull())
|
||||
{
|
||||
// Here an animated object is being made the child of some
|
||||
// other prim. Should remove the control av from the child.
|
||||
LLControlAvatar *av = mControlAvatar;
|
||||
mControlAvatar = NULL;
|
||||
av->markForDeath();
|
||||
|
|
@ -3925,17 +3924,14 @@ void LLVOVolume::parameterChanged(U16 param_type, LLNetworkData* data, BOOL in_u
|
|||
{
|
||||
U32 extended_mesh_flags = getExtendedMeshFlags();
|
||||
bool enabled = (extended_mesh_flags & LLExtendedMeshParams::ANIMATED_MESH_ENABLED_FLAG);
|
||||
// AXON This is kind of a guess. Better if we could compare
|
||||
// the before and after flags directly. What about cases where
|
||||
// there's no control avatar for optimization reasons?
|
||||
bool was_enabled = (getControlAvatar() != NULL);
|
||||
if (enabled != was_enabled)
|
||||
{
|
||||
LL_DEBUGS("AXON") << (U32) this
|
||||
<< " calling onSetExtendedMeshFlags, enabled " << (U32) enabled
|
||||
<< " was_enabled " << (U32) was_enabled
|
||||
<< " local_origin " << (U32) local_origin
|
||||
<< LL_ENDL;
|
||||
LL_DEBUGS("AnimatedObjects") << (U32) this
|
||||
<< " calling onSetExtendedMeshFlags, enabled " << (U32) enabled
|
||||
<< " was_enabled " << (U32) was_enabled
|
||||
<< " local_origin " << (U32) local_origin
|
||||
<< LL_ENDL;
|
||||
onSetExtendedMeshFlags(extended_mesh_flags);
|
||||
}
|
||||
}
|
||||
|
|
@ -4080,7 +4076,7 @@ void LLVOVolume::markForUpdate(BOOL priority)
|
|||
{
|
||||
std::string vobj_name = llformat("Vol%u", (U32) this);
|
||||
F32 est_tris = getEstTrianglesMax();
|
||||
LL_DEBUGS("AXONLinkset") << vobj_name << " markForUpdate, tris " << est_tris << LL_ENDL;
|
||||
LL_DEBUGS("AnimatedObjectsLinkset") << vobj_name << " markForUpdate, tris " << est_tris << LL_ENDL;
|
||||
}
|
||||
#endif
|
||||
LLViewerObject::markForUpdate(priority);
|
||||
|
|
@ -5028,15 +5024,15 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
|
|||
F32 est_tris = vobj->getEstTrianglesMax();
|
||||
|
||||
#if 1
|
||||
LL_DEBUGS("AXONLinkset") << vobj_name << " rebuilding, isAttachment: " << (U32) vobj->isAttachment()
|
||||
<< " is_mesh " << is_mesh
|
||||
<< " est_tris " << est_tris
|
||||
<< " is_animated " << vobj->isAnimatedObject()
|
||||
<< " can_animate " << vobj->canBeAnimatedObject()
|
||||
<< " cav " << vobj->getControlAvatar()
|
||||
<< " playing " << (U32) (vobj->getControlAvatar() ? vobj->getControlAvatar()->mPlaying : false)
|
||||
<< " frame " << LLFrameTimer::getFrameCount()
|
||||
<< LL_ENDL;
|
||||
LL_DEBUGS("AnimatedObjectsLinkset") << vobj_name << " rebuilding, isAttachment: " << (U32) vobj->isAttachment()
|
||||
<< " is_mesh " << is_mesh
|
||||
<< " est_tris " << est_tris
|
||||
<< " is_animated " << vobj->isAnimatedObject()
|
||||
<< " can_animate " << vobj->canBeAnimatedObject()
|
||||
<< " cav " << vobj->getControlAvatar()
|
||||
<< " playing " << (U32) (vobj->getControlAvatar() ? vobj->getControlAvatar()->mPlaying : false)
|
||||
<< " frame " << LLFrameTimer::getFrameCount()
|
||||
<< LL_ENDL;
|
||||
#endif
|
||||
|
||||
llassert_always(vobj);
|
||||
|
|
@ -5059,11 +5055,11 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
|
|||
F32 tri_count = vobj->getRootEdit()->recursiveGetEstTrianglesMax();
|
||||
if (tri_count <= 0.f)
|
||||
{
|
||||
LL_DEBUGS("AXON") << vobj_name << " not calling linkControlAvatar(), because no tris" << LL_ENDL;
|
||||
LL_DEBUGS("AnimatedObjects") << vobj_name << " not calling linkControlAvatar(), because no tris" << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("AXON") << vobj_name << " calling linkControlAvatar()" << LL_ENDL;
|
||||
LL_DEBUGS("AnimatedObjects") << vobj_name << " calling linkControlAvatar()" << LL_ENDL;
|
||||
vobj->linkControlAvatar();
|
||||
}
|
||||
}
|
||||
|
|
@ -5079,7 +5075,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
|
|||
// the checkbox has changed since the last rebuild.
|
||||
if (vobj->getControlAvatar())
|
||||
{
|
||||
LL_DEBUGS("AXON") << vobj_name << " calling unlinkControlAvatar()" << LL_ENDL;
|
||||
LL_DEBUGS("AnimatedObjects") << vobj_name << " calling unlinkControlAvatar()" << LL_ENDL;
|
||||
vobj->unlinkControlAvatar();
|
||||
}
|
||||
}
|
||||
|
|
@ -5583,7 +5579,7 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)
|
|||
{
|
||||
std::string vobj_name = llformat("Vol%u", (U32) vobj);
|
||||
F32 est_tris = vobj->getEstTrianglesMax();
|
||||
LL_DEBUGS("AXONLinkset") << vobj_name << " rebuildMesh, tris " << est_tris << LL_ENDL;
|
||||
LL_DEBUGS("AnimatedObjectsLinkset") << vobj_name << " rebuildMesh, tris " << est_tris << LL_ENDL;
|
||||
}
|
||||
#endif
|
||||
vobj->preRebuild();
|
||||
|
|
|
|||
|
|
@ -3357,8 +3357,8 @@ void LLPipeline::markRebuild(LLDrawable *drawablep, LLDrawable::EDrawableFlags f
|
|||
{
|
||||
std::string vobj_name = llformat("Vol%u", (U32) vol_obj);
|
||||
F32 est_tris = vol_obj->getEstTrianglesMax();
|
||||
LL_DEBUGS("AXONLinkset") << vobj_name << " markRebuild, tris " << est_tris
|
||||
<< " priority " << (S32) priority << " flag " << std::hex << flag << LL_ENDL;
|
||||
LL_DEBUGS("AnimatedObjectsLinkset") << vobj_name << " markRebuild, tris " << est_tris
|
||||
<< " priority " << (S32) priority << " flag " << std::hex << flag << LL_ENDL;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue