diff --git a/autobuild.xml b/autobuild.xml index 7470871fa1..561e6f0743 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -952,11 +952,11 @@ archive hash - e137cd0eacda5df6204150b3bb51a971 + 177f3e948368aa09803ffae0884acc12 hash_algorithm md5 url - file:///opt/firestorm/fmodstudio-1.10.09-darwin-183011234.tar.bz2 + file:///opt/firestorm/fmodstudio-1.10.10-darwin-183562214.tar.bz2 name darwin @@ -1976,9 +1976,9 @@ archive hash - 1b87073540bf081136e60777d99f09f2 + 9a08c678a8c6c3c10bb913219b7931b6 url - file:///opt/firestorm/kdu-7.A.5-darwin-182950050.tar.bz2 + file:///opt/firestorm/kdu-7.A.6-darwin-183562147.tar.bz2 name darwin @@ -1988,9 +1988,9 @@ archive hash - 1b87073540bf081136e60777d99f09f2 + 9a08c678a8c6c3c10bb913219b7931b6 url - file:///opt/firestorm/kdu-7.A.5-darwin-182950050.tar.bz2 + file:///opt/firestorm/kdu-7.A.6-darwin-183562147.tar.bz2 name darwin64 @@ -2832,9 +2832,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - ee185657aed3a7fcabcd9a1335a6050b + 0d3db04b9b10085b100b345c68381cb0 url - http://downloads.phoenixviewer.com/ogg_vorbis-1.2.2-1.3.2.180871245-linux-180871245.tar.bz2 + http://downloads.phoenixviewer.com/ogg_vorbis-1.3.3-1.3.6.183570207-linux-183570207.tar.bz2 name linux @@ -2844,9 +2844,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - ec5fd10d3a504e528b61d339522ca0f9 + 5e23c312d37367bb2d23dad395891b00 url - http://downloads.phoenixviewer.com/ogg_vorbis-1.2.2-1.3.2.180841550-linux64-180841550.tar.bz2 + http://downloads.phoenixviewer.com/ogg_vorbis-1.3.3-1.3.6.183570202-linux64-183570202.tar.bz2 name linux64 diff --git a/indra/newview/Info-Firestorm.plist b/indra/newview/Info-Firestorm.plist index a07236acfe..f779ffc3db 100644 --- a/indra/newview/Info-Firestorm.plist +++ b/indra/newview/Info-Firestorm.plist @@ -32,6 +32,8 @@ NSAppSleepDisabled + NSMicrophoneUsageDescription + Microphone access is needed to allow connection to voice. NSHumanReadableCopyright ${MACOSX_BUNDLE_COPYRIGHT} CFBundleDocumentTypes diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 3420d41785..cd44dd8e58 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -9029,7 +9029,7 @@ MeshPreviewBaseColor Comment - Canvas colour for the Mesh uploader + Diffuse colour for the Mesh uploader when textures not shown Persist 1 Type @@ -18944,7 +18944,18 @@ Change of this parameter will affect the layout of buttons in notification toast Value 0 - FSIgnoreFinishAnimation + FSIgnoreClientsideMeshValidation + + Comment + Treat the errors from Clientside mesh validation as warnings and do not block upload. This setting allows you to fall back on server side checks and per Grid quality control levels. + Persist + 1 + Type + Boolean + Value + 0 + + FSIgnoreFinishAnimation Comment Disable the wait for pre-jump or landing. Credit to Zwagoth Klaar for coding this. diff --git a/indra/newview/app_settings/shaders/class1/objects/previewV.glsl b/indra/newview/app_settings/shaders/class1/objects/previewV.glsl index 55f6597498..3424613e94 100644 --- a/indra/newview/app_settings/shaders/class1/objects/previewV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/previewV.glsl @@ -94,6 +94,7 @@ void main() // col.rgb += light_diffuse[2].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[2], light_direction[2], light_attenuation[2].x, light_attenuation[2].z); col.rgb += light_diffuse[2].rgb * calcDirectionalLight(norm, light_position[2].xyz); // col.rgb += light_diffuse[3].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[3], light_direction[3], light_attenuation[3].x, light_attenuation[3].z); + col.rgb += light_diffuse[3].rgb * calcDirectionalLight(norm, light_position[3].xyz); col /= 2.0; vertex_color = col*color; } diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp index 117b8f62d7..af6977d3cd 100644 --- a/indra/newview/lldynamictexture.cpp +++ b/indra/newview/lldynamictexture.cpp @@ -131,7 +131,7 @@ void LLViewerDynamicTexture::preRender(BOOL clear_depth) //llassert(mFullWidth <= 512); gPipeline.allocatePhysicsBuffer(); llassert(mFullWidth <= static_cast(gPipeline.mPhysicsDisplay.getWidth())); - llassert(mFullWidth <= static_cast(gPipeline.mPhysicsDisplay.getHeight())); + llassert(mFullHeight <= static_cast(gPipeline.mPhysicsDisplay.getHeight())); // if (gGLManager.mHasFramebufferObject && gPipeline.mWaterDis.isComplete() && !gGLManager.mIsATI) if (gGLManager.mHasFramebufferObject && gPipeline.mPhysicsDisplay.isComplete() && !gGLManager.mIsATI) diff --git a/indra/newview/llfloaterlinkreplace.cpp b/indra/newview/llfloaterlinkreplace.cpp index 10cce3bd22..d84e4986c7 100644 --- a/indra/newview/llfloaterlinkreplace.cpp +++ b/indra/newview/llfloaterlinkreplace.cpp @@ -52,12 +52,16 @@ LLFloaterLinkReplace::~LLFloaterLinkReplace() BOOL LLFloaterLinkReplace::postBuild() { + childSetVisible("delete_text", false); // FIRE-17695 - Delete links capability mStartBtn = getChild("btn_start"); mStartBtn->setCommitCallback(boost::bind(&LLFloaterLinkReplace::onStartClicked, this)); mRefreshBtn = getChild("btn_refresh"); mRefreshBtn->setCommitCallback(boost::bind(&LLFloaterLinkReplace::checkEnableStart, this)); - + // FIRE-17695 - Delete links capability + mDeleteOnlyToggle = getChild("delete_links_only"); + mDeleteOnlyToggle->setCommitCallback(boost::bind(&LLFloaterLinkReplace::onDeleteOnlyToggle, this)); + // mSourceEditor = getChild("source_uuid_editor"); mTargetEditor = getChild("target_uuid_editor"); @@ -92,9 +96,40 @@ void LLFloaterLinkReplace::onSourceItemDrop(const LLUUID& source_item_id) void LLFloaterLinkReplace::onTargetItemDrop(const LLUUID& target_item_id) { - mTargetUUID = target_item_id; + // FIRE-17695 - option to bulk delete links. + //mTargetUUID = target_item_id; + //checkEnableStart(); + if (!mDeleteOnly) + { + mTargetUUID = target_item_id; + checkEnableStart(); + } + else + { + mTargetEditor->setItem(nullptr); + mTargetEditor->setText(getString("DeleteNotReplace")); + mTargetUUID.setNull(); + } + // +} + +// FIRE-17695 - Delete links capability +void LLFloaterLinkReplace::onDeleteOnlyToggle() +{ + auto enabled = mDeleteOnlyToggle->getValue().asBoolean(); + mTargetEditor->setEnabled(!enabled); + mTargetEditor->setVisible(!enabled); + childSetVisible("target_label", !enabled); + childSetVisible("delete_text", enabled); + mDeleteOnly = enabled; + if (mDeleteOnly) + { + mTargetEditor->setItem(nullptr); + mTargetUUID.setNull(); + } checkEnableStart(); } +// void LLFloaterLinkReplace::updateFoundLinks() { @@ -123,20 +158,36 @@ void LLFloaterLinkReplace::checkEnableStart() { updateFoundLinks(); } + // FIRE-17695 - Delete links capability + // mStartBtn->setEnabled(mRemainingItems > 0 && mSourceUUID.notNull() && mTargetUUID.notNull() && mSourceUUID != mTargetUUID); + bool enable = mRemainingItems > 0 && ( + (mDeleteOnly && mSourceUUID.notNull() ) || + (mSourceUUID.notNull() && mTargetUUID.notNull() && mSourceUUID != mTargetUUID)); - mStartBtn->setEnabled(mRemainingItems > 0 && mSourceUUID.notNull() && mTargetUUID.notNull() && mSourceUUID != mTargetUUID); + mStartBtn->setEnabled(enable); + // } void LLFloaterLinkReplace::onStartClicked() { LL_INFOS() << "Starting inventory link replace" << LL_ENDL; - - if (mSourceUUID.isNull() || mTargetUUID.isNull()) + // FIRE-17695 - option to bulk delete links. + // if (mSourceUUID.isNull() || mTargetUUID.isNull()) + if (!mDeleteOnly && (mSourceUUID.isNull() || mTargetUUID.isNull())) + // { LL_WARNS() << "Cannot replace. Either source or target UUID is null." << LL_ENDL; return; } + // FIRE-17695 - option to bulk delete links. + if (!mDeleteOnly && mSourceUUID.isNull()) + { + LL_WARNS() << "Cannot delete links. Source UUID is null." << LL_ENDL; + return; + } + // + if (mSourceUUID == mTargetUUID) { LL_WARNS() << "Cannot replace. Source and target are identical." << LL_ENDL; @@ -155,7 +206,10 @@ void LLFloaterLinkReplace::onStartClicked() if (mRemainingInventoryItems.size() > 0) { LLViewerInventoryItem* target_item = gInventory.getItem(mTargetUUID); - if (target_item) + // FIRE-17695 - option to bulk delete links. + //if (target_item) + if (target_item || mDeleteOnly) + // { mRemainingItems = (U32)mRemainingInventoryItems.size(); @@ -307,26 +361,63 @@ void LLFloaterLinkReplace::processBatch(LLInventoryModel::item_array_t items) if (source_item->getParentUUID() != cof_folder_id) { + // FIRE-17695 bulk delete unwanted links + //bool is_outfit_folder = gInventory.isObjectDescendentOf(source_item->getParentUUID(), outfit_folder_id); + //// If either the new or old item in the COF is a wearable, we need to update wearable ordering after the link has been replaced + //bool needs_wearable_ordering_update = (is_outfit_folder && source_item->getType() == LLAssetType::AT_CLOTHING) || target_item->getType() == LLAssetType::AT_CLOTHING; + //// Other items in the COF need a description update (description of the actual link item must be empty) + //bool needs_description_update = is_outfit_folder && target_item->getType() != LLAssetType::AT_CLOTHING; + + //LL_DEBUGS() << "is_outfit_folder = " << (is_outfit_folder ? "true" : "false") << LL_NEWLINE + // << "needs_wearable_ordering_update = " << (needs_wearable_ordering_update ? "true" : "false") << LL_NEWLINE + // << "needs_description_update = " << (needs_description_update ? "true" : "false") << LL_ENDL; + + //LLInventoryObject::const_object_list_t obj_array; + //obj_array.push_back(LLConstPointer(target_item)); + //LLPointer cb = new LLBoostFuncInventoryCallback(boost::bind(&LLFloaterLinkReplace::linkCreatedCallback, + // getDerivedHandle(), + // source_item->getUUID(), + // target_item->getUUID(), + // needs_wearable_ordering_update, + // needs_description_update, + // (is_outfit_folder ? source_item->getParentUUID() : LLUUID::null) )); + //link_inventory_array(source_item->getParentUUID(), obj_array, cb); + bool is_outfit_folder = gInventory.isObjectDescendentOf(source_item->getParentUUID(), outfit_folder_id); // If either the new or old item in the COF is a wearable, we need to update wearable ordering after the link has been replaced - bool needs_wearable_ordering_update = (is_outfit_folder && source_item->getType() == LLAssetType::AT_CLOTHING) || target_item->getType() == LLAssetType::AT_CLOTHING; + bool needs_wearable_ordering_update = (is_outfit_folder && source_item->getType() == LLAssetType::AT_CLOTHING) || (!mDeleteOnly && target_item->getType() == LLAssetType::AT_CLOTHING); // Other items in the COF need a description update (description of the actual link item must be empty) - bool needs_description_update = is_outfit_folder && target_item->getType() != LLAssetType::AT_CLOTHING; + bool needs_description_update = !mDeleteOnly && is_outfit_folder && target_item->getType() != LLAssetType::AT_CLOTHING; LL_DEBUGS() << "is_outfit_folder = " << (is_outfit_folder ? "true" : "false") << LL_NEWLINE << "needs_wearable_ordering_update = " << (needs_wearable_ordering_update ? "true" : "false") << LL_NEWLINE << "needs_description_update = " << (needs_description_update ? "true" : "false") << LL_ENDL; - LLInventoryObject::const_object_list_t obj_array; - obj_array.push_back(LLConstPointer(target_item)); - LLPointer cb = new LLBoostFuncInventoryCallback(boost::bind(&LLFloaterLinkReplace::linkCreatedCallback, - getDerivedHandle(), - source_item->getUUID(), - target_item->getUUID(), - needs_wearable_ordering_update, - needs_description_update, - (is_outfit_folder ? source_item->getParentUUID() : LLUUID::null) )); - link_inventory_array(source_item->getParentUUID(), obj_array, cb); + if (!mDeleteOnly) + { + LLInventoryObject::const_object_list_t obj_array; + obj_array.push_back(LLConstPointer(target_item)); + LLPointer cb = new LLBoostFuncInventoryCallback(boost::bind(&LLFloaterLinkReplace::linkCreatedCallback, + getDerivedHandle(), + source_item->getUUID(), + target_item->getUUID(), + needs_wearable_ordering_update, + needs_description_update, + (is_outfit_folder ? source_item->getParentUUID() : LLUUID::null))); + link_inventory_array(source_item->getParentUUID(), obj_array, cb); + } + else + { + LLUUID outfit_update_folder_id = LLUUID::null; + if (needs_wearable_ordering_update) + { + outfit_update_folder_id = outfit_folder_id; + } + LLPointer cb = new LLBoostFuncInventoryCallback(boost::bind(&LLFloaterLinkReplace::itemRemovedCallback, getDerivedHandle(), outfit_update_folder_id)); + remove_inventory_object(source_item->getUUID(), cb); + LL_INFOS() << "Requested delete of " << source_item->getUUID() << LL_ENDL; + } + // } else { diff --git a/indra/newview/llfloaterlinkreplace.h b/indra/newview/llfloaterlinkreplace.h index dd5c301206..e10febd1cd 100644 --- a/indra/newview/llfloaterlinkreplace.h +++ b/indra/newview/llfloaterlinkreplace.h @@ -33,6 +33,7 @@ #include "lllineeditor.h" #include "llinventoryfunctions.h" #include "llviewerinventory.h" +#include "llcheckboxctrl.h" // FIRE-17695 - Delete links capability class LLButton; class LLTextBox; @@ -104,12 +105,14 @@ private: void onSourceItemDrop(const LLUUID& source_item_id); void onTargetItemDrop(const LLUUID& target_item_id); + void onDeleteOnlyToggle();// FIRE-17695 - Delete links capability LLInventoryLinkReplaceDropTarget* mSourceEditor; LLInventoryLinkReplaceDropTarget* mTargetEditor; LLButton* mStartBtn; LLButton* mRefreshBtn; LLTextBox* mStatusText; + LLCheckBoxCtrl* mDeleteOnlyToggle;// FIRE-17695 - Delete links capability LLUUID mSourceUUID; LLUUID mTargetUUID; @@ -117,6 +120,7 @@ private: U32 mBatchSize; LLInventoryModel::item_array_t mRemainingInventoryItems; + bool mDeleteOnly;// FIRE-17695 - Delete links capability }; #endif // LL_FLOATERLINKREPLACE_H diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index bc1e424982..99a388309f 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -3060,19 +3060,35 @@ void LLModelPreview::updateStatusMessages() U16 index_a = face.mIndices[k+0]; U16 index_b = face.mIndices[k+1]; U16 index_c = face.mIndices[k+2]; + // FIRE-23367/23387 - Allow forced empty triangle placeholders created by the LOD processing. + // LLVector4a v1; v1.setMul(face.mPositions[index_a], scale); + // LLVector4a v2; v2.setMul(face.mPositions[index_b], scale); + // LLVector4a v3; v3.setMul(face.mPositions[index_c], scale); - LLVector4a v1; v1.setMul(face.mPositions[index_a], scale); - LLVector4a v2; v2.setMul(face.mPositions[index_b], scale); - LLVector4a v3; v3.setMul(face.mPositions[index_c], scale); - - if (ll_is_degenerate(v1,v2,v3)) + // if (ll_is_degenerate(v1, v2, v3)) + // { + // mHasDegenerate = true;// make has_degenerate a member + // } + // else + // { + // k += 3; + // } + if (index_c == 0 && index_b == 0 && index_a == 0) // test in reverse as 3rd index is less likely to be 0 in a normal case { - mHasDegenerate = true;// make has_degenerate a member + LL_DEBUGS("MeshValidation") << "Empty placeholder triangle (3 identical index 0 verts) ignored" << LL_ENDL; } else { - k += 3; + LLVector4a v1; v1.setMul(face.mPositions[index_a], scale); + LLVector4a v2; v2.setMul(face.mPositions[index_b], scale); + LLVector4a v3; v3.setMul(face.mPositions[index_c], scale); + if (ll_is_degenerate(v1, v2, v3)) + { + mHasDegenerate = true;// make has_degenerate a member + } } + k += 3; + // } } } @@ -3319,7 +3335,7 @@ void LLModelPreview::updateStatusMessages() //if (!mModelNoErrors || mHasDegenerate) //{ // mFMP->childDisable("ok_btn"); - if (!mModelNoErrors || (has_physics_error > PhysicsError::NOHAVOK)) // block for all cases of phsyics error except NOHAVOK + if ((gSavedSettings.getBOOL("FSIgnoreClientsideMeshValidation")==FALSE) && (!mModelNoErrors || (has_physics_error > PhysicsError::NOHAVOK))) // block for all cases of phsyics error except NOHAVOK { mFMP->childDisable("ok_btn"); mFMP->childDisable("calculate_btn"); diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index 68181e96cc..81d7b04454 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -2118,7 +2118,7 @@ bool LLTextureCache::writeToFastCache(LLUUID image_id, S32 id, LLPointergetValue().asBoolean()) flags |= LLPartData::LL_PART_WIND_MASK; if (mRibbonCheckBox->getValue().asBoolean()) flags |= LLPartData::LL_PART_RIBBON_MASK; mParticles.mPartData.setFlags(flags); + mParticles.setUseNewAngle(); mParticles.mTargetUUID = mTargetKeyInput->getValue().asUUID(); diff --git a/indra/newview/skins/default/xui/de/floater_linkreplace.xml b/indra/newview/skins/default/xui/de/floater_linkreplace.xml index 29e37e9f41..42dd6ceab8 100644 --- a/indra/newview/skins/default/xui/de/floater_linkreplace.xml +++ b/indra/newview/skins/default/xui/de/floater_linkreplace.xml @@ -1,5 +1,5 @@ - + Bereit... @@ -18,14 +18,21 @@ Ersetzen von Inventar-Links beendet. + + Keine Ersetzung. + Alt: + + Verknüpfungen zu diesem Objekt werden entfernt. + Neu: + Bereit... diff --git a/indra/newview/skins/default/xui/en/floater_linkreplace.xml b/indra/newview/skins/default/xui/en/floater_linkreplace.xml index 83d4de8993..9eaf9df5a0 100644 --- a/indra/newview/skins/default/xui/en/floater_linkreplace.xml +++ b/indra/newview/skins/default/xui/en/floater_linkreplace.xml @@ -5,7 +5,7 @@ positioning="centered" title="Replace Inventory Links" width="333" - height="130" + height="150" save_rect="true" can_minimize="true" can_close="true"> @@ -27,6 +27,9 @@ Finished replacing inventory links. + + No replacement. + + + Links to this item will be removed. + + top_delta="0"> New: + + name="Refresh Attachments" + shortcut="alt|shift|R"> diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml index 6e11be94cb..84fd135896 100644 --- a/indra/newview/skins/default/xui/it/notifications.xml +++ b/indra/newview/skins/default/xui/it/notifications.xml @@ -2471,8 +2471,8 @@ URL: [MEDIAURL] Questo lotto fornisce musica da : -Dominio: [MEDIADOMAIN] -URL: [MEDIAURL] +Dominio: [AUDIODOMAIN] +URL: [AUDIOURL]