diff --git a/indra/llappearance/llavatarappearance.h b/indra/llappearance/llavatarappearance.h
index 3617ce2bb6..25a51da03d 100644
--- a/indra/llappearance/llavatarappearance.h
+++ b/indra/llappearance/llavatarappearance.h
@@ -140,10 +140,9 @@ public:
LLVector3 mHeadOffset{}; // current head position
LLAvatarJoint* mRoot{ nullptr };
- // This map gets queried a huge amount of time.
+ // Joint-lookup improvements
// typedef std::map joint_map_t;
- typedef std::unordered_map joint_map_t;
- //
+ typedef std::map> joint_map_t;
joint_map_t mJointMap;
diff --git a/indra/llcharacter/llcharacter.cpp b/indra/llcharacter/llcharacter.cpp
index b1648397e0..65c70c2ce1 100644
--- a/indra/llcharacter/llcharacter.cpp
+++ b/indra/llcharacter/llcharacter.cpp
@@ -77,7 +77,9 @@ LLCharacter::~LLCharacter()
//-----------------------------------------------------------------------------
// getJoint()
//-----------------------------------------------------------------------------
-LLJoint *LLCharacter::getJoint( const std::string &name )
+// Joint-lookup improvements
+//LLJoint *LLCharacter::getJoint( const std::string &name )
+LLJoint* LLCharacter::getJoint(std::string_view name)
{
LLJoint* joint = NULL;
@@ -94,14 +96,6 @@ LLJoint *LLCharacter::getJoint( const std::string &name )
return joint;
}
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
-// Default fallback is string.
-LLJoint *LLCharacter::getJoint( const JointKey &name )
-{
- return getJoint( name.mName );
-}
-//
-
//-----------------------------------------------------------------------------
// registerMotion()
//-----------------------------------------------------------------------------
diff --git a/indra/llcharacter/llcharacter.h b/indra/llcharacter/llcharacter.h
index 2f0cf1487e..53803bbb24 100644
--- a/indra/llcharacter/llcharacter.h
+++ b/indra/llcharacter/llcharacter.h
@@ -76,13 +76,9 @@ public:
// get the specified joint
// default implementation does recursive search,
// subclasses may optimize/cache results.
+ // Joint-lookup improvements
// virtual LLJoint *getJoint( const std::string &name );
-
- // Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
- virtual LLJoint *getJoint( const JointKey &name );
- //
-
- LLJoint *getJoint( const std::string &name );
+ virtual LLJoint* getJoint(std::string_view name);
// get the position of the character
virtual LLVector3 getCharacterPosition() = 0;
diff --git a/indra/llcharacter/lljoint.cpp b/indra/llcharacter/lljoint.cpp
index f619fe132b..7749e2748e 100644
--- a/indra/llcharacter/lljoint.cpp
+++ b/indra/llcharacter/lljoint.cpp
@@ -34,32 +34,6 @@
#include "llmath.h"
#include
-#include "llmutex.h" // [FIRE-35382] Add share_mutex to fix JointKey::construct lockup
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
-#include
-
-std::unordered_map mpStringToKeys;
-std::shared_mutex mpStringToKeysMutex; // [FIRE-35382] Add share_mutex to fix JointKey::construct lockup
-
-JointKey JointKey::construct(const std::string& aName)
-{
- {// [FIRE-35382] Add share_mutex to fix JointKey::construct lockup
- std::shared_lock lock(mpStringToKeysMutex); // [FIRE-35382] Added a shared lock for reading the mpStringToKeys unordered_map.
- if (const auto itr = mpStringToKeys.find(aName); itr != mpStringToKeys.end())
- {
- return { aName, itr->second };
- }
- }// [FIRE-35382] Add share_mutex to fix JointKey::construct lockup
-
- { // Add a unique lock for writing to the mpStringToKeys unordered_map.
- std::unique_lock lock(mpStringToKeysMutex);// [FIRE-35382]
- U32 size = static_cast(mpStringToKeys.size()) + 1;
- mpStringToKeys.try_emplace(aName, size);
- return { aName, size };
- } // [FIRE-35382] Add share_mutex to fix JointKey::construct lockup
-}
-//
-
S32 LLJoint::sNumUpdates = 0;
S32 LLJoint::sNumTouches = 0;
@@ -268,7 +242,9 @@ LLJoint *LLJoint::getRoot()
//-----------------------------------------------------------------------------
// findJoint()
//-----------------------------------------------------------------------------
-LLJoint *LLJoint::findJoint( const std::string &name )
+// Joint-lookup improvements
+//LLJoint *LLJoint::findJoint( const std::string &name )
+LLJoint *LLJoint::findJoint(std::string_view name)
{
if (name == getName())
return this;
diff --git a/indra/llcharacter/lljoint.h b/indra/llcharacter/lljoint.h
index 8118752bfc..f2ceed5f55 100644
--- a/indra/llcharacter/lljoint.h
+++ b/indra/llcharacter/lljoint.h
@@ -40,31 +40,6 @@
#include "xform.h"
#include "llmatrix4a.h"
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
-struct JointKey
-{
- std::string mName;
- U32 mKey;
-
- static JointKey construct(const std::string& aName);
-};
-
-inline bool operator==(JointKey const &aLHS, JointKey const &aRHS)
-{
- return aLHS.mName == aRHS.mName;
-}
-
-inline bool operator!=(JointKey const &aLHS, JointKey const &aRHS)
-{
- return ! (aLHS == aRHS);
-}
-
-inline std::ostream& operator<<(std::ostream &aLHS, JointKey const &aRHS)
-{
- return aLHS << aRHS.mName << " (" << aRHS.mKey << ")";
-}
-//
-
constexpr S32 LL_CHARACTER_MAX_JOINTS_PER_MESH = 15;
// Need to set this to count of animate-able joints,
// currently = #bones + #collision_volumes + #attachments + 2,
@@ -247,7 +222,9 @@ public:
LLJoint *getRoot();
// search for child joints by name
- LLJoint *findJoint( const std::string &name );
+ // Joint-lookup improvements
+ //LLJoint *findJoint( const std::string &name );
+ LLJoint* findJoint(std::string_view name);
// add/remove children
void addChild( LLJoint *joint );
diff --git a/indra/llprimitive/lldaeloader.cpp b/indra/llprimitive/lldaeloader.cpp
index c3c3f81ea2..8d5d02aff0 100644
--- a/indra/llprimitive/lldaeloader.cpp
+++ b/indra/llprimitive/lldaeloader.cpp
@@ -1467,10 +1467,7 @@ void LLDAELoader::processDomModel(LLModel* model, DAE* dae, daeElement* root, do
{
name = mJointMap[name];
}
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
-// model->mSkinInfo.mJointNames.push_back( name );
- model->mSkinInfo.mJointNames.push_back( JointKey::construct( name ) );
-//
+ model->mSkinInfo.mJointNames.push_back(name);
model->mSkinInfo.mJointNums.push_back(-1);
}
}
@@ -1488,10 +1485,7 @@ void LLDAELoader::processDomModel(LLModel* model, DAE* dae, daeElement* root, do
{
name = mJointMap[name];
}
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
-// model->mSkinInfo.mJointNames.push_back( name );
- model->mSkinInfo.mJointNames.push_back( JointKey::construct( name ) );
-//
+ model->mSkinInfo.mJointNames.push_back(name);
model->mSkinInfo.mJointNums.push_back(-1);
}
}
@@ -1533,10 +1527,7 @@ void LLDAELoader::processDomModel(LLModel* model, DAE* dae, daeElement* root, do
//but does not use the skeleton).
buildJointToNodeMappingFromScene( root );
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
-// critiqueRigForUploadApplicability( model->mSkinInfo.mJointNames );
- critiqueRigForUploadApplicability( toStringVector( model->mSkinInfo.mJointNames ) );
-//
+ critiqueRigForUploadApplicability( model->mSkinInfo.mJointNames );
if ( !missingSkeletonOrScene )
{
@@ -1589,11 +1580,7 @@ void LLDAELoader::processDomModel(LLModel* model, DAE* dae, daeElement* root, do
//with the skeleton are not stored in the same order as they are in the exported joint buffer.
//This remaps the skeletal joints to be in the same order as the joints stored in the model.
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
- // std::vector ::const_iterator jointIt = model->mSkinInfo.mJointNames.begin();
- std::vector< std::string > jointNames = toStringVector( model->mSkinInfo.mJointNames );
- std::vector ::const_iterator jointIt = jointNames.begin();
-//
+ std::vector ::const_iterator jointIt = model->mSkinInfo.mJointNames.begin();
const int jointCnt = static_cast(model->mSkinInfo.mJointNames.size());
for ( int i=0; i Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
-// mJointNames.push_back( skin[ "joint_names" ][ i ] );
- mJointNames.push_back( JointKey::construct( skin[ "joint_names" ][ i ] ) );
-// ND>
+ mJointNames.push_back( skin[ "joint_names" ][ i ] );
mJointNums.push_back(-1);
}
}
@@ -1589,10 +1586,7 @@ LLSD LLMeshSkinInfo::asLLSD(bool include_joints, bool lock_scale_if_joint_positi
for (U32 i = 0; i < mJointNames.size(); ++i)
{
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
-// ret[ "joint_names" ][ i ] = mJointNames[ i ];
- ret[ "joint_names" ][ i ] = mJointNames[ i ].mName;
-//
+ ret[ "joint_names" ][ i ] = mJointNames[ i ];
for (U32 j = 0; j < 4; j++)
{
@@ -1643,9 +1637,7 @@ void LLMeshSkinInfo::updateHash()
//mJointNames
for (auto& name : mJointNames)
{
- // Joint lookup speedup
- //hash.update(name);
- hash.update(name.mName);
+ hash.update(name);
}
//mJointNums
@@ -1671,10 +1663,7 @@ U32 LLMeshSkinInfo::sizeBytes() const
res += sizeof(std::vector) + sizeof(std::string) * static_cast(mJointNames.size());
for (U32 i = 0; i < mJointNames.size(); ++i)
{
- // Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
- //res += static_cast(mJointNames[i].size()); // actual size, not capacity
- res += static_cast(mJointNames[i].mName.size()); // actual size, not capacity
- //
+ res += static_cast(mJointNames[i].size()); // actual size, not capacity
}
res += sizeof(std::vector) + sizeof(S32) * static_cast(mJointNums.size());
diff --git a/indra/llprimitive/llmodel.h b/indra/llprimitive/llmodel.h
index 816ca3d000..010b6d5d85 100644
--- a/indra/llprimitive/llmodel.h
+++ b/indra/llprimitive/llmodel.h
@@ -56,10 +56,7 @@ public:
U32 sizeBytes() const;
LLUUID mMeshID;
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
-// std::vector mJointNames;
- std::vector< JointKey > mJointNames;
-//
+ std::vector mJointNames;
mutable std::vector mJointNums;
typedef std::vector matrix_list_t;
matrix_list_t mInvBindMatrix;
diff --git a/indra/llprimitive/llmodelloader.cpp b/indra/llprimitive/llmodelloader.cpp
index d3fa1767a5..39b6c81be9 100644
--- a/indra/llprimitive/llmodelloader.cpp
+++ b/indra/llprimitive/llmodelloader.cpp
@@ -257,10 +257,7 @@ bool LLModelLoader::loadFromSLM(const std::string& filename)
if (!loaded_model->mSkinInfo.mJointNames.empty())
{
//check to see if rig is valid
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
-// critiqueRigForUploadApplicability( loaded_model->mSkinInfo.mJointNames );
- critiqueRigForUploadApplicability( toStringVector( loaded_model->mSkinInfo.mJointNames ) );
-//
+ critiqueRigForUploadApplicability( loaded_model->mSkinInfo.mJointNames );
}
else if (mCacheOnlyHitIfRigged)
{
diff --git a/indra/llprimitive/llmodelloader.h b/indra/llprimitive/llmodelloader.h
index d04585bd2c..f5783515fa 100644
--- a/indra/llprimitive/llmodelloader.h
+++ b/indra/llprimitive/llmodelloader.h
@@ -196,18 +196,6 @@ public:
void clearLog() { mWarningsArray.clear(); }
protected:
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
- std::vector< std::string > toStringVector( std::vector< JointKey > const &aIn ) const
- {
- std::vector< std::string > out;
-
- for( std::vector< JointKey >::const_iterator itr = aIn.begin(); itr != aIn.end(); ++itr )
- out.push_back( itr->mName );
-
- return out;
- }
-//
-
LLModelLoader::load_callback_t mLoadCallback;
LLModelLoader::joint_lookup_func_t mJointLookupFunc;
LLModelLoader::texture_load_func_t mTextureLoadFunc;
diff --git a/indra/newview/fsfloaterposer.cpp b/indra/newview/fsfloaterposer.cpp
index 536ec189ba..f3d01fd6a9 100644
--- a/indra/newview/fsfloaterposer.cpp
+++ b/indra/newview/fsfloaterposer.cpp
@@ -1652,7 +1652,7 @@ void FSFloaterPoser::updateManipWithFirstSelectedJoint(std::vector= 1)
- FSToolCompPose::getInstance()->setJoint(avatarp->getJoint(JointKey::construct(joints[0]->jointName())));
+ FSToolCompPose::getInstance()->setJoint(avatarp->getJoint(joints[0]->jointName()));
else
FSToolCompPose::getInstance()->setJoint(nullptr);
}
diff --git a/indra/newview/llfloaterimnearbychathandler.cpp b/indra/newview/llfloaterimnearbychathandler.cpp
index 75b9c0e052..4dc711fbe6 100644
--- a/indra/newview/llfloaterimnearbychathandler.cpp
+++ b/indra/newview/llfloaterimnearbychathandler.cpp
@@ -96,6 +96,13 @@ public:
{
ctrl->getSignal()->connect(boost::bind(&LLFloaterIMNearbyChatScreenChannel::updateToastFadingTime, this));
}
+ // [FIRE-35039 > FIRE-35294] Add flag to show/hide the on-screen console
+ ctrl = gSavedSettings.getControl("FSShowOnscreenConsole").get();
+ if (ctrl)
+ {
+ ctrl->getSignal()->connect(boost::bind(&LLFloaterIMNearbyChatScreenChannel::removeToastsFromChannel, this));
+ }
+ // [FIRE-35039 > FIRE-35294] Add flag to show/hide the on-screen console
}
void addChat (LLSD& chat);
@@ -694,6 +701,14 @@ void LLFloaterIMNearbyChatHandler::processChat(const LLChat& chat_msg,
}
//
+ // [FIRE-35039 > FIRE-35294] Add flag to show/hide the on-screen console
+ static LLUICachedControl showOnscreenConsole("FSShowOnscreenConsole");
+ if (!showOnscreenConsole)
+ {
+ return;
+ }
+ // [FIRE-35039 > FIRE-35294]
+
static LLCachedControl useChatBubbles(gSavedSettings, "UseChatBubbles");
static LLCachedControl fsBubblesHideConsoleAndToasts(gSavedSettings, "FSBubblesHideConsoleAndToasts");
// [FS communication UI]
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index 8e301cb76c..0fcd96dd8b 100644
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -1625,14 +1625,9 @@ void LLFloaterModelPreview::updateAvatarTab(bool highlight_overrides)
for (U32 j = 0; j < joint_count; ++j)
{
const LLVector3& joint_pos = LLVector3(skin->mAlternateBindMatrix[j].getTranslation());
- // Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
- //LLJointOverrideData &data = mJointOverrides[display_lod][skin->mJointNames[j]];
+ LLJointOverrideData &data = mJointOverrides[display_lod][skin->mJointNames[j]];
- //LLJoint* pJoint = LLModelPreview::lookupJointByName(skin->mJointNames[j], mModelPreview);
- LLJointOverrideData &data = mJointOverrides[display_lod][skin->mJointNames[j].mName];
-
- LLJoint* pJoint = LLModelPreview::lookupJointByName(skin->mJointNames[j].mName, mModelPreview);
- //
+ LLJoint* pJoint = LLModelPreview::lookupJointByName(skin->mJointNames[j], mModelPreview);
if (pJoint)
{
// see how voavatar uses aboveJointPosThreshold
@@ -1661,9 +1656,7 @@ void LLFloaterModelPreview::updateAvatarTab(bool highlight_overrides)
{
for (U32 j = 0; j < joint_count; ++j)
{
- // Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
- //LLJointOverrideData &data = mJointOverrides[display_lod][skin->mJointNames[j]];
- LLJointOverrideData &data = mJointOverrides[display_lod][skin->mJointNames[j].mName];
+ LLJointOverrideData &data = mJointOverrides[display_lod][skin->mJointNames[j]];
data.mModelsNoOverrides.insert(model->getName());
}
}
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 5dab7a07e2..17d34e923d 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -1082,9 +1082,9 @@ void LLFloaterWorldMap::updateLocation()
// mSLURL = LLSLURL(sim_name, pos_global);
// [FIRE-35268] OpenSim support for when on other grids
if (LLGridManager::getInstance()->isInSecondLife())
- mSLURL = LLSLURL(sim_info->getName(), gAgent.getPositionAgent());
+ mSLURL = LLSLURL(sim_info->getName(), sim_info->getGlobalOrigin(), pos_global);
else
- mSLURL = LLSLURL(LFSimFeatureHandler::instance().hyperGridURL(), sim_info->getName(), gAgent.getPositionAgent());
+ mSLURL = LLSLURL(LFSimFeatureHandler::instance().hyperGridURL(), sim_info->getName(), sim_info->getGlobalOrigin(), pos_global);
//
}
//
diff --git a/indra/newview/llmodelpreview.cpp b/indra/newview/llmodelpreview.cpp
index 5ea96030e3..de1f34eadb 100644
--- a/indra/newview/llmodelpreview.cpp
+++ b/indra/newview/llmodelpreview.cpp
@@ -4185,10 +4185,7 @@ LLJoint* LLModelPreview::lookupJointByName(const std::string& str, void* opaque)
LLModelPreview* pPreview = static_cast< LLModelPreview* >(opaque);
if (pPreview)
{
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
-// return pPreview->getPreviewAvatar()->getJoint(str);
- return pPreview->getPreviewAvatar()->getJoint( JointKey::construct( str ) );
-//
+ return pPreview->getPreviewAvatar()->getJoint(str);
}
return NULL;
}
diff --git a/indra/newview/llmorphview.cpp b/indra/newview/llmorphview.cpp
index 693915e813..cfbfa0ac27 100644
--- a/indra/newview/llmorphview.cpp
+++ b/indra/newview/llmorphview.cpp
@@ -131,10 +131,7 @@ void LLMorphView::updateCamera()
{
if (!mCameraTargetJoint)
{
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
-// setCameraTargetJoint( gAgentAvatarp->getJoint( "mHead" ) );
- setCameraTargetJoint( gAgentAvatarp->getJoint( JointKey::construct( "mHead" ) ) );
-//
+ setCameraTargetJoint( gAgentAvatarp->getJoint( "mHead" ) );
}
if (!isAgentAvatarValid()) return;
diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp
index a7725d8899..07a168612a 100644
--- a/indra/newview/llpaneleditwearable.cpp
+++ b/indra/newview/llpaneleditwearable.cpp
@@ -1316,15 +1316,11 @@ void LLPanelEditWearable::showWearable(LLViewerWearable* wearable, bool show, bo
value_map_t sorted_params;
getSortedParams(sorted_params, edit_group);
- // Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
- //LLJoint* jointp = gAgentAvatarp->getJoint( subpart_entry->mTargetJoint );
- LLJoint* jointp = gAgentAvatarp->getJoint( JointKey::construct( subpart_entry->mTargetJoint ) );
+ LLJoint* jointp = gAgentAvatarp->getJoint( subpart_entry->mTargetJoint );
if (!jointp)
{
- //jointp = gAgentAvatarp->getJoint( "mHead" );
- jointp = gAgentAvatarp->getJoint( JointKey::construct( "mHead" ) );
+ jointp = gAgentAvatarp->getJoint( "mHead" );
}
- //
buildParamList(panel_list, sorted_params, tab, jointp);
@@ -1440,11 +1436,7 @@ void LLPanelEditWearable::changeCamera(U8 subpart)
}
// Update the camera
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
- //gMorphView->setCameraTargetJoint( gAgentAvatarp->getJoint( subpart_entry->mTargetJoint ) );
- gMorphView->setCameraTargetJoint( gAgentAvatarp->getJoint( JointKey::construct( subpart_entry->mTargetJoint ) ) );
-// ND>
-
+ gMorphView->setCameraTargetJoint( gAgentAvatarp->getJoint( subpart_entry->mTargetJoint ) );
gMorphView->setCameraTargetOffset( subpart_entry->mTargetOffset );
gMorphView->setCameraOffset( subpart_entry->mCameraOffset );
if (gSavedSettings.getBOOL("AppearanceCameraMovement"))
diff --git a/indra/newview/llskinningutil.cpp b/indra/newview/llskinningutil.cpp
index d9f16fe34f..59f8e866ad 100644
--- a/indra/newview/llskinningutil.cpp
+++ b/indra/newview/llskinningutil.cpp
@@ -54,10 +54,7 @@ void dump_avatar_and_skin_state(const std::string& reason, LLVOAvatar *avatar, c
{
LL_WARNS("Avatar") << "skin joint idx " << j << " name [" << skin->mJointNames[j]
<< "] num " << skin->mJointNums[j] << LL_ENDL;
- // Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
- //const std::string& name = skin->mJointNames[j];
- const std::string& name = skin->mJointNames[j].mName;
- //
+ const std::string& name = skin->mJointNames[j];
S32 joint_num = skin->mJointNums[j];
LLJoint *name_joint = avatar->getJoint(name);
@@ -119,14 +116,9 @@ void LLSkinningUtil::scrubInvalidJoints(LLVOAvatar *avatar, LLMeshSkinInfo* skin
// needed for handling of any legacy bad data.
if (!avatar->getJoint(skin->mJointNames[j]))
{
- // Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
- //LL_DEBUGS("Avatar") << avatar->getFullname() << " mesh rigged to invalid joint " << skin->mJointNames[j] << LL_ENDL;
- //LL_WARNS_ONCE("Avatar") << avatar->getFullname() << " mesh rigged to invalid joint" << skin->mJointNames[j] << LL_ENDL;
- //skin->mJointNames[j] = "mPelvis";
- LL_DEBUGS("Avatar") << avatar->getFullname() << " mesh rigged to invalid joint " << skin->mJointNames[j].mName << LL_ENDL;
- LL_WARNS_ONCE("Avatar") << avatar->getFullname() << " mesh rigged to invalid joint" << skin->mJointNames[j].mName << LL_ENDL;
- skin->mJointNames[j] = JointKey::construct("mPelvis");
- //
+ LL_DEBUGS("Avatar") << avatar->getFullname() << " mesh rigged to invalid joint " << skin->mJointNames[j] << LL_ENDL;
+ LL_WARNS_ONCE("Avatar") << avatar->getFullname() << " mesh rigged to invalid joint" << skin->mJointNames[j] << LL_ENDL;
+ skin->mJointNames[j] = "mPelvis";
skin->mJointNumsInitialized = false; // force update after names change.
}
}
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 32e1248c8b..b6871ec511 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -417,7 +417,7 @@ void LLViewerTextureList::dump()
LL_CONT << " # of Volumes ";
for (S32 index = 0; index < LLRender::NUM_VOLUME_TEXTURE_CHANNELS; index++)
{
- LL_CONT << image->getNumVolumes(index) + " ";
+ LL_CONT << image->getNumVolumes(index) << " ";
}
// [FIRE-35081]
LL_CONT << " http://asset.siva.lindenlab.com/" << image->getID() << ".texture"
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 9b339a5609..135bbe14ed 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -7267,69 +7267,44 @@ const LLUUID& LLVOAvatar::getID() const
// getJoint()
//-----------------------------------------------------------------------------
// RN: avatar joints are multi-rooted to include screen-based attachments
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
+// Joint-lookup improvements
//LLJoint *LLVOAvatar::getJoint(const std::string &name)
-LLJoint *LLVOAvatar::getJoint(const JointKey &name)
-//
+LLJoint *LLVOAvatar::getJoint(std::string_view name)
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_AVATAR;
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
+ // Joint-lookup improvements
//joint_map_t::iterator iter = mJointMap.find( name );
-
- //LLJoint* jointp = NULL;
-
- //if( iter == mJointMap.end() || iter->second == NULL )
- //{ //search for joint and cache found joint in lookup table
- // if (mJointAliasMap.empty())
- // {
- // getJointAliases();
- // }
- // joint_alias_map_t::const_iterator alias_iter = mJointAliasMap.find(name);
- // std::string canonical_name;
- // if (alias_iter != mJointAliasMap.end())
- // {
- // canonical_name = alias_iter->second;
- // }
- // else
- // {
- // canonical_name = name;
- // }
- // jointp = mRoot->findJoint(canonical_name);
- // mJointMap[name] = jointp;
- //}
- //else
- //{ //return cached pointer
- // jointp = iter->second;
- //}
-
- joint_map_t::iterator iter = mJointMap.find( name.mKey );
+ joint_map_t::iterator iter = mJointMap.find(name.data());
LLJoint* jointp = NULL;
- if (iter == mJointMap.end() || iter->second == NULL)
- { //search for joint and cache found joint in lookup table
- if (mJointAliasMap.empty())
- {
- getJointAliases();
- }
- joint_alias_map_t::const_iterator alias_iter = mJointAliasMap.find(name.mName);
- std::string canonical_name;
- if (alias_iter != mJointAliasMap.end())
- {
- canonical_name = alias_iter->second;
- }
- else
- {
- canonical_name = name.mName;
- }
- jointp = mRoot->findJoint(canonical_name);
- mJointMap[name.mKey] = jointp;
+ if( iter == mJointMap.end() || iter->second == NULL )
+ { //search for joint and cache found joint in lookup table
+ if (mJointAliasMap.empty())
+ {
+ getJointAliases();
+ }
+ // Joint-lookup improvements
+ //joint_alias_map_t::const_iterator alias_iter = mJointAliasMap.find(name);
+ joint_alias_map_t::const_iterator alias_iter = mJointAliasMap.find(std::string(name));
+ std::string canonical_name;
+ if (alias_iter != mJointAliasMap.end())
+ {
+ canonical_name = alias_iter->second;
+ }
+ else
+ {
+ canonical_name = name;
+ }
+ jointp = mRoot->findJoint(canonical_name);
+ // Joint-lookup improvements
+ //mJointMap[name] = jointp;
+ mJointMap[std::string(name)] = jointp;
}
else
- { //return cached pointer
- jointp = iter->second;
+ { //return cached pointer
+ jointp = iter->second;
}
-//
#ifndef LL_RELEASE_FOR_DOWNLOAD
if (jointp && jointp->getName()!="mScreen" && jointp->getName()!="mRoot")
@@ -7373,17 +7348,10 @@ LLJoint *LLVOAvatar::getJoint( S32 joint_num )
void LLVOAvatar::initAllJoints()
{
getJointAliases();
- // Lookup performance changes
- //for (auto& alias : mJointAliasMap)
- //{
- // mJointMap[alias.first] = mRoot->findJoint(alias.second);
- // mJointMap[JointKey::construct(alias.first).mKey] = mRoot->findJoint(alias.second);
- //}
- for (const auto& alias : mJointAliasMap)
+ for (auto& alias : mJointAliasMap)
{
- mJointMap[JointKey::construct(alias.first).mKey] = mRoot->findJoint(alias.second);
+ mJointMap[alias.first] = mRoot->findJoint(alias.second);
}
- //
// ignore mScreen and mRoot
}
@@ -7712,11 +7680,7 @@ void LLVOAvatar::addAttachmentOverridesForObject(LLViewerObject *vo, std::set Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
-// std::string lookingForJoint = pSkinData->mJointNames[ i ].c_str();
- JointKey lookingForJoint = pSkinData->mJointNames[ i ];
-//
-
+ std::string lookingForJoint = pSkinData->mJointNames[i].c_str();
LLJoint* pJoint = getJoint( lookingForJoint );
if (pJoint)
{
@@ -7729,10 +7693,7 @@ void LLVOAvatar::addAttachmentOverridesForObject(LLViewerObject *vo, std::set Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
-// if( lookingForJoint == "mPelvis" )
- if( lookingForJoint.mName == "mPelvis" )
-//
+ if( lookingForJoint == "mPelvis" )
{
pelvisGotSet = true;
}
@@ -7923,10 +7884,7 @@ void LLVOAvatar::removeAttachmentOverridesForObject(LLViewerObject *vo)
//-----------------------------------------------------------------------------
void LLVOAvatar::removeAttachmentOverridesForObject(const LLUUID& mesh_id)
{
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
-// LLJoint* pJointPelvis = getJoint( "mPelvis" );
- LLJoint* pJointPelvis = getJoint( JointKey::construct( "mPelvis" ) );
-//
+ LLJoint* pJointPelvis = getJoint( "mPelvis" );
const std::string av_string = avString();
for (S32 joint_num = 0; joint_num < LL_CHARACTER_MAX_ANIMATED_JOINTS; joint_num++)
@@ -8114,10 +8072,7 @@ void LLVOAvatar::initAttachmentPoints(bool ignore_hud_joints)
attachment->setName(info->mName);
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
-// LLJoint *parent_joint = getJoint(info->mJointName);
- LLJoint *parent_joint = getJoint( JointKey::construct( info->mJointName ) );
-//
+ LLJoint *parent_joint = getJoint(info->mJointName);
if (!parent_joint)
{
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 5beff6d393..4cb80380fb 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -204,11 +204,9 @@ public:
void startDefaultMotions();
void dumpAnimationState();
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
+ // Joint-lookup improvements
//virtual LLJoint* getJoint(const std::string &name);
- virtual LLJoint* getJoint(const JointKey& name);
- LLJoint* getJoint(const std::string& name) { return getJoint(JointKey::construct(name)); }
-//
+ virtual LLJoint* getJoint(std::string_view name);
LLJoint* getJoint(S32 num);
void initAllJoints();
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 1b609e9ffd..9dae1846ca 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -1029,27 +1029,22 @@ void LLVOAvatarSelf::idleUpdate(LLAgent &agent, const F64 &time)
}
// virtual
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
+// Joint-lookup improvements
//LLJoint *LLVOAvatarSelf::getJoint(const std::string &name)
-LLJoint *LLVOAvatarSelf::getJoint(const JointKey& name)
-//
+LLJoint* LLVOAvatarSelf::getJoint(std::string_view name)
{
std::lock_guard lock(mJointMapMutex);
LLJoint *jointp = NULL;
jointp = LLVOAvatar::getJoint(name);
if (!jointp && mScreenp)
{
- // Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
- //jointp = mScreenp->findJoint(name);
- jointp = mScreenp->findJoint(name.mName);
- //
+ jointp = mScreenp->findJoint(name);
if (jointp)
{
- // Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
+ // Joint-lookup improvements
//mJointMap[name] = jointp;
- mJointMap[name.mKey] = jointp;
- //
- }
+ mJointMap[std::string(name)] = jointp;
+ }
}
if (jointp && jointp != mScreenp && jointp != mRoot)
{
diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h
index b57b601940..688891eb68 100644
--- a/indra/newview/llvoavatarself.h
+++ b/indra/newview/llvoavatarself.h
@@ -91,10 +91,9 @@ public:
/*virtual*/ void stopMotionFromSource(const LLUUID& source_id);
/*virtual*/ void requestStopMotion(LLMotion* motion);
-// Query by JointKey rather than just a string, the key can be a U32 index for faster lookup
+ // Joint-lookup improvements
// /*virtual*/ LLJoint* getJoint(const std::string &name);
- /*virtual*/ LLJoint* getJoint(const JointKey& name);
-//
+ /*virtual*/ LLJoint* getJoint(std::string_view name);
/*virtual*/ void renderJoints();
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_local.xml b/indra/newview/skins/default/xui/de/panel_snapshot_local.xml
index 3f3f86171c..7f61ecfebc 100644
--- a/indra/newview/skins/default/xui/de/panel_snapshot_local.xml
+++ b/indra/newview/skins/default/xui/de/panel_snapshot_local.xml
@@ -24,9 +24,8 @@
-
- Ort und Dateiname zwischen Sitzungen speichern
-
+
+
diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml
index b01a41ab79..bcd4e24be6 100644
--- a/indra/newview/skins/default/xui/en/floater_about.xml
+++ b/indra/newview/skins/default/xui/en/floater_about.xml
@@ -165,7 +165,7 @@ Additional code generously contributed to Firestorm by:
top_pad="4"
width="450"
wrap="true">
-Aira Yumi, Albatroz Hird, Alexie Birman, Andromeda Rage, Angus Boyd, Animats, Armin Weatherwax, Ayane Lyla, Casper Warden, Chalice Yao, Chaser Zaks, Chorazin Allen, Cron Stardust, Damian Zhaoying, Dan Threebeards, Dawa Gurbux, Dax Dupont, Denver Maksim, Dragonborn Forzane, Drake Arconis, Felyza Wishbringer, f0rbidden, Fractured Crystal, Geenz Spad, Gibson Firehawk, Hecklezz, Hitomi Tiponi, humbletim, Inusaito Sayori, Jean Severine, Katharine Berry, Kittin Ninetails, Kool Koolhoven, Lance Corrimal, Lassie, Latif Khalifa, Laurent Bechir, Magne Metaverse LLC, Magus Freston, Makidoll, Manami Hokkigai, MartinRJ Fayray, McCabe Maxstead, Melancholy Lemon, Melysmile, Mimika Oh, minerjr, Mister Acacia, MorganMegan, Morgan Pennent, Mysty Saunders, Nagi Michinaga, Name Short, nhede Core, NiranV Dean, Nogardrevlis Lectar, Oren Hurvitz, paperwork, Penny Patton, Peyton Menges, programmtest, Qwerty Venom, rafak360, Rebecca Ashbourne, Revolution Smythe, Romka Swallowtail, Sahkolihaa Contepomi, sal Kaligawa, Samm Florian, Satomi Ahn, Sei Lisa, Sempervirens Oddfellow, Shin Wasp, Shyotl Kuhr, Sione Lomu, Skills Hak, StarlightShining, Sunset Faulkes, Tapple Gao, Testicular Slingshot, Thickbrick Sleaford, Ubit Umarov, Vaalith Jinn, Vincent Sylvester, Whirly Fizzle, Xenhat Liamano, 小滢 Zi Ying, Zwagoth Klaar and others.
+Aira Yumi, Albatroz Hird, Alexie Birman, Andromeda Rage, Angus Boyd, Animats, Armin Weatherwax, Ayane Lyla, Casper Warden, Chalice Yao, Chaser Zaks, Chorazin Allen, Cron Stardust, Damian Zhaoying, Dan Threebeards, Dawa Gurbux, Dax Dupont, Denver Maksim, Dragonborn Forzane, Drake Arconis, Felyza Wishbringer, f0rbidden, Fractured Crystal, Geenz Spad, Gibson Firehawk, Hecklezz, Hitomi Tiponi, humbletim, Inusaito Sayori, Jean Severine, Katharine Berry, Kittin Ninetails, Kool Koolhoven, Lance Corrimal, Lassie, Latif Khalifa, Laurent Bechir, Magne Metaverse LLC, Magus Freston, Makidoll, Manami Hokkigai, MartinRJ Fayray, McCabe Maxstead, Melancholy Lemon, Melysmile, Mimika Oh, minerjr, Mister Acacia, MorganMegan, Morgan Pennent, Mysty Saunders, Nagi Michinaga, Name Short, nhede Core, NiranV Dean, Nogardrevlis Lectar, Oren Hurvitz, paperwork, Penny Patton, Peyton Menges, programmtest, Qwerty Venom, rafak360, Rebecca Ashbourne, Revolution Smythe, Romka Swallowtail, Sahkolihaa Contepomi, sal Kaligawa, Samm Florian, Satomi Ahn, Sei Lisa, Sekkmer, Sempervirens Oddfellow, Shin Wasp, Shyotl Kuhr, Sione Lomu, Skills Hak, StarlightShining, Sunset Faulkes, Tapple Gao, Testicular Slingshot, Thickbrick Sleaford, Ubit Umarov, Vaalith Jinn, Vincent Sylvester, Whirly Fizzle, Xenhat Liamano, 小滢 Zi Ying, Zwagoth Klaar and others.
-
- Persist location and filename
-
-
- include date/time in filename
-