diff options
| author | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2018-08-01 21:16:33 +0100 | 
|---|---|---|
| committer | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2018-08-01 21:16:33 +0100 | 
| commit | ac889b1eeb7f9a00e7a6d1d9ba14c70d0c7a33fc (patch) | |
| tree | 44f8aea44dcec9bda4cd6b10866c7f38bb7220d6 | |
| parent | 447aadc37b56190893bbd4e2f527a4683844024b (diff) | |
SL-937 - added debug setting DebugObjectLODs to help track LOD calculations especially for rigged meshes
| -rw-r--r-- | indra/newview/app_settings/settings.xml | 11 | ||||
| -rw-r--r-- | indra/newview/llvovolume.cpp | 53 | 
2 files changed, 62 insertions, 2 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index b982f7bd48..4641d5775f 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -2193,6 +2193,17 @@      <key>Value</key>      <integer>0</integer>    </map> +  <key>DebugObjectLODs</key> +  <map> +    <key>Comment</key> +    <string>Show info related to lod calculations for attached or animated objects</string> +    <key>Persist</key> +    <integer>1</integer> +    <key>Type</key> +    <string>Boolean</string> +    <key>Value</key> +    <integer>0</integer> +  </map>    <key>AnimatedObjectsIgnoreLimits</key>    <map>      <key>Comment</key> diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 01b70088ab..8de97c711d 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1272,6 +1272,46 @@ S32	LLVOVolume::computeLODDetail(F32 distance, F32 radius, F32 lod_factor)  	return cur_detail;  } +std::string get_debug_object_lod_text(LLVOVolume *rootp) +{ +    std::string cam_dist_string = ""; +    cam_dist_string += LLStringOps::getReadableNumber(rootp->mLODDistance) +  " "; +    std::string lod_string = llformat("%d",rootp->getLOD()); +    F32 lod_radius = rootp->mLODRadius; +    S32 cam_dist_count = 0; +    LLViewerObject::const_child_list_t& child_list = rootp->getChildren(); +    for (LLViewerObject::const_child_list_t::const_iterator iter = child_list.begin(); +         iter != child_list.end(); ++iter) +    { +        LLViewerObject *childp = *iter; +        LLVOVolume *volp = dynamic_cast<LLVOVolume*>(childp); +        if (volp) +        { +            lod_string += llformat("%d",volp->getLOD()); +            if (volp->isRiggedMesh()) +            { +                // Rigged/animatable mesh. This is computed from the +                // avatar dynamic box, so value from any vol will be +                // the same. +                lod_radius = volp->mLODRadius; +            } +            if (volp->mDrawable) +            { +                if (cam_dist_count < 4) +                { +                    cam_dist_string += LLStringOps::getReadableNumber(volp->mLODDistance) +  " "; +                    cam_dist_count++; +                } +            } +        } +    } +    std::string result = llformat("lod_radius %s dists %s lods %s", +                                  LLStringOps::getReadableNumber(lod_radius).c_str(), +                                  cam_dist_string.c_str(), +                                  lod_string.c_str()); +    return result; +} +  BOOL LLVOVolume::calcLOD()  {  	if (mDrawable.isNull()) @@ -1341,8 +1381,17 @@ BOOL LLVOVolume::calcLOD()      mLODDistance = distance;      mLODRadius = radius; -     -	distance *= sDistanceFactor; + +    if (gSavedSettings.getBOOL("DebugObjectLODs")) +    { +        if (getAvatar() && isRootEdit()) +        { +            std::string debug_object_text = get_debug_object_lod_text(this); +            setDebugText(debug_object_text); +        } +    } + +    distance *= sDistanceFactor;  	F32 rampDist = LLVOVolume::sLODFactor * 2;  | 
