diff --git a/autobuild.xml b/autobuild.xml index 9d80dcf932..1a42082731 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -1158,9 +1158,9 @@ archive hash - 5818ed2d9b29bad00878f3e26b09b7f9 + 6fdcfcc9aa1d01164c0f7ca5590859bb url - http://3p.firestormviewer.org/fontconfig-2.11.0-linux64-180841833.tar.bz2 + http://3p.firestormviewer.org/fontconfig-2.12.6-linux64-223020909.tar.bz2 name linux64 @@ -1200,9 +1200,9 @@ archive hash - 0dab99c682433145aa8f5e26d8940afd + 41db760508e6b48ae3a291ad2d1aef3d url - http://3p.firestormviewer.org/freetype-2.4.4.180841832-linux64-180841832.tar.bz2 + http://3p.firestormviewer.org/freetype-2.8.1.223020901-linux64-223020901.tar.bz2 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/en/floater_map.xml b/indra/newview/skins/default/xui/en/floater_map.xml index 94d99d1097..6b914668d4 100644 --- a/indra/newview/skins/default/xui/en/floater_map.xml +++ b/indra/newview/skins/default/xui/en/floater_map.xml @@ -42,16 +42,16 @@ name="RegionNameMsg"> Region: [REGION_NAME] - Double-click to open map - - + Double-click to teleport - - - Mini-map + + + Mini-map Medium Low Lowest - Bounding Box Cube Hexagon User Defined + Bounding Box From file @@ -63,7 +64,7 @@ + help_topic="local_mesh_log"> + help_topic="local_mesh_settings"> + + + + + + + - - - - - - - diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index b3af6637e9..40e637c5d6 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -2971,6 +2971,16 @@ + + + + diff --git a/indra/newview/skins/default/xui/fr/floater_fs_asset_blacklist.xml b/indra/newview/skins/default/xui/fr/floater_fs_asset_blacklist.xml index 304d4526ec..c4308be394 100644 --- a/indra/newview/skins/default/xui/fr/floater_fs_asset_blacklist.xml +++ b/indra/newview/skins/default/xui/fr/floater_fs_asset_blacklist.xml @@ -15,6 +15,8 @@ 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 @@