diff --git a/.github/workflows/build_viewer.yml b/.github/workflows/build_viewer.yml index 4f76b9a085..4e08d2db9e 100644 --- a/.github/workflows/build_viewer.yml +++ b/.github/workflows/build_viewer.yml @@ -379,13 +379,13 @@ jobs: - name: Install Microsoft.Trusted.Signing.Client if: runner.os == 'Windows' run: | - .\nuget.exe install Microsoft.Trusted.Signing.Client -Version 1.0.53 -OutputDirectory . + .\nuget.exe install Microsoft.Trusted.Signing.Client -Version 1.0.86 -OutputDirectory . shell: pwsh - name: Locate Azure.CodeSigning.Dlib.dll if: runner.os == 'Windows' run: | - $dllPath = (Get-ChildItem ".\Microsoft.Trusted.Signing.Client.1.0.53\bin\x64\Azure.CodeSigning.Dlib.dll" -Recurse -File | Select-Object -First 1).FullName + $dllPath = (Get-ChildItem ".\Microsoft.Trusted.Signing.Client.1.0.86\bin\x64\Azure.CodeSigning.Dlib.dll" -Recurse -File | Select-Object -First 1).FullName if (-not $dllPath) { Write-Error "Azure.CodeSigning.Dlib.dll not found." exit 1 diff --git a/indra/llcommon/lluuid.h b/indra/llcommon/lluuid.h index 52826e36e7..b8e335e67e 100644 --- a/indra/llcommon/lluuid.h +++ b/indra/llcommon/lluuid.h @@ -244,14 +244,4 @@ inline size_t hash_value(const LLUUID& id) noexcept return (size_t)id.getDigest64(); } -// UUID hash calculation -struct FSUUIDHash -{ - inline size_t operator() (const LLUUID& id) const - { - return *reinterpret_cast(id.mData); - } -}; -// UUID hash calculation - #endif // LL_LLUUID_H diff --git a/indra/llinventory/llsettingsbase.cpp b/indra/llinventory/llsettingsbase.cpp index a365bf5034..609a001ca7 100644 --- a/indra/llinventory/llsettingsbase.cpp +++ b/indra/llinventory/llsettingsbase.cpp @@ -361,14 +361,12 @@ LLSD LLSettingsBase::interpolateSDValue(const std::string& key_name, const LLSD new_array = q.getValue(); } else - { // TODO: We could expand this to inspect the type and do a deep lerp based on type. - // for now assume a heterogeneous array of reals. + { size_t len = std::max(value.size(), other_value.size()); for (size_t i = 0; i < len; ++i) { - - new_array[i] = lerp((F32)value[i].asReal(), (F32)other_value[i].asReal(), (F32)mix); + new_array[i] = interpolateSDValue(key_name, value[i], other_value[i], defaults, mix, skip, slerps); } } diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp index 97015dc68b..6a377a6f09 100644 --- a/indra/llinventory/llsettingssky.cpp +++ b/indra/llinventory/llsettingssky.cpp @@ -661,16 +661,15 @@ void LLSettingsSky::blend(LLSettingsBase::ptr_t &end, F64 blendf) mHasLegacyHaze |= lerp_legacy_float(mHazeDensity, mLegacyHazeDensity, other->mHazeDensity, other->mLegacyHazeDensity, 0.7f, (F32)blendf); mHasLegacyHaze |= lerp_legacy_float(mDistanceMultiplier, mLegacyDistanceMultiplier, other->mDistanceMultiplier, other->mLegacyDistanceMultiplier, 0.8f, (F32)blendf); mHasLegacyHaze |= lerp_legacy_float(mDensityMultiplier, mLegacyDensityMultiplier, other->mDensityMultiplier, other->mLegacyDensityMultiplier, 0.0001f, (F32)blendf); - mHasLegacyHaze |= lerp_legacy_color(mAmbientColor, mLegacyAmbientColor, other->mAmbientColor, other->mLegacyAmbientColor, LLColor3(0.25f, 0.25f, 0.25f), (F32)blendf); + mHasLegacyHaze |= lerp_legacy_color(mAmbientColor, mLegacyAmbientColor, other->mAmbientColor, other->mLegacyAmbientColor, LLColor3(0.25f, 0.25f, 0.25f), (F32)blendf); // import pending PR #4185 Fix sky ambient color not blending. mHasLegacyHaze |= lerp_legacy_color(mBlueHorizon, mLegacyBlueHorizon, other->mBlueHorizon, other->mLegacyBlueHorizon, LLColor3(0.4954f, 0.4954f, 0.6399f), (F32)blendf); mHasLegacyHaze |= lerp_legacy_color(mBlueDensity, mLegacyBlueDensity, other->mBlueDensity, other->mLegacyBlueDensity, LLColor3(0.2447f, 0.4487f, 0.7599f), (F32)blendf); - parammapping_t defaults = other->getParameterMap(); stringset_t skip = getSkipInterpolateKeys(); stringset_t slerps = getSlerpKeys(); - mAbsorptionConfigs = interpolateSDMap(mAbsorptionConfigs, other->mAbsorptionConfigs, defaults, blendf, skip, slerps); - mMieConfigs = interpolateSDMap(mMieConfigs, other->mMieConfigs, defaults, blendf, skip, slerps); - mRayleighConfigs = interpolateSDMap(mRayleighConfigs, other->mRayleighConfigs, defaults, blendf, skip, slerps); + mAbsorptionConfigs = interpolateSDValue("absorption_config", mAbsorptionConfigs, other->mAbsorptionConfigs, defaults, blendf, skip, slerps); + mMieConfigs = interpolateSDValue("mie_config", mMieConfigs, other->mMieConfigs, defaults, blendf, skip, slerps); + mRayleighConfigs = interpolateSDValue("rayleigh_config", mRayleighConfigs, other->mRayleighConfigs, defaults, blendf, skip, slerps); setDirtyFlag(true); setReplaced(); diff --git a/indra/llprimitive/lldaeloader.cpp b/indra/llprimitive/lldaeloader.cpp index d0ff1945ea..fa53d85e37 100644 --- a/indra/llprimitive/lldaeloader.cpp +++ b/indra/llprimitive/lldaeloader.cpp @@ -1502,7 +1502,17 @@ void LLDAELoader::processDomModel(LLModel* model, DAE* dae, daeElement* root, do { domListOfFloats& transform = t->getValue(); auto count = transform.getCount()/16; - + + // FIRE-34811 Crash during import due to missing inv_bind_matrices. + if (count==0) + { + LL_WARNS("DAELOader") << "Invalid rigged mesh: Missing inv_bind_matrices." << LL_ENDL; + LLSD args; + args["Message"] = "ParsingErrorEmptyInvBindInvalidModel"; + mWarningsArray.append(args); + setLoadState( ERROR_PARSING ); + } + // for (size_t k = 0; k < count; ++k) { LLMatrix4 mat; @@ -1520,7 +1530,14 @@ void LLDAELoader::processDomModel(LLModel* model, DAE* dae, daeElement* root, do } } } - + // FIRE-34811 Crash during import due to missing inv_bind_matrices. + if (model->mSkinInfo.mInvBindMatrix.empty()) + { + model->mSkinInfo.mJointNames.clear(); + model->mSkinInfo.mJointNums.clear(); + missingSkeletonOrScene = true; // set this true as we've just wiped that data. + } + // //Now that we've parsed the joint array, let's determine if we have a full rig //(which means we have all the joint sthat are required for an avatar versus //a skinned asset attached to a node in a file that contains an entire skeleton, diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index 6ac2672cc0..ebb5725acf 100644 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -1587,7 +1587,7 @@ LLSD LLMeshSkinInfo::asLLSD(bool include_joints, bool lock_scale_if_joint_positi for (U32 i = 0; i < mJointNames.size(); ++i) { ret[ "joint_names" ][ i ] = mJointNames[ i ]; - + if (mInvBindMatrix.size() < i) break; // FIRE-34811 Crash during import due to missing inv_bind_matrices. for (U32 j = 0; j < 4; j++) { for (U32 k = 0; k < 4; k++) diff --git a/indra/newview/NACLantispam.h b/indra/newview/NACLantispam.h index 74b0592d3d..96516c8b69 100644 --- a/indra/newview/NACLantispam.h +++ b/indra/newview/NACLantispam.h @@ -66,8 +66,8 @@ private: bool mBlocked; }; -typedef std::unordered_map spam_queue_entry_map_t; -typedef std::unordered_set collision_sound_set_t; +typedef std::unordered_map spam_queue_entry_map_t; +typedef std::unordered_set collision_sound_set_t; class NACLAntiSpamQueue { diff --git a/indra/newview/fsassetblacklist.h b/indra/newview/fsassetblacklist.h index 39ca880ae5..ea5392e96e 100644 --- a/indra/newview/fsassetblacklist.h +++ b/indra/newview/fsassetblacklist.h @@ -35,9 +35,9 @@ #include "llsingleton.h" #include "llassettype.h" -using blacklisted_uuid_container_t = std::unordered_set; +using blacklisted_uuid_container_t = std::unordered_set; using blacklist_type_map_t = std::map; -using blacklist_data_t = std::unordered_map; +using blacklist_data_t = std::unordered_map; class FSAssetBlacklist : public LLSingleton { diff --git a/indra/newview/fscommon.cpp b/indra/newview/fscommon.cpp index 4fc5740da1..d59ef02a5b 100644 --- a/indra/newview/fscommon.cpp +++ b/indra/newview/fscommon.cpp @@ -92,10 +92,10 @@ bool FSCommon::is_irc_me_prefix(std::string_view text) std::string FSCommon::unescape_name(std::string_view name) { // bugfix for SL-46920: preventing filenames that break stuff. - char * curl_str = curl_unescape(name.data(), static_cast(name.size())); // Calling data() should be ok here because we also pass the length + char* curl_str = curl_unescape(name.data(), static_cast(name.size())); // Calling data() should be ok here because we also pass the length std::string unescaped_name(curl_str); curl_free(curl_str); - curl_str = NULL; + curl_str = nullptr; return unescaped_name; } @@ -301,11 +301,12 @@ bool FSCommon::isLinden(const LLUUID& av_id) if (LLGridManager::getInstance()->isInOpenSim()) { LLViewerRegion* region = gAgent.getRegion(); - if (!region) return false; - bool is_god = false; + if (!region) + return false; + + bool is_god{ false }; // They may not be "Lindens" per se, but opensim has gods. - std::set gods = region->getGods(); - if (!gods.empty()) + if (std::set gods = region->getGods(); !gods.empty()) { is_god = (gods.find(first_name + " " + last_name) != gods.end() || gods.find(last_name) != gods.end()); @@ -453,7 +454,7 @@ std::string FSCommon::getAvatarNameByDisplaySettings(const LLAvatarName& av_name std::string name; static LLCachedControl NameTagShowUsernames(gSavedSettings, "NameTagShowUsernames"); static LLCachedControl UseDisplayNames(gSavedSettings, "UseDisplayNames"); - if ((NameTagShowUsernames) && (UseDisplayNames)) + if (NameTagShowUsernames && UseDisplayNames) { name = av_name.getCompleteName(); } @@ -494,21 +495,21 @@ bool FSCommon::isDefaultTexture(const LLUUID& asset_id) bool FSCommon::isLegacySkin() { - std::string current_skin = gSavedSettings.getString("FSInternalSkinCurrent"); - return (current_skin == "Vintage"); + static bool is_legacy_skin = gSavedSettings.getString("FSInternalSkinCurrent") == "Vintage"; + return is_legacy_skin; } bool FSCommon::isFilterEditorKeyCombo(KEY key, MASK mask) { - return (mask == MASK_CONTROL && key == 'F' && gSavedSettings.getBOOL("FSSelectLocalSearchEditorOnShortcut")); + static LLCachedControl select_search_on_shortcut(gSavedSettings, "FSSelectLocalSearchEditorOnShortcut"); + return (mask == MASK_CONTROL && key == 'F' && select_search_on_shortcut); } LLUUID FSCommon::getGroupForRezzing() { LLUUID group_id{ gAgent.getGroupID() }; - LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); - if (parcel && gSavedSettings.getBOOL("RezUnderLandGroup")) + if (LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); parcel && gSavedSettings.getBOOL("RezUnderLandGroup")) { // In both cases, group-owned or not, the group ID is the same; // No need to query the parcel owner ID as it will be either diff --git a/indra/newview/fsradar.h b/indra/newview/fsradar.h index a3069839db..260617859d 100644 --- a/indra/newview/fsradar.h +++ b/indra/newview/fsradar.h @@ -63,7 +63,7 @@ class FSRadar virtual ~FSRadar(); public: - typedef std::unordered_map, FSUUIDHash> entry_map_t; + typedef std::unordered_map> entry_map_t; entry_map_t getRadarList() { return mEntryList; } void startTracking(const LLUUID& avatar_id); @@ -130,7 +130,7 @@ private: bool lastIgnore; }; - typedef std::unordered_map radarfields_map_t; + typedef std::unordered_map radarfields_map_t; radarfields_map_t mLastRadarSweep; entry_map_t mEntryList; diff --git a/indra/newview/lggcontactsets.h b/indra/newview/lggcontactsets.h index bed8cbdbbe..51983bcf2f 100644 --- a/indra/newview/lggcontactsets.h +++ b/indra/newview/lggcontactsets.h @@ -52,7 +52,7 @@ class LGGContactSets : public LLSingleton public: typedef std::vector string_vec_t; - typedef std::unordered_set uuid_set_t; + typedef std::unordered_set uuid_set_t; void loadFromDisk(); @@ -157,7 +157,7 @@ private: LLSD exportToLLSD(); void saveToDisk(); - typedef std::unordered_map uuid_map_t; + typedef std::unordered_map uuid_map_t; typedef std::map contact_set_map_t; contact_set_map_t mContactSets; diff --git a/indra/newview/llagentbenefits.cpp b/indra/newview/llagentbenefits.cpp index 01a701094d..5716617de1 100644 --- a/indra/newview/llagentbenefits.cpp +++ b/indra/newview/llagentbenefits.cpp @@ -305,7 +305,10 @@ S32 LLAgentBenefits::get2KTextureUploadCost(S32 area) const { if (m_2k_texture_upload_cost.empty()) { - return m_texture_upload_cost; + // OpenSim legacy economy + //return m_texture_upload_cost; + return getTextureUploadCost(); + // } return m_2k_texture_upload_cost[0]; } diff --git a/indra/newview/llheroprobemanager.cpp b/indra/newview/llheroprobemanager.cpp index 477a348c72..8633fe00cb 100644 --- a/indra/newview/llheroprobemanager.cpp +++ b/indra/newview/llheroprobemanager.cpp @@ -60,7 +60,7 @@ static void touch_default_probe(LLReflectionMap* probe) } } -LLHeroProbeManager::LLHeroProbeManager():mMirrorNormal(0,0,1) // [FIRE-35007][#3331] mirrors not working after relog. make sure the mirror normal is not zero length +LLHeroProbeManager::LLHeroProbeManager() { } diff --git a/indra/newview/llpanelgroupgeneral.h b/indra/newview/llpanelgroupgeneral.h index f0406cd56c..f878d4edb5 100644 --- a/indra/newview/llpanelgroupgeneral.h +++ b/indra/newview/llpanelgroupgeneral.h @@ -127,7 +127,7 @@ private: S32 sortMembersList(S32,const LLScrollListItem*,const LLScrollListItem*); LLGroupMgrGroupData::member_list_t::iterator mMemberProgress; - typedef std::unordered_map avatar_name_cache_connection_map_t; + typedef std::unordered_map avatar_name_cache_connection_map_t; avatar_name_cache_connection_map_t mAvatarNameCacheConnections; bool mPendingMemberUpdate; diff --git a/indra/newview/llperfstats.h b/indra/newview/llperfstats.h index 1e99fa343a..a1eb0348dc 100644 --- a/indra/newview/llperfstats.h +++ b/indra/newview/llperfstats.h @@ -245,7 +245,7 @@ namespace LLPerfStats static void updateMeanFrameTime(U64 tot_frame_time_raw); // StatsArray is a uint64_t for each possible statistic type. using StatsArray = std::array(LLPerfStats::StatType_t::STATS_COUNT)>; - using StatsMap = std::unordered_map; // + using StatsMap = std::unordered_map; // using StatsTypeMatrix = std::array(LLPerfStats::ObjType_t::OT_COUNT)>; using StatsSummaryArray = std::array(LLPerfStats::ObjType_t::OT_COUNT)>; diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index fa28def9ab..5e211c3678 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -742,6 +742,10 @@ bool idle_startup() gSavedSettings.setBOOL("FSInternalShowNavbarFavoritesPanel", gSavedSettings.getBOOL("ShowNavbarFavoritesPanel")); // + // Added to determine if toolbar gets hidden when empty + if (gToolBarView) + gToolBarView->setHideBottomOnEmpty(FSCommon::isLegacySkin()); + if (LLFeatureManager::getInstance()->isSafe()) { LLNotificationsUtil::add("DisplaySetToSafe"); diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp index 03210d1d65..a2e5ceb2a3 100644 --- a/indra/newview/lltoolbarview.cpp +++ b/indra/newview/lltoolbarview.cpp @@ -131,9 +131,6 @@ bool LLToolBarView::postBuild() // Member variable needed for console chat bottom offset mBottomChatStack = findChild("bottom_chat_stack"); - // Added to determine if toolbar gets hidden when empty - mHideBottomOnEmpty = FSCommon::isLegacySkin(); - return true; } diff --git a/indra/newview/lltoolbarview.h b/indra/newview/lltoolbarview.h index f75babb56b..0d2d080f52 100644 --- a/indra/newview/lltoolbarview.h +++ b/indra/newview/lltoolbarview.h @@ -102,9 +102,12 @@ public: bool isModified() const; // Getters for member variables needed for console chat bottom offset - LLView* getBottomChatStack() const { return mBottomChatStack; }; + LLView* getBottomChatStack() const { return mBottomChatStack; } // + // Added to determine if toolbar gets hidden when empty + void setHideBottomOnEmpty(bool hideBottomOnEmpty) { mHideBottomOnEmpty = hideBottomOnEmpty; } + protected: friend class LLUICtrlFactory; LLToolBarView(const Params&); diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index fd3aa94931..03173d68b1 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -420,7 +420,7 @@ void LLViewerTextureList::dump() LL_CONT << image->getNumVolumes(index) << " "; } // [FIRE-35081] - LL_CONT << " http://asset.siva.lindenlab.com/" << image->getID() << ".texture" + LL_CONT << " " << image->getID().asString().substr(0, 7) << LL_ENDL; // [FIRE-35081] Blurry prims not changing with graphics settings image_counts[(image->getDiscardLevel() + 1)] += 1; // Need to add +1 to make up for -1 being a possible value diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index bf2a84a013..83097a3d6f 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -7327,11 +7327,16 @@ void LLViewerWindow::setUIVisibility(bool visible) // LLPanelTopInfoBar::getInstance()->setVisible(visible? gSavedSettings.getBOOL("ShowMiniLocationPanel") : false); mStatusBarContainer->setVisible(visible); - // hide utility bar if we are on a skin that uses it, e.g. Vintage - LLView* utilityBarStack = mRootView->findChildView("chat_bar_utility_bar_stack"); - if (utilityBarStack) + // hide utility bar if we are on a skin that uses it, i.e. Vintage + // Beq Note: Added a skin check to fix FIRE-29517 "hitch when entering mouselook" + // This was caused having to search for a non-existent childview. If another skin other than vintage + // ever needs chat_bar_utility_bar_stack in the future, this will need to be updated. + if (FSCommon::isLegacySkin()) { - utilityBarStack->setVisible(visible); + if (LLView* utilityBarStack = mRootView->findChildView("chat_bar_utility_bar_stack"); utilityBarStack) + { + utilityBarStack->setVisible(visible); + } } // } diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 250474db34..03bc3da515 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -596,7 +596,6 @@ with the same filename but different name - diff --git a/indra/newview/skins/default/xui/de/floater_model_preview.xml b/indra/newview/skins/default/xui/de/floater_model_preview.xml index 53622246f7..d8df9fb063 100644 --- a/indra/newview/skins/default/xui/de/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/de/floater_model_preview.xml @@ -145,6 +145,9 @@ Netz kann nicht ohne Positionsdaten verarbeitet werden - ungültiges Modell. + + Geriggtes Netz kann nicht ohne InvBind-Daten verarbeitet werden - ungültiges Modell. + diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml index 8d6e1ad28b..e6907da4a3 100644 --- a/indra/newview/skins/default/xui/en/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml @@ -65,6 +65,9 @@ Document has no root Document has no visual_scene Unable to process mesh without position data. Invalid model. + + Unable to process rigged mesh without InvBind data. Invalid model. +