diff --git a/autobuild.xml b/autobuild.xml
index 9d80dcf932..1a42082731 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -1158,9 +1158,9 @@
archive
name
linux64
@@ -1200,9 +1200,9 @@
archive
name
linux64
diff --git a/doc/contributions.txt b/doc/contributions.txt
index a6e681b262..e7cf193fc4 100755
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -238,6 +238,7 @@ Ansariel Hiller
SL-15226
SL-15227
SL-15398
+ SL-18432
Aralara Rajal
Arare Chantilly
CHUIBUG-191
diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
index e4a2ada897..4b85523b2c 100644
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -253,7 +253,7 @@ elseif(LINUX)
#libopenjpeg.so
libuuid.so.16
libuuid.so.16.0.22
- libfontconfig.so.1.8.0
+ libfontconfig.so.1.10.1
libfontconfig.so.1
libaprutil-1.so.0
libapr-1.so.0
diff --git a/indra/llprimitive/llmaterial.h b/indra/llprimitive/llmaterial.h
index d58b7ee812..3d74279977 100644
--- a/indra/llprimitive/llmaterial.h
+++ b/indra/llprimitive/llmaterial.h
@@ -66,6 +66,15 @@ public:
LLSD asLLSD() const;
void fromLLSD(const LLSD& material_data);
+ bool isEmpty() const
+ {
+ if( mNormalID.notNull() || mSpecularID.notNull() ) //|| mDiffuseAlphaMode != DIFFUSE_ALPHA_MODE_BLEND)
+ {
+ return false;
+ }
+ return true;
+ }
+
const LLUUID& getNormalID() const;
void setNormalID(const LLUUID& normal_id);
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index 10abd6ae5b..4aa5a3a58e 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-6.6.6
+6.6.8
diff --git a/indra/newview/installers/windows/lang_pl.nsi b/indra/newview/installers/windows/lang_pl.nsi
index e8929e2898..2a8ea7ef1d 100644
Binary files a/indra/newview/installers/windows/lang_pl.nsi and b/indra/newview/installers/windows/lang_pl.nsi differ
diff --git a/indra/newview/linux_tools/wrapper.sh b/indra/newview/linux_tools/wrapper.sh
index 57da1b18ae..b19e9ed9e6 100755
--- a/indra/newview/linux_tools/wrapper.sh
+++ b/indra/newview/linux_tools/wrapper.sh
@@ -55,6 +55,10 @@ exportMutliArchDRIPath() {
## driver bug, try enabling this option and report whether it helps:
#export LL_ATI_MOUSE_CURSOR_BUG=x
+## Help fontconfig find its default configuration file, otherwise the viewer will stall
+## with Fontconfig error: Cannot load default config file
+export FONTCONFIG_PATH=/etc/fonts
+
if [ "`uname -m`" = "x86_64" ]; then
echo '64-bit Linux detected.'
fi
diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp
index 0ea885d175..51d4e94430 100644
--- a/indra/newview/llcallingcard.cpp
+++ b/indra/newview/llcallingcard.cpp
@@ -803,7 +803,7 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)
// we were tracking someone who went offline
deleteTrackingData();
}
- }
+ // } [FIRE-32324] least invasive change move this brace after the if. LL fix should follow sometime soon
//[FIX FIRE-3522 : SJ] Notify Online/Offline to Nearby Chat even if chat_notify isnt true
// Attempt to speed up things a little
@@ -815,6 +815,7 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)
// Look up the name of this agent for the notification
LLAvatarNameCache::get(agent_id,boost::bind(&on_avatar_name_cache_notify,_1, _2, online, payload));
}
+ } // [FIRE-32324] least invasive change move this brace after the if
mModifyMask |= LLFriendObserver::ONLINE;
instance().notifyObservers();
diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp
index dc52ff4f6a..6caecb9dab 100644
--- a/indra/newview/lldrawpoolalpha.cpp
+++ b/indra/newview/lldrawpoolalpha.cpp
@@ -52,6 +52,7 @@
#include "fsperfstats.h" // performance stats support
BOOL LLDrawPoolAlpha::sShowDebugAlpha = FALSE;
+BOOL LLDrawPoolAlpha::sShowDebugAlphaRigged = FALSE;
#define current_shader (LLGLSLShader::sCurBoundShaderPtr)
@@ -300,15 +301,17 @@ void LLDrawPoolAlpha::renderDebugAlpha()
gGL.diffuseColor4f(0, 1, 0, 1);
pushBatches(LLRenderPass::PASS_INVISIBLE, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);
-
+ // FIRE-32132 et al. Allow rigged mesh transparency highlights to be toggled
+ if (sShowDebugAlphaRigged)
+ {
+ //
gHighlightProgram.mRiggedVariant->bind();
- gGL.diffuseColor4f(1, 0, 0, 1);
-
+ gGL.diffuseColor4f(0, 1, 0, 1);// FIRE-32132 et al. (can plain PASS_ALPHA_MASK_RIGGED exist?) paint it green if so.
pushRiggedBatches(LLRenderPass::PASS_ALPHA_MASK_RIGGED, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);
pushRiggedBatches(LLRenderPass::PASS_ALPHA_INVISIBLE_RIGGED, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);
// Material alpha mask
- gGL.diffuseColor4f(0, 0, 1, 1);
+ gGL.diffuseColor4f(0, 1, 1, 1);// FIRE-32132 et al. Allow rigged mesh transparency highlights to be toggled
pushRiggedBatches(LLRenderPass::PASS_MATERIAL_ALPHA_MASK_RIGGED, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);
pushRiggedBatches(LLRenderPass::PASS_NORMMAP_MASK_RIGGED, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);
pushRiggedBatches(LLRenderPass::PASS_SPECMAP_MASK_RIGGED, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);
@@ -317,6 +320,9 @@ void LLDrawPoolAlpha::renderDebugAlpha()
gGL.diffuseColor4f(0, 1, 0, 1);
pushRiggedBatches(LLRenderPass::PASS_INVISIBLE_RIGGED, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);
+ // FIRE-32132 et al. Allow rigged mesh transparency highlights to be toggled
+ }
+ //
LLGLSLShader::sCurBoundShaderPtr->unbind();
}
}
@@ -344,16 +350,6 @@ void LLDrawPoolAlpha::renderAlphaHighlight(U32 mask)
for (LLSpatialGroup::drawmap_elem_t::iterator k = draw_info.begin(); k != draw_info.end(); ++k)
{
LLDrawInfo& params = **k;
- // Capture render times
- if(params.mFace)
- {
- LLViewerObject* vobj = (LLViewerObject *)params.mFace->getViewerObject();
- if(vobj->isAttachment())
- {
- trackAttachments( vobj, params.mFace->isState(LLFace::RIGGED), &ratPtr );
- }
- }
- //
if (params.mParticle)
{
@@ -361,7 +357,30 @@ void LLDrawPoolAlpha::renderAlphaHighlight(U32 mask)
}
bool rigged = (params.mAvatar != nullptr);
+ // Capture render times
+ if(params.mFace)
+ {
+ LLViewerObject* vobj = (LLViewerObject *)params.mFace->getViewerObject();
+ if(vobj->isAttachment())
+ {
+ trackAttachments( vobj, rigged, &ratPtr );
+ }
+ }
+ //
gHighlightProgram.bind(rigged);
+ // FIRE-32132 et al. Allow rigged mesh transparency highlights to be toggled
+ if (rigged && !sShowDebugAlphaRigged)
+ {
+ // if we don't want to show rigged alpha highlights then skip
+ continue;
+ }
+ else if (rigged && sShowDebugAlphaRigged)
+ {
+ // if we do and this is rigged then use a different colour
+ gGL.diffuseColor4f(1, 0.5, 0, 1);
+ }
+ else // NB dangling else to drop through to "normal behaviour"
+ //
gGL.diffuseColor4f(1, 0, 0, 1);
if (rigged)
diff --git a/indra/newview/lldrawpoolalpha.h b/indra/newview/lldrawpoolalpha.h
index fa8ef0f227..c6ea0045cb 100644
--- a/indra/newview/lldrawpoolalpha.h
+++ b/indra/newview/lldrawpoolalpha.h
@@ -66,6 +66,7 @@ public:
bool uploadMatrixPalette(const LLDrawInfo& params);
static BOOL sShowDebugAlpha;
+ static BOOL sShowDebugAlphaRigged;
private:
LLGLSLShader* target_shader;
diff --git a/indra/newview/llfloaterbvhpreview.cpp b/indra/newview/llfloaterbvhpreview.cpp
index b8fe84fadf..b35a1210e9 100644
--- a/indra/newview/llfloaterbvhpreview.cpp
+++ b/indra/newview/llfloaterbvhpreview.cpp
@@ -67,6 +67,8 @@
#include "llviewercontrol.h" // for gSavedSettings
#include "llvoavatarself.h"
+#include "aoengine.h" // FIRE-32315: Animation preview sometimes fails when FS AO is enabled
+
S32 LLFloaterBvhPreview::sOwnAvatarInstanceCount = 0; // Preview on own avatar
const S32 PREVIEW_BORDER_WIDTH = 2;
@@ -137,6 +139,13 @@ LLFloaterBvhPreview::LLFloaterBvhPreview(const std::string& filename) :
if (mUseOwnAvatar)
{
sOwnAvatarInstanceCount++;
+
+ // // Switch FS AO off during preview
+ mAOEnabled = gSavedPerAccountSettings.getBOOL("UseAO");
+ if (mAOEnabled)
+ {
+ AOEngine::getInstance()->enable(false);
+ }
}
//
@@ -535,6 +544,12 @@ LLFloaterBvhPreview::~LLFloaterBvhPreview()
gAgentAvatarp->startDefaultMotions();
gAgentAvatarp->startMotion(ANIM_AGENT_STAND);
}
+
+ // Switch FS AO back on if it was disabled during preview
+ if (mAOEnabled)
+ {
+ AOEngine::getInstance()->enable(true);
+ }
}
//
diff --git a/indra/newview/llfloaterbvhpreview.h b/indra/newview/llfloaterbvhpreview.h
index 89fffe13cb..ec3122821a 100644
--- a/indra/newview/llfloaterbvhpreview.h
+++ b/indra/newview/llfloaterbvhpreview.h
@@ -158,6 +158,9 @@ protected:
// FIRE-17277: Allow entering Loop In/Loop Out as frames
S32 mNumFrames;
+
+ // FIRE-32315: Animation preview sometimes fails when FS AO is enabled
+ bool mAOEnabled;
};
#endif // LL_LLFLOATERBVHPREVIEW_H
diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp
index 4daadc1408..f098193774 100644
--- a/indra/newview/llfloatermap.cpp
+++ b/indra/newview/llfloatermap.cpp
@@ -51,7 +51,9 @@
// The minor cardinal direction labels are hidden if their height is more
// than this proportion of the map.
-const F32 MAP_MINOR_DIR_THRESHOLD = 0.035f;
+// FIRE-32341: Make minor directions visible at reasonable mini map size again
+//const F32 MAP_MINOR_DIR_THRESHOLD = 0.035f;
+const F32 MAP_MINOR_DIR_THRESHOLD = 0.07f;
const S32 MAP_PADDING_LEFT = 0;
const S32 MAP_PADDING_TOP = 2;
diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp
index ff138dc229..417d11e179 100644
--- a/indra/newview/lllogininstance.cpp
+++ b/indra/newview/lllogininstance.cpp
@@ -467,26 +467,8 @@ void LLLoginInstance::handleLoginFailure(const LLSD& event)
LLSD args(llsd::map( "MESSAGE", LLTrans::getString(response["message_id"]) ));
LLSD payload;
- LLNotificationsUtil::add("PromptMFAToken", args, payload, [=](LLSD const & notif, LLSD const & response) {
- bool continue_clicked = response["continue"].asBoolean();
- std::string token = response["token"].asString();
- LL_DEBUGS("LLLogin") << "PromptMFAToken: response: " << response << " continue_clicked" << continue_clicked << LL_ENDL;
-
- // strip out whitespace - SL-17034/BUG-231938
- token = boost::regex_replace(token, boost::regex("\\s"), "");
-
- if (continue_clicked && !token.empty())
- {
- LL_INFOS("LLLogin") << "PromptMFAToken: token submitted" << LL_ENDL;
-
- // Set the request data to true and retry login.
- mRequestData["params"]["token"] = token;
- reconnect();
- } else {
- LL_INFOS("LLLogin") << "PromptMFAToken: no token, attemptComplete" << LL_ENDL;
- attemptComplete();
- }
- });
+ LLNotificationsUtil::add("PromptMFAToken", args, payload,
+ boost::bind(&LLLoginInstance::handleMFAChallenge, this, _1, _2));
}
else if( reason_response == "key"
|| reason_response == "presence"
@@ -563,23 +545,59 @@ void LLLoginInstance::handleIndeterminate(const LLSD& event)
bool LLLoginInstance::handleTOSResponse(bool accepted, const std::string& key)
{
- if(accepted)
- {
- LL_INFOS("LLLogin") << "LLLoginInstance::handleTOSResponse: accepted" << LL_ENDL;
+ if(accepted)
+ {
+ LL_INFOS("LLLogin") << "LLLoginInstance::handleTOSResponse: accepted " << LL_ENDL;
- // Set the request data to true and retry login.
- mRequestData["params"][key] = true;
- reconnect();
- }
- else
- {
- LL_INFOS("LLLogin") << "LLLoginInstance::handleTOSResponse: attemptComplete" << LL_ENDL;
+ // Set the request data to true and retry login.
+ mRequestData["params"][key] = true;
- attemptComplete();
- }
+ if (!mRequestData["params"]["token"].asString().empty())
+ {
+ // SL-18511 this TOS failure happened while we are in the middle of an MFA challenge/response.
+ // the previously entered token is very likely expired, so prompt again
+ LLSD args(llsd::map( "MESSAGE", LLTrans::getString("LoginFailedAuthenticationMFARequired") ));
+ LLSD payload;
+ LLNotificationsUtil::add("PromptMFAToken", args, payload,
+ boost::bind(&LLLoginInstance::handleMFAChallenge, this, _1, _2));
+ }
+ else
+ {
+ reconnect();
+ }
+ }
+ else
+ {
+ LL_INFOS("LLLogin") << "LLLoginInstance::handleTOSResponse: attemptComplete" << LL_ENDL;
- LLEventPumps::instance().obtain(TOS_REPLY_PUMP).stopListening(TOS_LISTENER_NAME);
- return true;
+ attemptComplete();
+ }
+
+ LLEventPumps::instance().obtain(TOS_REPLY_PUMP).stopListening(TOS_LISTENER_NAME);
+ return true;
+}
+
+bool LLLoginInstance::handleMFAChallenge(LLSD const & notif, LLSD const & response)
+{
+ bool continue_clicked = response["continue"].asBoolean();
+ std::string token = response["token"].asString();
+ LL_DEBUGS("LLLogin") << "PromptMFAToken: response: " << response << " continue_clicked" << continue_clicked << LL_ENDL;
+
+ // strip out whitespace - SL-17034/BUG-231938
+ token = boost::regex_replace(token, boost::regex("\\s"), "");
+
+ if (continue_clicked && !token.empty())
+ {
+ LL_INFOS("LLLogin") << "PromptMFAToken: token submitted" << LL_ENDL;
+
+ // Set the request data to true and retry login.
+ mRequestData["params"]["token"] = token;
+ reconnect();
+ } else {
+ LL_INFOS("LLLogin") << "PromptMFAToken: no token, attemptComplete" << LL_ENDL;
+ attemptComplete();
+ }
+ return true;
}
std::string construct_start_string()
diff --git a/indra/newview/lllogininstance.h b/indra/newview/lllogininstance.h
index c486773465..100f21101f 100644
--- a/indra/newview/lllogininstance.h
+++ b/indra/newview/lllogininstance.h
@@ -87,6 +87,7 @@ private:
void syncWithUpdater(ResponsePtr resp, const LLSD& notification, const LLSD& response);
bool handleTOSResponse(bool v, const std::string& key);
+ bool handleMFAChallenge(LLSD const & notif, LLSD const & response);
void attemptComplete() { mAttemptComplete = true; } // In the future an event?
diff --git a/indra/newview/llmodelpreview.cpp b/indra/newview/llmodelpreview.cpp
index 87248d7e66..3e64e7577e 100644
--- a/indra/newview/llmodelpreview.cpp
+++ b/indra/newview/llmodelpreview.cpp
@@ -2509,14 +2509,17 @@ void LLModelPreview::genMeshOptimizerLODs(S32 which_lod, S32 meshopt_mode, U32 d
{
// Log things properly
// LL_INFOS() << "Generating lod " << which_lod << " using meshoptimizer" << LL_ENDL;
- std::ostringstream out;
- out << "Generating lod " << which_lod << " using meshoptimizer";
- LL_INFOS("MeshUpload") << out.str() << LL_ENDL;
- LLFloaterModelPreview::addStringToLog(out, false);
+ {
+ std::ostringstream out;
+ out << "Generating lod " << which_lod << " using meshoptimizer";
+ LL_INFOS("MeshUpload") << out.str() << LL_ENDL;
+ LLFloaterModelPreview::addStringToLog(out, false);
+ }
+ //
// Allow LoD from -1 to LLModel::LOD_PHYSICS
if (which_lod < -1 || which_lod > LLModel::NUM_LODS - 1)
{
- // std::ostringstream out; // already instantiated
+ std::ostringstream out;
out << "Invalid level of detail: " << which_lod;
LL_WARNS() << out.str() << LL_ENDL;
LLFloaterModelPreview::addStringToLog(out, true); // if you don't flash the log tab on error when do you?
@@ -2726,7 +2729,11 @@ void LLModelPreview::genMeshOptimizerLODs(S32 which_lod, S32 meshopt_mode, U32 d
// (indices_decimator / res_ratio) by itself is likely to overshoot to a differend
// side due to overal lack of precision, and we don't need an ideal result, which
// likely does not exist, just a better one, so a partial correction is enough.
- F32 sloppy_decimator = indices_decimator * (indices_decimator / sloppy_ratio + 1) / 2;
+ F32 sloppy_decimator{indices_decimator};
+ // if(sloppy_ratio > 0)
+ // {
+ sloppy_decimator = indices_decimator * (indices_decimator / sloppy_ratio + 1) / 2;
+ // }
sloppy_ratio = genMeshOptimizerPerModel(base, target_model, sloppy_decimator, lod_error_threshold, MESH_OPTIMIZER_NO_TOPOLOGY);
}
@@ -2751,11 +2758,12 @@ void LLModelPreview::genMeshOptimizerLODs(S32 which_lod, S32 meshopt_mode, U32 d
// to work on a first try of sloppy due to having more viggle room.
// If they didn't, something is likely wrong, no point locking the
// thread in a long calculation that will fail.
- const U32 too_many_vertices = 27000;
+ const U32 too_many_vertices = 65535;
if (size_vertices > too_many_vertices)
{
// log this properly.
// LL_WARNS() << "Sloppy optimization method failed for a complex model " << target_model->getName() << LL_ENDL;
+ std::ostringstream out;
out << "Sloppy optimization method failed for a complex model " << target_model->getName();
LL_WARNS() << out.str() << LL_ENDL;
LLFloaterModelPreview::addStringToLog(out, true);
@@ -2798,12 +2806,16 @@ void LLModelPreview::genMeshOptimizerLODs(S32 which_lod, S32 meshopt_mode, U32 d
// << " lod " << which_lod
// << " resulting ratio " << precise_ratio
// << " simplified using per model method." << LL_ENDL;
- out << "Model " << target_model->getName()
- << " lod " << which_lod
- << " resulting ratio " << precise_ratio
- << " simplified using per model method.";
- LL_INFOS() << out.str() << LL_ENDL;
- LLFloaterModelPreview::addStringToLog(out, false);
+ {
+ std::ostringstream out;
+ out << "Model " << target_model->getName()
+ << " lod " << which_lod
+ << " resulting ratio " << precise_ratio
+ << " simplified using per model method.";
+ LL_INFOS() << out.str() << LL_ENDL;
+ LLFloaterModelPreview::addStringToLog(out, false);
+ }
+ //
}
else
{
@@ -2812,12 +2824,14 @@ void LLModelPreview::genMeshOptimizerLODs(S32 which_lod, S32 meshopt_mode, U32 d
// << " lod " << which_lod
// << " resulting ratio " << sloppy_ratio
// << " sloppily simplified using per model method." << LL_ENDL;
+ std::ostringstream out;
out << "Model " << target_model->getName()
<< " lod " << which_lod
<< " resulting ratio " << sloppy_ratio
<< " sloppily simplified using per model method.";
LL_INFOS() << out.str() << LL_ENDL;
LLFloaterModelPreview::addStringToLog(out, false);
+ //
}
}
else
@@ -2827,12 +2841,14 @@ void LLModelPreview::genMeshOptimizerLODs(S32 which_lod, S32 meshopt_mode, U32 d
// << " lod " << which_lod
// << " resulting ratio " << precise_ratio
// << " simplified using per model method." << LL_ENDL;
+ std::ostringstream out;
out << "Bad MeshOptimisation result for Model " << target_model->getName()
<< " lod " << which_lod
<< " resulting ratio " << precise_ratio
<< " simplified using per model method.";
LL_WARNS() << out.str() << LL_ENDL;
LLFloaterModelPreview::addStringToLog(out, true);
+ //
}
}
@@ -3299,7 +3315,6 @@ void LLModelPreview::updateStatusMessages()
out << "Loader returned errors, model can't be uploaded";
LL_INFOS() << out.str() << LL_ENDL;
LLFloaterModelPreview::addStringToLog(out, true);
- out.str("");
//
}
@@ -3317,7 +3332,6 @@ void LLModelPreview::updateStatusMessages()
out << "Invalid rig, there might be issues with uploading Joint positions";
LL_INFOS() << out.str() << LL_ENDL;
LLFloaterModelPreview::addStringToLog(out, true);
- out.str("");
//
}
}
@@ -3882,7 +3896,6 @@ void LLModelPreview::createPreviewAvatar(void)
out << "Failed to create preview avatar for upload model window";
LL_INFOS() << out.str() << LL_ENDL;
LLFloaterModelPreview::addStringToLog(out, true);
- out.str("");
//
}
}
@@ -3985,6 +3998,7 @@ void LLModelPreview::lookupLODModelFiles(S32 lod)
out << "Auto Loading LOD" << next_lod << " from " << lod_filename;
LL_INFOS() << out.str() << LL_ENDL;
LLFloaterModelPreview::addStringToLog(out, true);
+ out.str("");
//
LLFloaterModelPreview* fmp = LLFloaterModelPreview::sInstance;
if (fmp)
diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index 2dc7017faa..c0d59dbfed 100644
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -1686,6 +1686,9 @@ void LLNetMap::createParcelImage()
BOOL LLNetMap::handleMouseDown(S32 x, S32 y, MASK mask)
{
+ // FIRE-32339: Mini map can't be dragged anymore
+ if (!(mask & MASK_SHIFT)) return FALSE;
+
// Start panning
gFocusMgr.setMouseCapture(this);
@@ -1865,10 +1868,10 @@ BOOL LLNetMap::handleRightMouseDown(S32 x, S32 y, MASK mask)
mPopupMenu->buildDrawLabels();
mPopupMenu->updateParent(LLMenuGL::sMenuContainer);
// [SL:KB] - Patch: World-MiniMap | Checked: 2012-07-08 (Catznip-3.3)
- mPopupMenu->setItemVisible("Stop tracking", LLTracker::isTracking(0));
+ mPopupMenu->setItemVisible("Stop Tracking", LLTracker::isTracking(0));
mPopupMenu->setItemVisible("Stop Tracking Separator", LLTracker::isTracking(0));
// [/SL:KB]
-// mPopupMenu->setItemEnabled("Stop tracking", LLTracker::isTracking(0));
+// mPopupMenu->setItemEnabled("Stop Tracking", LLTracker::isTracking(0));
LLMenuGL::showPopup(this, mPopupMenu, x, y);
}
return TRUE;
@@ -2127,8 +2130,8 @@ void LLNetMap::handleStopTracking (const LLSD& userdata)
if (mPopupMenu)
{
// Hide tracking option instead of disabling
- //mPopupMenu->setItemEnabled ("Stop tracking", false);
- mPopupMenu->setItemVisible ("Stop tracking", false);
+ //mPopupMenu->setItemEnabled ("Stop Tracking", false);
+ mPopupMenu->setItemVisible ("Stop Tracking", false);
//
LLTracker::stopTracking (LLTracker::isTracking(NULL));
}
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index 1b0b25629f..3a2f16cc52 100644
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -1064,7 +1064,7 @@ void LLPanelProfileSecondLife::onOpen(const LLSD& key)
#else
if (own_profile)
#endif
-//
+//
{
mImageActionMenuButton->setVisible(TRUE);
mImageActionMenuButton->setMenu("menu_fs_profile_image_actions.xml", LLMenuButton::MP_BOTTOM_RIGHT);
@@ -1113,11 +1113,11 @@ void LLPanelProfileSecondLife::updateData()
else
{
// restore UDP profiles for opensim that does not support the cap
-#ifdef OPENSIM
+#ifdef OPENSIM
if (LLGridManager::instance().isInOpenSim() && !(getSelfProfile() /* TODO(Beq):No longer neeed? && !getEmbedded()*/))
{
LLAvatarPropertiesProcessor::getInstance()->sendAvatarGroupsRequest(avatar_id);
- }
+ }
else
#endif
//
@@ -1138,7 +1138,7 @@ void LLPanelProfileSecondLife::refreshName()
void LLPanelProfileSecondLife::apply(LLAvatarData* data)
{
#ifdef OPENSIM
- if (LLGridManager::instance().isInOpenSim() && getIsLoaded() && getSelfProfile())
+ if (LLGridManager::instance().isInOpenSim() && getIsLoaded() && getSelfProfile())
{
data->image_id = mImageId;
data->about_text = mDescriptionEdit->getValue().asString();
@@ -1262,9 +1262,10 @@ void LLPanelProfileSecondLife::processProfileProperties(const LLAvatarData* avat
fillPartnerData(avatar_data);
fillAccountStatus(avatar_data);
+
// Restore UDP profiles
#ifdef OPENSIM
- if (LLGridManager::instance().isInOpenSim())
+ if (LLGridManager::instance().isInOpenSim())
{
LLFloater* floater_profile = LLFloaterReg::findInstance("profile", LLSD().with("id", avatar_id));
if (!floater_profile)
@@ -1272,13 +1273,15 @@ void LLPanelProfileSecondLife::processProfileProperties(const LLAvatarData* avat
// floater is dead, so panels are dead as well
return;
}
- LLPanel *panel = floater_profile->findChild(PANEL_PROFILE_VIEW, TRUE);
- auto *panel_profile = dynamic_cast(panel);
- if (!panel_profile)
+ LLPanelProfile* panel_profile = floater_profile->findChild(PANEL_PROFILE_VIEW, TRUE);
+ if (panel_profile)
+ {
+ panel_profile->setAvatarData(avatar_data);
+ }
+ else
{
LL_WARNS() << PANEL_PROFILE_VIEW << " not found" << LL_ENDL;
- }
- panel_profile->setAvatarData(avatar_data);
+ }
}
#endif
//
@@ -2242,8 +2245,7 @@ void LLPanelProfileSecondLife::onSaveDescriptionChanges()
// floater is dead, so panels are dead as well
return;
}
- LLPanel *panel = floater_profile->findChild(PANEL_PROFILE_VIEW, TRUE);
- auto *panel_profile = dynamic_cast(panel);
+ LLPanelProfile* panel_profile = floater_profile->findChild(PANEL_PROFILE_VIEW, TRUE);
if (!panel_profile)
{
LL_WARNS() << PANEL_PROFILE_VIEW << " not found" << LL_ENDL;
@@ -2259,7 +2261,7 @@ void LLPanelProfileSecondLife::onSaveDescriptionChanges()
LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesUpdate(&avatar_data);
}
- }
+ }
}
#endif
//
@@ -2479,7 +2481,7 @@ void LLPanelProfileSecondLife::onCommitProfileImage(const LLUUID& id)
else
{
// Make OpenSim profiles work again
-#ifdef OPENSIM
+#ifdef OPENSIM
if(LLGridManager::getInstance()->isInOpenSim())
{
mImageId = id;
@@ -2569,6 +2571,7 @@ void LLPanelProfileWeb::apply(LLAvatarData* data)
}
#endif
//
+
void LLPanelProfileWeb::onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name)
{
mAvatarNameCacheConnection.disconnect();
@@ -2866,7 +2869,7 @@ void LLPanelProfileFirstLife::onCommitPhoto(const LLUUID& id)
else
{
// Make OpenSim profiles work again
-#ifdef OPENSIM
+#ifdef OPENSIM
if(LLGridManager::getInstance()->isInOpenSim())
{
mImageId = id;
@@ -2922,8 +2925,7 @@ void LLPanelProfileFirstLife::onSaveDescriptionChanges()
// floater is dead, so panels are dead as well
return;
}
- LLPanel *panel = floater_profile->findChild(PANEL_PROFILE_VIEW, TRUE);
- auto *panel_profile = dynamic_cast(panel);
+ LLPanelProfile* panel_profile = floater_profile->findChild(PANEL_PROFILE_VIEW, TRUE);
if (!panel_profile)
{
LL_WARNS() << PANEL_PROFILE_VIEW << " not found" << LL_ENDL;
@@ -2938,7 +2940,7 @@ void LLPanelProfileFirstLife::onSaveDescriptionChanges()
LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesUpdate(&avatar_data);
}
- }
+ }
}
#endif
//
@@ -3012,7 +3014,7 @@ void LLPanelProfileFirstLife::resetData()
auto show_image_buttons = getSelfProfile();
#ifdef OPENSIM
std::string cap_url = gAgent.getRegionCapability(PROFILE_IMAGE_UPLOAD_CAP);
- if( cap_url.empty() && LLGridManager::instance().isInOpenSim() )
+ if (cap_url.empty() && LLGridManager::instance().isInOpenSim())
{
show_image_buttons = false;
}
@@ -3066,10 +3068,10 @@ void LLPanelProfileNotes::updateData()
boost::bind(request_avatar_properties_coro, cap_url, avatar_id));
}
// Restore UDO profiles
-#ifdef OPENSIM
+#ifdef OPENSIM
else
{
- LLAvatarPropertiesProcessor::getInstance()->sendAvatarNotesRequest(avatar_id);
+ LLAvatarPropertiesProcessor::getInstance()->sendAvatarNotesRequest(avatar_id);
}
#endif
//
@@ -3270,7 +3272,7 @@ void LLPanelProfile::updateData()
// Restore UDP profiles
else
{
- LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesRequest(avatar_id);
+ LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesRequest(avatar_id);
}
//
}
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
index 48b5c34db7..d0c67fdb0a 100644
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -275,7 +275,7 @@ public:
return lhs->mAvatarp < rhs->mAvatarp;
}
- return lhs->mRenderOrder < rhs->mRenderOrder;
+ return lhs->mRenderOrder > rhs->mRenderOrder;
}
};
diff --git a/indra/newview/llviewerassetupload.cpp b/indra/newview/llviewerassetupload.cpp
index 03aee279e3..be6b45033b 100644
--- a/indra/newview/llviewerassetupload.cpp
+++ b/indra/newview/llviewerassetupload.cpp
@@ -524,7 +524,11 @@ LLSD LLNewFileResourceUploadInfo::exportTempFile()
{
errorMessage = "Failed reading animation file";
}
+
+ delete motionp; // Memory leak fix
}
+
+ delete[] buffer; // Memory leak fix
}
}
else
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index d933576047..13815fce8d 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -11004,6 +11004,26 @@ class LLViewCheckHighlightTransparent : public view_listener_t
return new_value;
}
};
+// FIRE-32132 et al. Allow rigged mesh transparency highlights to be toggled
+class LLViewHighlightTransparentRigged : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ LLDrawPoolAlpha::sShowDebugAlphaRigged = !LLDrawPoolAlpha::sShowDebugAlphaRigged;
+ gPipeline.resetVertexBuffers();
+ return true;
+ }
+};
+
+class LLViewCheckHighlightTransparentRigged : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ bool new_value = LLDrawPoolAlpha::sShowDebugAlphaRigged;
+ return new_value;
+ }
+};
+//
class LLViewBeaconWidth : public view_listener_t
{
@@ -12026,6 +12046,7 @@ void initialize_menus()
view_listener_t::addMenu(new LLViewLookAtLastChatter(), "View.LookAtLastChatter");
view_listener_t::addMenu(new LLViewShowHoverTips(), "View.ShowHoverTips");
view_listener_t::addMenu(new LLViewHighlightTransparent(), "View.HighlightTransparent");
+ view_listener_t::addMenu(new LLViewHighlightTransparentRigged(), "View.HighlightTransparentRigged"); // FIRE-32132 et al. Allow rigged mesh transparency highlights to be toggled
view_listener_t::addMenu(new LLViewToggleRenderType(), "View.ToggleRenderType");
view_listener_t::addMenu(new LLViewShowHUDAttachments(), "View.ShowHUDAttachments");
view_listener_t::addMenu(new LLZoomer(1.2f), "View.ZoomOut");
@@ -12042,6 +12063,7 @@ void initialize_menus()
view_listener_t::addMenu(new LLViewCheckJoystickFlycam(), "View.CheckJoystickFlycam");
view_listener_t::addMenu(new LLViewCheckShowHoverTips(), "View.CheckShowHoverTips");
view_listener_t::addMenu(new LLViewCheckHighlightTransparent(), "View.CheckHighlightTransparent");
+ view_listener_t::addMenu(new LLViewCheckHighlightTransparentRigged(), "View.CheckHighlightTransparentRigged");// FIRE-32132 et al. Allow rigged mesh transparency highlights to be toggled
view_listener_t::addMenu(new LLViewCheckRenderType(), "View.CheckRenderType");
view_listener_t::addMenu(new LLViewStatusAway(), "View.Status.CheckAway");
view_listener_t::addMenu(new LLViewStatusDoNotDisturb(), "View.Status.CheckDoNotDisturb");
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 22b5a5d663..b8f91d2dff 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -835,6 +835,13 @@ public:
ypos += y_inc;
}
+ // FIRE-32311 - Only show particle text when showing render debug info (relocate pre-existing change by Liny)
+ if (LLPipeline::toggleRenderTypeControlNegated(LLPipeline::RENDER_TYPE_PARTICLES))
+ {
+ addText(xpos, ypos, particle_hiding);
+ ypos += y_inc;
+ }
+ //
LLVertexBuffer::sBindCount = LLImageGL::sBindCount =
LLVertexBuffer::sSetCount = LLImageGL::sUniqueCount =
gPipeline.mNumVisibleNodes = LLPipeline::sVisibleLightCount = 0;
@@ -932,14 +939,6 @@ public:
}
//
- // pull the text saying if particles are hidden out from beacons
- if (LLPipeline::toggleRenderTypeControlNegated(LLPipeline::RENDER_TYPE_PARTICLES))
- {
- addText(xpos, ypos, particle_hiding);
- ypos += y_inc;
- }
- //
-
// only display these messages if we are actually rendering beacons at this moment
// Always show the beacon text regardless if the floater is visible
// ...and if we want to see it
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index f884c41a62..29a83bc64b 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -5339,21 +5339,22 @@ LLControlAVBridge::LLControlAVBridge(LLDrawable* drawablep, LLViewerRegion* regi
bool can_batch_texture(LLFace* facep)
{
- // fix batching when materials disabled and alpha none/masked.
if (facep->getTextureEntry()->getBumpmap())
{ //bump maps aren't worked into texture batching yet
return false;
}
+ // fix batching when materials disabled and alpha none/masked.
// if (facep->getTextureEntry()->getMaterialParams().notNull())
// { //materials don't work with texture batching yet
// return false;
// }
const auto te = facep->getTextureEntry();
- if (LLPipeline::sRenderDeferred && te )
+ if ( LLPipeline::sRenderDeferred && te )
{
auto mat = te->getMaterialParams();
- if(mat.notNull() && (mat->getNormalID() != LLUUID::null || mat->getSpecularID() != LLUUID::null || (te->getAlpha() >0.f && te->getAlpha() < 1.f ) ) )
+ // if(mat.notNull() && (mat->getNormalID() != LLUUID::null || mat->getSpecularID() != LLUUID::null || (te->getAlpha() >0.f && te->getAlpha() < 1.f ) ) )
+ if( mat.notNull() && ( !mat->isEmpty() || ( (te->getAlpha() >0.f && te->getAlpha() < 1.f ) && mat->getDiffuseAlphaMode() != LLMaterial::DIFFUSE_ALPHA_MODE_BLEND) ) )
{
// we have a materials block but we cannot batch materials.
// however, materials blocks can and do exist due to alpha masking and those are batchable,
@@ -5546,6 +5547,11 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,
U32 shader_mask = 0xFFFFFFFF; //no shader
+ if(mat && mat->isEmpty() && mat->getDiffuseAlphaMode() == LLMaterial::DIFFUSE_ALPHA_MODE_BLEND)
+ {
+ mat = nullptr;
+ }
+
if (mat)
{
if (type == LLRenderPass::PASS_ALPHA)
@@ -5800,7 +5806,7 @@ static inline void add_face(T*** list, U32* count, T* face)
{
if (count[1] < MAX_FACE_COUNT)
{
- //face->setDrawOrderIndex(count[1]);
+ face->setDrawOrderIndex(count[1]);
list[1][count[1]++] = face;
}
}
@@ -5808,36 +5814,12 @@ static inline void add_face(T*** list, U32* count, T* face)
{
if (count[0] < MAX_FACE_COUNT)
{
- //face->setDrawOrderIndex(count[0]);
+ face->setDrawOrderIndex(count[0]);
list[0][count[0]++] = face;
}
}
}
-// return index into linkset for given object (0 for root prim)
-U32 get_linkset_index(LLVOVolume* vobj)
-{
- LL_PROFILE_ZONE_SCOPED_CATEGORY_DRAWABLE;
- if (vobj->isRootEdit())
- {
- return 0;
- }
-
- LLViewerObject* root = vobj->getRootEdit();
- U32 idx = 1;
- for (const auto& child : root->getChildren())
- {
- if (child == vobj)
- {
- return idx;
- }
- ++idx;
- }
-
- llassert(false);
- return idx; //should never get here
-}
-
void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_VOLUME;
@@ -6045,8 +6027,6 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
{
avatar->addAttachmentOverridesForObject(vobj, NULL, false);
}
-
- U32 linkset_index = get_linkset_index(vobj);
// Standard rigged mesh attachments:
bool rigged = !vobj->isAnimatedObject() && skinInfo && vobj->isAttachment();
@@ -6067,9 +6047,6 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
continue;
}
- // order by linkset index first and face index second
- facep->setDrawOrderIndex(linkset_index * 100 + i);
-
//ALWAYS null out vertex buffer on rebuild -- if the face lands in a render
// batch, it will recover its vertex buffer reference from the spatial group
facep->setVertexBuffer(NULL);
@@ -6094,6 +6071,11 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
if (facep->isState(LLFace::RIGGED))
{
//face is not rigged but used to be, remove from rigged face pool
+ LLDrawPoolAvatar* pool = (LLDrawPoolAvatar*)facep->getPool();
+ if (pool)
+ {
+ pool->removeFace(facep);
+ }
facep->clearState(LLFace::RIGGED);
facep->mAvatar = NULL;
facep->mSkinInfo = NULL;
@@ -6568,14 +6550,6 @@ struct CompareBatchBreakerRigged
}
};
-struct CompareDrawOrder
-{
- bool operator()(const LLFace* const& lhs, const LLFace* const& rhs)
- {
- return lhs->getDrawOrderIndex() < rhs->getDrawOrderIndex();
- }
-};
-
U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace** faces, U32 face_count, BOOL distance_sort, BOOL batch_textures, BOOL rigged)
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_VOLUME;
@@ -6619,11 +6593,6 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace
//sort faces by things that break batches, including avatar and mesh id
std::sort(faces, faces + face_count, CompareBatchBreakerRigged());
}
- else
- {
- // preserve legacy draw order for rigged faces
- std::sort(faces, faces + face_count, CompareDrawOrder());
- }
}
else if (!distance_sort)
{
@@ -6680,10 +6649,10 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace
LLMaterialPtr mat = te->getMaterialParams();
LLMaterialID matId = te->getMaterialID();
- if (distance_sort)
- {
- tex = NULL;
- }
+ // if (distance_sort)
+ // {
+ // tex = NULL;
+ // }
if (last_tex == tex)
{
@@ -6768,7 +6737,11 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace
tex = facep->getTexture();
- if (texture_count < MAX_TEXTURE_COUNT)
+ // Quick hack test of proper batching logic
+ // if (texture_count < MAX_TEXTURE_COUNT)
+ // only add to the batch if this is a new texture
+ if (cur_tex == texture_count && texture_count < MAX_TEXTURE_COUNT)
+ //
{
texture_list[texture_count++] = tex;
}
diff --git a/indra/newview/skins/default/xui/de/menu_inventory.xml b/indra/newview/skins/default/xui/de/menu_inventory.xml
index 63e222e311..d5d8ff172b 100644
--- a/indra/newview/skins/default/xui/de/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/de/menu_inventory.xml
@@ -98,6 +98,8 @@
+
+
@@ -127,8 +129,6 @@
-
-
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index f0c23579bc..586c9d1eda 100644
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -321,6 +321,7 @@
+
diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml
index 9adc4d6674..8fddb23722 100644
--- a/indra/newview/skins/default/xui/pl/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml
@@ -337,6 +337,7 @@
+
@@ -522,6 +523,9 @@
+
+
+
diff --git a/indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml
index b8f4108c00..47ce41967a 100644
--- a/indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml
@@ -20,5 +20,5 @@
-
+
diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml
index 944db261cb..e39b8eacd3 100644
--- a/indra/newview/skins/default/xui/pl/strings.xml
+++ b/indra/newview/skins/default/xui/pl/strings.xml
@@ -5747,12 +5747,6 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu.
(nieznana pozycja)
-
- [AGENT][REGION](Kliknij dwa razy by otworzyć Mapę, przeciągaj z shiftem by zmienić skalę)
-
-
- [REGION](Kliknij dwa razy by teleportować, przeciągaj z shiftem by przesunąć)
-
[NAME] zderzył/a się z Tobą.
diff --git a/indra/newview/skins/default/xui/ru/floater_model_preview.xml b/indra/newview/skins/default/xui/ru/floater_model_preview.xml
index 5a41eaed0a..eb9bfc594c 100644
--- a/indra/newview/skins/default/xui/ru/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/ru/floater_model_preview.xml
@@ -131,6 +131,7 @@
Куб
Шестиугольник
Определенные
+ Ограничительная рамка
Из файла
diff --git a/indra/newview/skins/default/xui/ru/menu_inventory.xml b/indra/newview/skins/default/xui/ru/menu_inventory.xml
index 4cd4f6c7fd..ec81a03b7b 100644
--- a/indra/newview/skins/default/xui/ru/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/ru/menu_inventory.xml
@@ -99,6 +99,8 @@
+
+
@@ -125,8 +127,6 @@
-
-
diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml
index 0aaad3360c..af7c365d84 100644
--- a/indra/newview/skins/default/xui/ru/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml
@@ -377,6 +377,7 @@
+
diff --git a/indra/newview/skins/vintage/xui/fr/floater_display_name.xml b/indra/newview/skins/vintage/xui/fr/floater_display_name.xml
new file mode 100644
index 0000000000..189541878e
--- /dev/null
+++ b/indra/newview/skins/vintage/xui/fr/floater_display_name.xml
@@ -0,0 +1,16 @@
+
+
+
+ Le nom que vous avez donné à votre avatar s'appelle le nom d'affichage. Vous pouvez le changer une fois par semaine.
+
+
+
+ Nouveau nom :
+
+
+ Confirmer :
+
+
+
+
+
diff --git a/indra/newview/skins/vintage/xui/fr/floater_fs_voice_controls.xml b/indra/newview/skins/vintage/xui/fr/floater_fs_voice_controls.xml
new file mode 100644
index 0000000000..30d51699b8
--- /dev/null
+++ b/indra/newview/skins/vintage/xui/fr/floater_fs_voice_controls.xml
@@ -0,0 +1,28 @@
+
+
+
+ Conversations vocales à proximité
+
+
+ Conversation vocale de groupe [GROUP]
+
+
+ Conférence
+
+
+ Conversation vocale avec [NAME]
+
+
+ Personne à proximité n'a de communications vocales actives
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/vintage/xui/fr/floater_people.xml b/indra/newview/skins/vintage/xui/fr/floater_people.xml
new file mode 100644
index 0000000000..8ca79b3085
--- /dev/null
+++ b/indra/newview/skins/vintage/xui/fr/floater_people.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/vintage/xui/fr/panel_block_list_sidetray.xml b/indra/newview/skins/vintage/xui/fr/panel_block_list_sidetray.xml
new file mode 100644
index 0000000000..526419be81
--- /dev/null
+++ b/indra/newview/skins/vintage/xui/fr/panel_block_list_sidetray.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ Bloqués : [COUNT] ([LIMIT] max.)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/vintage/xui/fr/panel_fs_block_list_sidetray.xml b/indra/newview/skins/vintage/xui/fr/panel_fs_block_list_sidetray.xml
new file mode 100644
index 0000000000..32fba327cc
--- /dev/null
+++ b/indra/newview/skins/vintage/xui/fr/panel_fs_block_list_sidetray.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+ Bloqués : [COUNT] ([LIMIT] max.)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/vintage/xui/fr/panel_fs_radar.xml b/indra/newview/skins/vintage/xui/fr/panel_fs_radar.xml
new file mode 100644
index 0000000000..b7784f7afd
--- /dev/null
+++ b/indra/newview/skins/vintage/xui/fr/panel_fs_radar.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/vintage/xui/fr/panel_group_notify.xml b/indra/newview/skins/vintage/xui/fr/panel_group_notify.xml
new file mode 100644
index 0000000000..b640ff1f0c
--- /dev/null
+++ b/indra/newview/skins/vintage/xui/fr/panel_group_notify.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/vintage/xui/fr/panel_main_inventory.xml b/indra/newview/skins/vintage/xui/fr/panel_main_inventory.xml
new file mode 100644
index 0000000000..c9175a8ee6
--- /dev/null
+++ b/indra/newview/skins/vintage/xui/fr/panel_main_inventory.xml
@@ -0,0 +1,109 @@
+
+
+
+ Récupération de [ITEM_COUNT] éléments... [FILTER]
+
+
+ [ITEM_COUNT] éléments [FILTER]
+
+
+ Récupéré [ITEM_COUNT] éléments [FILTER]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Éléments
+
+
diff --git a/indra/newview/skins/vintage/xui/fr/panel_people.xml b/indra/newview/skins/vintage/xui/fr/panel_people.xml
new file mode 100644
index 0000000000..0dfb867aa5
--- /dev/null
+++ b/indra/newview/skins/vintage/xui/fr/panel_people.xml
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+ Recherchez des amis avec le [secondlife:///app/search/people Moteur de recherche] ou cliquez avec le bouton droit de la souris sur le résident et proposez-lui de faire connaissance..
+Vous voulez rencontrer des gens ? Essayez d'utiliser la [secondlife:///app/worldmap Carte du monde].
+
+
+ Vous n'avez pas trouvé ce que vous cherchiez ? Essayez d'utiliser le [secondlife:///app/search/people/[SEARCH_TERM] Moteur de recherche].
+
+
+
+
+
+
+
+
+
+
+ Cet ensemble de contacts est vide.
+
+
+ Pas d'ensembles.
+
+
+ Tous les ensembles
+
+
+ Alias
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/vintage/xui/fr/panel_profile_pick.xml b/indra/newview/skins/vintage/xui/fr/panel_profile_pick.xml
new file mode 100644
index 0000000000..0abfdd8684
--- /dev/null
+++ b/indra/newview/skins/vintage/xui/fr/panel_profile_pick.xml
@@ -0,0 +1,37 @@
+
+
+
+ (sera mis à jour après l'enregistrement)
+
+
+
+
+ Chargement...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/vintage/xui/fr/panel_profile_secondlife.xml b/indra/newview/skins/vintage/xui/fr/panel_profile_secondlife.xml
new file mode 100644
index 0000000000..283982d631
--- /dev/null
+++ b/indra/newview/skins/vintage/xui/fr/panel_profile_secondlife.xml
@@ -0,0 +1,71 @@
+
+
+
+ En ligne
+
+
+ Hors ligne
+
+
+ Inconnu
+
+
+
+
+Anniversaire : [REG_DATE]
+([AGE])
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Déposez des objets ici.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/vintage/xui/fr/panel_toolbar_view.xml b/indra/newview/skins/vintage/xui/fr/panel_toolbar_view.xml
new file mode 100644
index 0000000000..60c8bb2a5a
--- /dev/null
+++ b/indra/newview/skins/vintage/xui/fr/panel_toolbar_view.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/vintage/xui/fr/sidepanel_inventory.xml b/indra/newview/skins/vintage/xui/fr/sidepanel_inventory.xml
new file mode 100644
index 0000000000..41ab4ae9da
--- /dev/null
+++ b/indra/newview/skins/vintage/xui/fr/sidepanel_inventory.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+ Articles reçus ([NUM])
+
+
+ Articles reçus
+
+
+
+ [NUM] nouveaux
+
+
+
+ Les articles achetés sur la place du marché seront livrés ici.
+
+
+
+
+
+
diff --git a/indra/newview/vjfloaterlocalmesh.cpp b/indra/newview/vjfloaterlocalmesh.cpp
index 786119281d..b2d672af17 100644
--- a/indra/newview/vjfloaterlocalmesh.cpp
+++ b/indra/newview/vjfloaterlocalmesh.cpp
@@ -367,12 +367,10 @@ bool LLFloaterLocalMesh::processPrimCreated(LLViewerObject* object)
// Select the new object
LLSelectMgr::getInstance()->selectObjectAndFamily(object, TRUE);
- update_selected_target( object->getID() );
// LLUUID local_id{"aee92334-90e9-110b-7c03-0ff3bc19de63"};
LLUUID local_id{};
-
auto* volp = object->getVolume();
if(!volp)
{
@@ -393,37 +391,42 @@ bool LLFloaterLocalMesh::processPrimCreated(LLViewerObject* object)
{
return false;
}
- auto scroll_ctrl_selected_item = this->mScrollCtrl->getFirstSelected();
- if(!scroll_ctrl_selected_item){return true;}; // at this point we have a valid object even if we can't fill it.
- auto scroll_ctrl_selected_column = scroll_ctrl_selected_item->getColumn(LOCAL_TRACKING_ID_COLUMN);
- if(!scroll_ctrl_selected_column){return true;}; // at this point we have a valid object even if we can't fill it.
-
- auto objectlist_combo_box = this->getChild("object_apply_list");
- if(!objectlist_combo_box){return true;}; // at this point we have a valid object even if we can't fill it.
-
- // TODO: replace this with check box. "apply selected"
- bool apply_local { scroll_ctrl_selected_item && scroll_ctrl_selected_column && objectlist_combo_box };
-
- if ( apply_local )
+ if(auto floater_ptr = LLLocalMeshSystem::getInstance()->getFloaterPointer())
{
- local_id = scroll_ctrl_selected_column->getValue().asUUID();
- // fill it up with local goodness
- static const bool use_scale {true};
+ floater_ptr->update_selected_target( object->getID() );
+ auto scroll_ctrl_selected_item = floater_ptr->mScrollCtrl->getFirstSelected();
+ if(!scroll_ctrl_selected_item){return true;}; // at this point we have a valid object even if we can't fill it.
- // // make sure the selection is still valid, and if so - get id.
+ auto scroll_ctrl_selected_column = scroll_ctrl_selected_item->getColumn(LOCAL_TRACKING_ID_COLUMN);
+ if(!scroll_ctrl_selected_column){return true;}; // at this point we have a valid object even if we can't fill it.
- // get selected local file id, object idx and use_scale boolean
- int object_idx = objectlist_combo_box->getFirstSelectedIndex();
- LLLocalMeshSystem::getInstance()->applyVObject(object->getID(), local_id, object_idx, use_scale);
- volp = object->getVolume();
- if(!volp)
+ auto objectlist_combo_box = floater_ptr->getChild("object_apply_list");
+ if(!objectlist_combo_box){return true;}; // at this point we have a valid object even if we can't fill it.
+
+ // TODO: replace this with check box. "apply selected"
+ bool apply_local { scroll_ctrl_selected_item && scroll_ctrl_selected_column && objectlist_combo_box };
+
+ if ( apply_local )
{
- return true;
+ local_id = scroll_ctrl_selected_column->getValue().asUUID();
+ // fill it up with local goodness
+ static const bool use_scale {true};
+
+ // // make sure the selection is still valid, and if so - get id.
+
+ // get selected local file id, object idx and use_scale boolean
+ int object_idx = objectlist_combo_box->getFirstSelectedIndex();
+ LLLocalMeshSystem::getInstance()->applyVObject(object->getID(), local_id, object_idx, use_scale);
+ volp = object->getVolume();
+ if(!volp)
+ {
+ return true;
+ }
+ volume_params = volp->getParams();
+ object->updateVolume(volume_params);
+ object->markForUpdate(true);
}
- volume_params = volp->getParams();
- object->updateVolume(volume_params);
- object->markForUpdate(true);
}
return true;
}
diff --git a/indra/newview/vjlocalmesh.h b/indra/newview/vjlocalmesh.h
index e50ac6ba43..aa4ce2e8ee 100644
--- a/indra/newview/vjlocalmesh.h
+++ b/indra/newview/vjlocalmesh.h
@@ -244,6 +244,7 @@ class LLLocalMeshSystem : public LLSingleton
// floater two-way communication
void registerFloaterPointer(LLFloaterLocalMesh* floater_ptr);
+ LLFloaterLocalMesh* getFloaterPointer(){return mFloaterPtr;};
void triggerFloaterRefresh( bool keep_selection=true );
std::vector getFileInfoVector() const;
std::vector getFileLog(LLUUID local_file_id) const;