diff options
Diffstat (limited to 'indra/newview')
-rw-r--r-- | indra/newview/llcontrolavatar.cpp | 7 | ||||
-rw-r--r-- | indra/newview/llvovolume.cpp | 21 |
2 files changed, 24 insertions, 4 deletions
diff --git a/indra/newview/llcontrolavatar.cpp b/indra/newview/llcontrolavatar.cpp index a16fa3cd26..a181d8be9a 100644 --- a/indra/newview/llcontrolavatar.cpp +++ b/indra/newview/llcontrolavatar.cpp @@ -244,6 +244,7 @@ void LLControlAvatar::updateDebugText() S32 total_verts = 0; F32 est_tris = 0.f; F32 est_streaming_tris = 0.f; + F32 streaming_cost = 0.f; for (std::vector<LLVOVolume*>::iterator it = volumes.begin(); it != volumes.end(); ++it) @@ -254,6 +255,7 @@ void LLControlAvatar::updateDebugText() total_verts += verts; est_tris += volp->getEstTrianglesMax(); est_streaming_tris += volp->getEstTrianglesStreamingCost(); + streaming_cost += volp->getStreamingCost(); lod_string += llformat("%d",volp->getLOD()); if (volp && volp->mDrawable) { @@ -287,8 +289,9 @@ void LLControlAvatar::updateDebugText() type_string += "-"; } } - 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("CAV obj %d anim %d active %s impost %d strcst %f", + total_linkset_count, animated_volume_count, + active_string.c_str(), (S32) isImpostor(), streaming_cost)); addDebugText(llformat("types %s lods %s", type_string.c_str(), lod_string.c_str())); addDebugText(llformat("tris %d (est %.1f, streaming %.1f), verts %d", total_tris, est_tris, est_streaming_tris, total_verts)); addDebugText(llformat("pxarea %s", LLStringOps::getReadableNumber(getPixelArea()).c_str())); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 3b5129d994..094b0b77dd 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -3918,9 +3918,26 @@ F32 LLVOVolume::getStreamingCost(S32* bytes, S32* visible_bytes, F32* unscaled_v { F32 radius = getScale().length()*0.5f; + // AXON make sure this is consistent with the final simulator-side values. + const F32 ANIMATED_OBJECT_BASE_COST = 10.0f; // placeholder + const F32 ANIMATED_OBJECT_COST_PER_KTRI = 1.0f; //placeholder + + F32 linkset_base_cost = 0.f; + if (isAnimatedObject() && isRootEdit()) + { + // Root object of an animated object has this to account for skeleton overhead. + linkset_base_cost = ANIMATED_OBJECT_BASE_COST; + } if (isMesh()) { - return gMeshRepo.getStreamingCost(getVolume()->getParams().getSculptID(), radius, bytes, visible_bytes, mLOD, unscaled_value); + if (isAnimatedObject() && isRiggedMesh()) + { + return linkset_base_cost + ANIMATED_OBJECT_COST_PER_KTRI * 0.001 * getEstTrianglesStreamingCost(); + } + else + { + return linkset_base_cost + gMeshRepo.getStreamingCost(getVolume()->getParams().getSculptID(), radius, bytes, visible_bytes, mLOD, unscaled_value); + } } else { @@ -3934,7 +3951,7 @@ F32 LLVOVolume::getStreamingCost(S32* bytes, S32* visible_bytes, F32* unscaled_v header["medium_lod"]["size"] = counts[2] * 10; header["high_lod"]["size"] = counts[3] * 10; - return LLMeshRepository::getStreamingCost(header, radius, NULL, NULL, -1, unscaled_value); + return linkset_base_cost + LLMeshRepository::getStreamingCost(header, radius, NULL, NULL, -1, unscaled_value); } } |