diff --git a/.github/workflows/build_viewer.yml b/.github/workflows/build_viewer.yml
index cdb0a069db..48cbc704de 100644
--- a/.github/workflows/build_viewer.yml
+++ b/.github/workflows/build_viewer.yml
@@ -1,6 +1,11 @@
name: Build viewer
on:
workflow_dispatch:
+ inputs:
+ include_tracy:
+ description: 'Include tracy profiling builds'
+ required: false
+ default: 'false'
push:
branches:
- "Firestorm*.*.*"
@@ -116,7 +121,11 @@ jobs:
elif [[ "${{ github.ref_name }}" == *nightly* ]] || [[ "${{ github.event_name }}" == 'schedule' ]]; then
FS_RELEASE_TYPE=Nightly
elif [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
- FS_RELEASE_TYPE=Manual
+ if [[ "${{ github.event.inputs.include_tracy }}" == "false" ]]; then
+ FS_RELEASE_TYPE=Manual
+ elif [[ "${{ github.event.inputs.include_tracy }}" == "true" ]]; then
+ FS_RELEASE_TYPE=Profiling
+ fi
fi
if [[ "${{ matrix.addrsize }}" == "64" ]]; then
FS_RELEASE_CHAN="${FS_RELEASE_TYPE}x64"
@@ -243,7 +252,7 @@ jobs:
- name: Set expiration days based on FS_RELEASE_TYPE
run: |
case "${{ env.FS_RELEASE_TYPE }}" in
- "Nightly" | "Manual")
+ "Nightly" | "Manual" | "Profiling")
EXPIRE_DAYS=14
;;
"Alpha")
@@ -264,6 +273,10 @@ jobs:
echo "EXTRA_ARGS=${{ env.EXTRA_ARGS}}" >> $GITHUB_ENV
fi
shell: bash
+ - name: Add tracy builds for dev use if selected (manual builds only).
+ if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.include_tracy == 'true' }}
+ shell: bash
+ run: echo "EXTRA_ARGS=${{ env.EXTRA_ARGS }} --tracy" >> $GITHUB_ENV
- name: Clean up packages to give more space
run: rm *${{ env.fallback_platform }}*bz2
@@ -344,11 +357,14 @@ jobs:
FS_RELEASE_FOLDER:
if: always()
steps:
- - name: Checkout files
- uses: Bhacaz/checkout-files@v2
+ - name: Checkout repository
+ uses: actions/checkout@v4
with:
- files: fsutils/download_list.py
- branch: ${{ github.head_ref || github.ref_name || 'master' }}
+ sparse-checkout: |
+ fsutils/download_list.py
+ sparse-checkout-cone-mode: false
+ ref: ${{ github.head_ref || github.ref_name || 'master' }}
+ fetch-depth: 1
- name: Install discord-webhook library
run: pip install discord-webhook
diff --git a/autobuild.xml b/autobuild.xml
index 642975f067..e6b7a0fa32 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -2752,15 +2752,43 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
archive
name
windows
+ linux
+
+ darwin
+
+ archive
+
+ hash
+ f87f9db3a3c69464b46cd59490bca842
+ hash_algorithm
+ md5
+ url
+ https://3p.firestormviewer.org/tracy-v0.10.241831925-darwin-241831925.tar.bz2
+
+ name
+ darwin
+
license
bsd
diff --git a/doc/building_linux.md b/doc/building_linux.md
index eeeb950728..92348765ca 100644
--- a/doc/building_linux.md
+++ b/doc/building_linux.md
@@ -158,7 +158,7 @@ Available premade firestorm-specific build targets:
```
ReleaseFS (includes KDU, FMOD)
ReleaseFS_open (no KDU, no FMOD)
-RelWithDebInfo_open (no KDU, no FMOD)
+RelWithDebInfoFS_open (no KDU, no FMOD)
```
### Configuration Switches
diff --git a/indra/llcommon/llmemory.cpp b/indra/llcommon/llmemory.cpp
index 4b7d60d654..f7162bcf6e 100644
--- a/indra/llcommon/llmemory.cpp
+++ b/indra/llcommon/llmemory.cpp
@@ -39,6 +39,7 @@
#elif LL_LINUX
# include
# include
+# include
#endif
#include "llmemory.h"
@@ -85,6 +86,7 @@ void LLMemory::initMaxHeapSizeGB(F32Gigabytes max_heap_size)
void LLMemory::updateMemoryInfo()
{
LL_PROFILE_ZONE_SCOPED
+ U32Kilobytes avail_phys; // align MemInfo across platforms
#if LL_WINDOWS
PROCESS_MEMORY_COUNTERS counters;
@@ -95,23 +97,25 @@ void LLMemory::updateMemoryInfo()
}
sAllocatedMemInKB = U32Kilobytes::convert(U64Bytes(counters.WorkingSetSize));
- sample(sAllocatedMem, sAllocatedMemInKB);
+ // sample(sAllocatedMem, sAllocatedMemInKB); // align MemInfo across platforms
sAllocatedPageSizeInKB = U32Kilobytes::convert(U64Bytes(counters.PagefileUsage));
sample(sVirtualMem, sAllocatedPageSizeInKB);
+ // align MemInfo across platforms
+ // U32Kilobytes avail_phys, avail_virtual;
+ // LLMemoryInfo::getAvailableMemoryKB(avail_phys, avail_virtual) ;
+ // sMaxPhysicalMemInKB = llmin(avail_phys + sAllocatedMemInKB, sMaxHeapSizeInKB);
- U32Kilobytes avail_phys, avail_virtual;
+ // if(sMaxPhysicalMemInKB > sAllocatedMemInKB)
+ // {
+ // sAvailPhysicalMemInKB = sMaxPhysicalMemInKB - sAllocatedMemInKB ;
+ // }
+ // else
+ // {
+ // sAvailPhysicalMemInKB = U32Kilobytes(0);
+ // }
+ U32Kilobytes avail_virtual;
LLMemoryInfo::getAvailableMemoryKB(avail_phys, avail_virtual) ;
- sMaxPhysicalMemInKB = llmin(avail_phys + sAllocatedMemInKB, sMaxHeapSizeInKB);
-
- if(sMaxPhysicalMemInKB > sAllocatedMemInKB)
- {
- sAvailPhysicalMemInKB = sMaxPhysicalMemInKB - sAllocatedMemInKB ;
- }
- else
- {
- sAvailPhysicalMemInKB = U32Kilobytes(0);
- }
-
+ //
#elif defined(LL_DARWIN)
task_vm_info info;
mach_msg_type_number_t infoCount = TASK_VM_INFO_COUNT;
@@ -147,21 +151,47 @@ void LLMemory::updateMemoryInfo()
if (result == KERN_SUCCESS) {
// This is what Chrome reports as 'the "Physical Memory Free" value reported by the Memory Monitor in Instruments.'
// Note though that inactive pages are not included here and not yet free, but could become so under memory pressure.
- sAvailPhysicalMemInKB = U32Bytes(vmstat.free_count * page_size);
- sMaxPhysicalMemInKB = LLMemoryInfo::getHardwareMemSize();
- }
+ // align MemInfo across platforms
+ // sAvailPhysicalMemInKB = U32Bytes(vmstat.free_count * page_size);
+ // sMaxPhysicalMemInKB = LLMemoryInfo::getHardwareMemSize();
+ avail_phys = U32Bytes(vmstat.free_count * page_size);
+ sMaxHeapSizeInKB = LLMemoryInfo::getHardwareMemSize();
+ //
+ }
else
{
LL_WARNS() << "task_info failed" << LL_ENDL;
}
-
+ // align MemInfo across platforms
+#elif defined(LL_LINUX)
+ // Use sysinfo() to get the total physical memory.
+ struct sysinfo info;
+ sysinfo(&info);
+ sMaxHeapSizeInKB = U32Kilobytes::convert((U64Bytes)info.totalram); // Total RAM in system
+ avail_phys = U32Kilobytes::convert((U64Bytes)info.freeram); // Total Free RAM in system
+ sAllocatedMemInKB = U32Kilobytes::convert(U64Bytes(LLMemory::getCurrentRSS())); // represents the RAM allocated by this process only (inline with the windows implementation)
+ //
#else
//not valid for other systems for now.
+ LL_WARNS() << "LLMemory::updateMemoryInfo() not implemented for this platform." << LL_ENDL;
sAllocatedMemInKB = U64Bytes(LLMemory::getCurrentRSS());
sMaxPhysicalMemInKB = U64Bytes(U32_MAX);
sAvailPhysicalMemInKB = U64Bytes(U32_MAX);
#endif
+ // align MemInfo across platforms
+ sample(sAllocatedMem, sAllocatedMemInKB);
+ // sMaxPhysicalMem - max this process can use = the lesser of (what we already have + what's available) or MaxHeap
+ sMaxPhysicalMemInKB = llmin(avail_phys + sAllocatedMemInKB, sMaxHeapSizeInKB);
+ if(sMaxPhysicalMemInKB > sAllocatedMemInKB)
+ {
+ sAvailPhysicalMemInKB = sMaxPhysicalMemInKB - sAllocatedMemInKB ;
+ }
+ else
+ {
+ sAvailPhysicalMemInKB = U32Kilobytes(0);
+ }
+ //
return ;
}
diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp
index 96801da2ae..1620253875 100644
--- a/indra/llcommon/llqueuedthread.cpp
+++ b/indra/llcommon/llqueuedthread.cpp
@@ -427,11 +427,20 @@ void LLQueuedThread::processRequest(LLQueuedThread::QueuedRequest* req)
if (req)
{
// Deferred retry requests
- // Potentially when there is nothing else to do this will loop until the retry time.
+ // Avoid loop when idle by restoring a sleep
// note that when there is nothing to do the thread still sleeps normally.
- if( req->mDeferUntil > LL::WorkQueue::TimePoint::clock::now() )
+ using namespace std::chrono_literals;
+
+ const auto throttle_time = 2ms;
+ if( req->mDeferUntil > LL::WorkQueue::TimePoint::clock::now())
+ {
+ ms_sleep(throttle_time.count());
+ }
+ // if we're still not ready to retry then requeue
+ if( req->mDeferUntil > LL::WorkQueue::TimePoint::clock::now())
{
LL_PROFILE_ZONE_NAMED("qtpr - defer requeue");
+
lockData();
req->setStatus(STATUS_QUEUED);
mRequestQueue.post([this, req]() { processRequest(req); });
@@ -487,7 +496,6 @@ void LLQueuedThread::processRequest(LLQueuedThread::QueuedRequest* req)
llassert(ret);
#else
using namespace std::chrono_literals;
- auto retry_time = LL::WorkQueue::TimePoint::clock::now() + 2ms; // reduce delay on retry
// improve retry behaviour
// mRequestQueue.post([=]
// {
@@ -503,6 +511,8 @@ void LLQueuedThread::processRequest(LLQueuedThread::QueuedRequest* req)
// }
// processRequest(req);
// });
+ const auto retry_backoff = 16ms;
+ auto retry_time = LL::WorkQueue::TimePoint::clock::now() + retry_backoff;
req->defer_until(retry_time);
LL_PROFILE_ZONE_NAMED("processRequest - post deferred");
mRequestQueue.post([this, req]() { processRequest(req); });
diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index 7963977d29..ccd513ea58 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -1014,7 +1014,6 @@ LLBoundListener LLNotificationChannelBase::connectChangedImpl(const LLEventListe
LLBoundListener LLNotificationChannelBase::connectAtFrontChangedImpl(const LLEventListener& slot)
{
- LLMutexLock lock(&mItemsMutex); // Guard against against unlocked access to mItems
for (LLNotificationSet::iterator it = mItems.begin(); it != mItems.end(); ++it)
{
slot(LLSD().with("sigtype", "load").with("id", (*it)->id()));
@@ -1053,17 +1052,10 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload)
bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPtr pNotification)
{
std::string cmd = payload["sigtype"];
- // Guard against unlocked access to mItems
- // LLNotificationSet::iterator foundItem = mItems.find(pNotification);
- // bool wasFound = (foundItem != mItems.end());
- bool wasFound = false;
- {
- LLMutexLock lock(&mItemsMutex);
- LLNotificationSet::iterator foundItem = mItems.find(pNotification);
- wasFound = (foundItem != mItems.end());
- }
- //
+ LLNotificationSet::iterator foundItem = mItems.find(pNotification);
+ bool wasFound = (foundItem != mItems.end());
bool passesFilter = mFilter ? mFilter(pNotification) : true;
+
// first, we offer the result of the filter test to the simple
// signals for pass/fail. One of these is guaranteed to be called.
// If either signal returns true, the change processing is NOT performed
@@ -1092,7 +1084,6 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt
assert(!wasFound);
if (passesFilter)
{
- LLMutexLock lock(&mItemsMutex); // Guard against unlocked access to mItems
// not in our list, add it and say so
mItems.insert(pNotification);
onLoad(pNotification);
@@ -1116,7 +1107,6 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt
}
else
{
- LLMutexLock lock(&mItemsMutex); // Guard against unlocked access to mItems
// not in our list, add it and say so
mItems.insert(pNotification);
onChange(pNotification);
@@ -1130,7 +1120,6 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt
{
if (wasFound)
{
- LLMutexLock lock(&mItemsMutex); // Guard against unlocked access to mItems
// it already existed, so this is a delete
mItems.erase(pNotification);
onChange(pNotification);
@@ -1149,7 +1138,6 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt
assert(!wasFound);
if (passesFilter)
{
- LLMutexLock lock(&mItemsMutex); // Guard against unlocked access to mItems
// not in our list, add it and say so
mItems.insert(pNotification);
onAdd(pNotification);
@@ -1161,7 +1149,6 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt
// if we have it in our list, pass on the delete, then delete it, else do nothing
if (wasFound)
{
- LLMutexLock lock(&mItemsMutex); // Guard against unlocked access to mItems
onDelete(pNotification);
abortProcessing = mChanged(payload);
mItems.erase(pNotification);
@@ -1263,8 +1250,7 @@ LLNotifications::LLNotifications()
: LLNotificationChannelBase(LLNotificationFilters::includeEverything),
mIgnoreAllNotifications(false)
{
- // Disable test API
- //mListener.reset(new LLNotificationsListener(*this));
+ mListener.reset(new LLNotificationsListener(*this));
LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Notification.Show", boost::bind(&LLNotifications::addFromCallback, this, _2));
// touch the instance tracker for notification channels, so that it will still be around in our destructor
@@ -1727,7 +1713,6 @@ void LLNotifications::add(const LLNotificationPtr pNotif)
if (pNotif == NULL) return;
// first see if we already have it -- if so, that's a problem
- LLMutexLock lock(&mItemsMutex); // Guard against unlocked acceess to mItems
LLNotificationSet::iterator it=mItems.find(pNotif);
if (it != mItems.end())
{
diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h
index 4e2bd85e29..5d46e48cf3 100644
--- a/indra/llui/llnotifications.h
+++ b/indra/llui/llnotifications.h
@@ -98,8 +98,7 @@
#include "llrefcount.h"
#include "llsdparam.h"
-// Disable test API
-//#include "llnotificationslistener.h"
+#include "llnotificationslistener.h"
class LLAvatarName;
typedef enum e_notification_priority
@@ -999,8 +998,7 @@ private:
bool mIgnoreAllNotifications;
- // Disable test API
- //std::unique_ptr mListener;
+ std::unique_ptr mListener;
std::vector mDefaultChannels;
};
diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp
index abca90011f..83ebe2bfde 100644
--- a/indra/llui/lluictrlfactory.cpp
+++ b/indra/llui/lluictrlfactory.cpp
@@ -141,7 +141,9 @@ void LLUICtrlFactory::createChildren(LLView* viewp, LLXMLNodePtr node, const wid
//LL_WARNS() << child_name << " is not a valid child of " << node->getName()->mString << LL_ENDL;
std::string name;
node->getAttributeString("name", name);
- LL_WARNS() << child_name << " is not a valid child of " << node->getName()->mString << " for " << name << " (line no. " << node->getLineNumber() << ")" << LL_ENDL;
+ std::string child_name_attribute;
+ child_node->getAttributeString("name", child_name_attribute);
+ LL_WARNS() << child_name << " with name " << child_name_attribute << " is not a valid child of " << node->getName()->mString << " for " << name << " (line no. " << node->getLineNumber() << ")" << LL_ENDL;
//
}
else
@@ -150,7 +152,9 @@ void LLUICtrlFactory::createChildren(LLView* viewp, LLXMLNodePtr node, const wid
//LL_WARNS() << "Could not create widget named " << child_node->getName()->mString << LL_ENDL;
std::string name;
node->getAttributeString("name", name);
- LL_WARNS() << "Could not create widget named " << child_node->getName()->mString << " for " << name << " (line no. " << node->getLineNumber() << ")" << LL_ENDL;
+ std::string child_name_attribute;
+ child_node->getAttributeString("name", child_name_attribute);
+ LL_WARNS() << "Could not create widget " << child_node->getName()->mString << " with name " << child_name_attribute << " for " << name << " (line no. " << node->getLineNumber() << ")" << LL_ENDL;
//
}
}
diff --git a/indra/newview/app_settings/graphic_preset_controls.xml b/indra/newview/app_settings/graphic_preset_controls.xml
index 5a08a37639..26bdee3ef2 100644
--- a/indra/newview/app_settings/graphic_preset_controls.xml
+++ b/indra/newview/app_settings/graphic_preset_controls.xml
@@ -20,7 +20,6 @@
RenderAvatarMaxComplexity
RenderAvatarMaxNonImpostors
RenderAvatarPhysicsLODFactor
- RenderCloudShadowAmbianceFactor
RenderCompressTextures
RenderDeferredSSAO
RenderDepthOfField
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index bfb600ba54..219901ae78 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -2186,6 +2186,28 @@
Value
http://lecs-viewer-web-components.s3.amazonaws.com/v3.0/[GRID_LOWERCASE]/avatars.html
+ AvatarRotateThresholdSlow
+
+ Comment
+ Angle between avatar facing and camera facing at which avatar turns to face same direction as camera, when moving slowly (degrees)
+ Persist
+ 1
+ Type
+ F32
+ Value
+ 60
+
+ AvatarRotateThresholdFast
+
+ Comment
+ Angle between avatar facing and camera facing at which avatar turns to face same direction as camera, when moving fast (degrees)
+ Persist
+ 1
+ Type
+ F32
+ Value
+ 2
+
AvatarBakedTextureUploadTimeout
Comment
@@ -14970,6 +14992,19 @@ Change of this parameter will affect the layout of buttons in notification toast
Backup
0
+ TextureBiasUnimportantFactor
+
+ Comment
+ When biasing textures to lower resolution due to lack of vram, the importance threshold below which is considered unimportant and getting an extra bias.
+ Persist
+ 1
+ Type
+ F32
+ Value
+ 0.25
+ Backup
+ 0
+
TextureDecodeDisabled
Comment
@@ -25706,5 +25741,16 @@ Change of this parameter will affect the layout of buttons in notification toast
Value
1
+ FSMinFreeMainMemoryTextureDiscardThreshold
+
+ Comment
+ Minimum of available physical memory in MB before textures get scaled down
+ Persist
+ 1
+ Type
+ S32
+ Value
+ 512
+
diff --git a/indra/newview/fspanelface.cpp b/indra/newview/fspanelface.cpp
index 0852968418..9edadb68de 100644
--- a/indra/newview/fspanelface.cpp
+++ b/indra/newview/fspanelface.cpp
@@ -1980,10 +1980,6 @@ void FSPanelFace::updateUI(bool force_set_values /*false*/)
mCheckFullbright->setValue((S32)(fullbright_flag != 0));
mCheckFullbright->setEnabled(editable );
mCheckFullbright->setTentative(!identical_fullbright);
-
- // TODO: find a better way to do this without relying on the name -Zi
- childSetEnabled("panel_material_type_media", !has_pbr_material);
- LL_DEBUGS("ENABLEDISABLETOOLS") << "panel_material_type_media " << !has_pbr_material << LL_ENDL;
}
// Repeats per meter
@@ -5985,22 +5981,22 @@ void FSPanelFace::selectPBRChannel(S32 pbr_channel)
{
if (pbr_channel == PBRTYPE_NORMAL)
{
- mTabsMatChannel->selectTabByName("panel_pbr_transforms_base_color");
+ mTabsPBRChannel->selectTabByName("panel_pbr_transforms_normal");
}
else if (pbr_channel == PBRTYPE_BASE_COLOR)
{
- mTabsMatChannel->selectTabByName("panel_pbr_transforms_normal");
+ mTabsPBRChannel->selectTabByName("panel_pbr_transforms_base_color");
}
else if (pbr_channel == PBRTYPE_METALLIC_ROUGHNESS)
{
- mTabsMatChannel->selectTabByName("panel_pbr_transforms_metallic");
+ mTabsPBRChannel->selectTabByName("panel_pbr_transforms_metallic");
}
else if (pbr_channel == PBRTYPE_EMISSIVE)
{
- mTabsMatChannel->selectTabByName("panel_pbr_transforms_emissive");
+ mTabsPBRChannel->selectTabByName("panel_pbr_transforms_emissive");
}
else
{
- mTabsMatChannel->selectTabByName("panel_pbr_transforms_all");
+ mTabsPBRChannel->selectTabByName("panel_pbr_transforms_all");
}
}
diff --git a/indra/newview/fspanelradar.cpp b/indra/newview/fspanelradar.cpp
index 74e0ee826e..2d9c546549 100644
--- a/indra/newview/fspanelradar.cpp
+++ b/indra/newview/fspanelradar.cpp
@@ -331,6 +331,8 @@ void FSPanelRadar::updateList(const std::vector& entries, const LLSD& stat
mRadarList->clearRows();
for (const auto& avdata : entries)
{
+ constexpr char font_name[] = "SANSSERIF_SMALL";
+
LLSD entry = avdata["entry"];
LLSD options = avdata["options"];
@@ -338,10 +340,12 @@ void FSPanelRadar::updateList(const std::vector& entries, const LLSD& stat
row_data["value"] = entry["id"];
row_data["columns"][0]["column"] = "name";
row_data["columns"][0]["value"] = entry["name"];
+ row_data["columns"][0]["font"] = font_name;
row_data["columns"][1]["column"] = "voice_level";
row_data["columns"][1]["type"] = "icon";
row_data["columns"][1]["value"] = ""; // Need to set it after the row has been created because it's to big for the row
+ row_data["columns"][1]["font"] = font_name;
row_data["columns"][2]["column"] = "in_region";
row_data["columns"][2]["type"] = "icon";
@@ -377,13 +381,16 @@ void FSPanelRadar::updateList(const std::vector& entries, const LLSD& stat
row_data["columns"][7]["column"] = "age";
row_data["columns"][7]["value"] = entry["age"];
row_data["columns"][7]["halign"] = "right";
+ row_data["columns"][7]["font"] = font_name;
row_data["columns"][8]["column"] = "seen";
row_data["columns"][8]["value"] = entry["seen"];
row_data["columns"][8]["halign"] = "right";
+ row_data["columns"][8]["font"] = font_name;
row_data["columns"][9]["column"] = "range";
row_data["columns"][9]["value"] = entry["range"];
+ row_data["columns"][9]["font"] = font_name;
row_data["columns"][10]["column"] = "seen_sort";
row_data["columns"][10]["value"] = entry["seen"].asString() + "_" + entry["name"].asString();
diff --git a/indra/newview/installers/darwin/apple-notarize.sh b/indra/newview/installers/darwin/apple-notarize.sh
index cd3f9eb803..c8ff10df5c 100755
--- a/indra/newview/installers/darwin/apple-notarize.sh
+++ b/indra/newview/installers/darwin/apple-notarize.sh
@@ -23,13 +23,23 @@ if [[ -f "$CONFIG_FILE" ]]; then
echo "Notarytool submit:"
echo $res
- [[ "$res" =~ 'id: '([^[:space:]]+) ]]
- match=$?
- echo "Notarized with id: [$match]"
+ if [[ "$res" =~ id:\ ([^[:space:]]+) ]]; then
+ match="${BASH_REMATCH[1]}"
+ echo "Notarized with id: [$match]"
+ else
+ echo "No match found"
+ fi
# if [[ ! $match -eq 0 ]]; then
echo "Running Stapler"
xcrun stapler staple "$app_file"
+ # Delete the zip file to stop it being packed in the dmg
+ rm -f "$zip_file"
+ if [[ $? -eq 0 ]]; then
+ echo "$zip_file deleted successfully."
+ else
+ echo "Failed to delete $zip_file"
+ fi
exit 0
# else
# echo "Notarization error"
@@ -39,4 +49,7 @@ if [[ -f "$CONFIG_FILE" ]]; then
echo "Notarization error: ditto failed"
exit 1
fi
+else
+ echo "No config file found - check notarize_creds is present in the secrets"
+ exit 1
fi
diff --git a/indra/newview/lggcontactsets.cpp b/indra/newview/lggcontactsets.cpp
index cd3dbf7309..df5cbb8aa9 100644
--- a/indra/newview/lggcontactsets.cpp
+++ b/indra/newview/lggcontactsets.cpp
@@ -320,6 +320,8 @@ LLColor4 LGGContactSets::colorize(const LLUUID& uuid, LLColor4 color, ContactSet
color = LLUIColorTable::instance().getColor("MapAvatarSelfColor", LLColor4::white).get();
break;
case ContactSetType::RADAR:
+ // Do nothing
+ break;
default:
LL_DEBUGS("ContactSets") << "Unhandled colorize case!" << LL_ENDL;
break;
@@ -378,6 +380,8 @@ LLColor4 LGGContactSets::colorize(const LLUUID& uuid, LLColor4 color, ContactSet
color = LLUIColorTable::instance().getColor("MapAvatarMutedColor", LLColor4::grey3).get();
break;
case ContactSetType::RADAR:
+ // Do nothing
+ break;
default:
LL_DEBUGS("ContactSets") << "Unhandled colorize case!" << LL_ENDL;
break;
@@ -398,6 +402,8 @@ LLColor4 LGGContactSets::colorize(const LLUUID& uuid, LLColor4 color, ContactSet
color = LLUIColorTable::instance().getColor("MapAvatarFirestormColor", LLColor4::red).get();
break;
case ContactSetType::RADAR:
+ // Do nothing
+ break;
default:
LL_DEBUGS("ContactSets") << "Unhandled colorize case!" << LL_ENDL;
break;
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 639fce0248..5e78459d3a 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -3313,7 +3313,6 @@ bool LLAppViewer::initConfiguration()
gSavedSettings.getString("SkinCurrentTheme"),
gSavedSettings.getString("Language"));
loadSettingsFromDirectory("CurrentSkin");
- loadSettingsFromDirectory("User");
// [/SL:KB]
// gDirUtilp->setSkinFolder(skinfolder->getValue().asString(),
// gSavedSettings.getString("Language"));
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 8878cb62f2..153addef1f 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -372,7 +372,7 @@ private:
};
// consts from viewer.h
-const S32 AGENT_UPDATES_PER_SECOND = 10;
+const S32 AGENT_UPDATES_PER_SECOND = 125; // FIRE-34171 - Directional Input Delays with latest PBR-Capable Viewers
const S32 AGENT_FORCE_UPDATES_PER_SECOND = 1;
// Globals with external linkage. From viewer.h
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index 6f5190b5b9..00d31bcdd9 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -302,6 +302,7 @@ bool LLFloaterTools::postBuild()
LLSelectMgr::instance().setFSShowHideHighlight(FS_SHOW_HIDE_HIGHLIGHT_NORMAL);
mCheckActualRoot = getChild("checkbox actual root");
+ mCheckSelectProbes = getChild("checkbox select probes");
//
@@ -428,6 +429,7 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)
//
mCheckShowHighlight(NULL),
mCheckActualRoot(NULL),
+ mCheckSelectProbes(NULL),
//
mBtnRotateLeft(NULL),
@@ -1014,6 +1016,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
//
if (mCheckShowHighlight) mCheckShowHighlight->setVisible( edit_visible );
if (mCheckActualRoot) mCheckActualRoot->setVisible( edit_visible );
+ if (mCheckSelectProbes) mCheckSelectProbes->setVisible( edit_visible );
//
// Create buttons
diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h
index 35ac55b4c6..95ab1048c8 100644
--- a/indra/newview/llfloatertools.h
+++ b/indra/newview/llfloatertools.h
@@ -171,6 +171,7 @@ public:
LLCheckBoxCtrl* mCheckStretchTexture;
LLCheckBoxCtrl* mCheckShowHighlight; //Phoenix:KC
LLCheckBoxCtrl* mCheckActualRoot; //Phoenix:KC
+ LLCheckBoxCtrl* mCheckSelectProbes; //
// Ansariel: Reverted the hack because then when clicking the label it
// doesn't check the checkbox anymore!
diff --git a/indra/newview/llheroprobemanager.cpp b/indra/newview/llheroprobemanager.cpp
index 54ae38fb4d..552edcbcb7 100644
--- a/indra/newview/llheroprobemanager.cpp
+++ b/indra/newview/llheroprobemanager.cpp
@@ -211,6 +211,7 @@ void LLHeroProbeManager::update()
else
{
mNearestHero = nullptr;
+ mDefaultProbe->mViewerObject = nullptr; // FIRE-34201 TP crash
}
mHeroProbeStrength = 1;
@@ -219,6 +220,7 @@ void LLHeroProbeManager::update()
else
{
mNearestHero = nullptr;
+ mDefaultProbe->mViewerObject = nullptr; // FIRE-34201 TP crash
}
//
}
diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp
index e31f37233f..774812bcfd 100644
--- a/indra/newview/llpaneleditwearable.cpp
+++ b/indra/newview/llpaneleditwearable.cpp
@@ -1478,10 +1478,10 @@ void LLPanelEditWearable::updateTypeSpecificControls(LLWearableType::EType type)
if (type == LLWearableType::WT_SHAPE)
{
// Update avatar height
- // The .08 is a fudge factor derived by measuring against
+ // The .195 is a fudge factor derived by measuring against
// prims inworld, carried forward from Phoenix and adjusted
// after LL's calculation change for shape sizes. -- TS
- F32 new_size = gAgentAvatarp->mBodySize.mV[VZ] + .08f;
+ F32 new_size = gAgentAvatarp->mBodySize.mV[VZ] + .195f;
if (!gSavedSettings.getBOOL("HeightUnits"))
{
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 950bdf8eb2..6d83d13499 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -1277,11 +1277,13 @@ bool idle_startup()
gLoginMenuBarView->setVisible( true );
gLoginMenuBarView->setEnabled( true );
- LLNotificationsUI::LLScreenChannelBase* chat_channel = LLNotificationsUI::LLChannelManager::getInstance()->findChannelByID(LLNotificationsUI::NOTIFICATION_CHANNEL_UUID);
- if(chat_channel)
+ // Fixing chat toasts to not show on the login page when login progress screens are disabled.
+ LLNotificationsUI::LLScreenChannelBase* chat_channel = LLNotificationsUI::LLChannelManager::getInstance()->findChannelByID(LLNotificationsUI::NEARBY_CHAT_CHANNEL_UUID);
+ if (chat_channel)
{
chat_channel->removeToastsFromChannel();
}
+ //
show_debug_menus();
@@ -3984,11 +3986,13 @@ void reset_login()
}
// Hide any other stuff
- LLNotificationsUI::LLScreenChannelBase* chat_channel = LLNotificationsUI::LLChannelManager::getInstance()->findChannelByID(LLNotificationsUI::NOTIFICATION_CHANNEL_UUID);
- if(chat_channel)
+ // Fixing chat toasts to not show on the login page when login progress screens are disabled.
+ LLNotificationsUI::LLScreenChannelBase* chat_channel = LLNotificationsUI::LLChannelManager::getInstance()->findChannelByID(LLNotificationsUI::NEARBY_CHAT_CHANNEL_UUID);
+ if (chat_channel)
{
chat_channel->removeToastsFromChannel();
}
+ //
LLFloaterReg::hideVisibleInstances();
// Improved menu and navigation bar
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 5ede9ea817..6eff1aa84d 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -381,11 +381,6 @@ static void update_tp_display(bool minimized)
gViewerWindow->setProgressPercent(75.f);
}
- if (!gSavedSettings.getBOOL("FSDisableTeleportScreens"))
- {
- gAgentCamera.resetView(true, true);
- }
-
// FIRE-12004: Attachments getting lost on TP
gPostTeleportFinishKillObjectDelayTimer.reset();
break;
@@ -394,7 +389,7 @@ static void update_tp_display(bool minimized)
// Make the user wait while content "pre-caches"
{
F32 arrival_fraction = (gTeleportArrivalTimer.getElapsedTimeF32() / teleport_arrival_delay());
- if (arrival_fraction > 1.f || gSavedSettings.getBOOL("FSDisableTeleportScreens"))
+ if (arrival_fraction > 1.f)
{
arrival_fraction = 1.f;
//LLFirstUse::useTeleport();
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index a80d32271c..9b6721064e 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -507,6 +507,81 @@ void LLViewerTexture::initClass()
F32 texmem_lower_bound_scale = 0.85f;
F32 texmem_middle_bound_scale = 0.925f;
+//static
+bool LLViewerTexture::isMemoryForTextureLow()
+{
+ LL_PROFILE_ZONE_SCOPED_CATEGORY_TEXTURE;
+ // Disable memory checking on request
+ static LLCachedControl FSDisableMemCheck(gSavedSettings, "FSDisableAMDTextureMemoryCheck");
+ if (FSDisableMemCheck)
+ return false;
+ //
+
+ // Note: we need to figure out a better source for 'min' values,
+ // what is free for low end at minimal settings is 'nothing left'
+ // for higher end gpus at high settings.
+ const S32Megabytes MIN_FREE_TEXTURE_MEMORY(20);
+ const S32Megabytes MIN_FREE_MAIN_MEMORY(100);
+
+ S32Megabytes gpu;
+ S32Megabytes physical;
+ getGPUMemoryForTextures(gpu, physical);
+
+ return (gpu < MIN_FREE_TEXTURE_MEMORY); // || (physical < MIN_FREE_MAIN_MEMORY);
+}
+
+//static
+void LLViewerTexture::getGPUMemoryForTextures(S32Megabytes &gpu, S32Megabytes &physical)
+{
+ LL_PROFILE_ZONE_SCOPED_CATEGORY_TEXTURE;
+ static LLFrameTimer timer;
+
+ static S32Megabytes gpu_res = S32Megabytes(S32_MAX);
+ static S32Megabytes physical_res = S32Megabytes(S32_MAX);
+
+ if (timer.getElapsedTimeF32() < GPU_MEMORY_CHECK_WAIT_TIME) //call this once per second.
+ {
+ gpu = gpu_res;
+ physical = physical_res;
+ return;
+ }
+ timer.reset();
+
+ {
+ gpu_res = (S32Megabytes)gViewerWindow->getWindow()->getAvailableVRAMMegabytes();
+
+ //check main memory, only works for windows and macos.
+ LLMemory::updateMemoryInfo();
+ physical_res = LLMemory::getAvailableMemKB();
+
+ gpu = gpu_res;
+ physical = physical_res;
+ }
+}
+
+// Restrict texture memory by available physical system memory
+static bool isSystemMemoryForTextureLow()
+{
+ static LLFrameTimer timer;
+ static S32Megabytes physical_res = S32Megabytes(S32_MAX);
+
+ static LLCachedControl fs_min_free_main_memory(gSavedSettings, "FSMinFreeMainMemoryTextureDiscardThreshold");
+ const S32Megabytes MIN_FREE_MAIN_MEMORY(fs_min_free_main_memory);
+
+ if (timer.getElapsedTimeF32() < GPU_MEMORY_CHECK_WAIT_TIME) //call this once per second.
+ {
+ return physical_res < MIN_FREE_MAIN_MEMORY;
+ }
+
+ timer.reset();
+
+ //check main memory, only works for windows.
+ LLMemory::updateMemoryInfo();
+ physical_res = LLMemory::getAvailableMemKB();
+ return physical_res < MIN_FREE_MAIN_MEMORY;
+}
+//
+
//static
void LLViewerTexture::updateClass()
{
@@ -538,12 +613,33 @@ void LLViewerTexture::updateClass()
sFreeVRAMMegabytes = target - used;
F32 over_pct = llmax((used-target) / target, 0.f);
- sDesiredDiscardBias = llmax(sDesiredDiscardBias, 1.f + over_pct);
+ // Restrict texture memory by available physical system memory
+ //sDesiredDiscardBias = llmax(sDesiredDiscardBias, 1.f + over_pct);
- if (sDesiredDiscardBias > 1.f)
+ //if (sDesiredDiscardBias > 1.f)
+ //{
+ // sDesiredDiscardBias -= gFrameIntervalSeconds * 0.01;
+ //}
+
+ if (isSystemMemoryForTextureLow())
{
- sDesiredDiscardBias -= gFrameIntervalSeconds * 0.01;
+ // System RAM is low -> ramp up discard bias over time to free memory
+ if (sEvaluationTimer.getElapsedTimeF32() > GPU_MEMORY_CHECK_WAIT_TIME)
+ {
+ sDesiredDiscardBias += llmax(.1f, over_pct); // add at least 10% over-percentage
+ sEvaluationTimer.reset();
+ }
}
+ else
+ {
+ sDesiredDiscardBias = llmax(sDesiredDiscardBias, 1.f + over_pct);
+
+ if (sDesiredDiscardBias > 1.f)
+ {
+ sDesiredDiscardBias -= gFrameIntervalSeconds * 0.01;
+ }
+ }
+ //
LLViewerTexture::sFreezeImageUpdates = false; // sDesiredDiscardBias > (desired_discard_bias_max - 1.0f);
}
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 9efc658403..8331aa1471 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -950,6 +950,12 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
if (face && face->getViewerObject() && face->getTextureEntry())
{
+// Fix Blurry textures and use importance weight
+ F32 radius;
+ F32 cos_angle_to_view_dir;
+ bool in_frustum = face->calcPixelArea(cos_angle_to_view_dir, radius);
+ static LLCachedControl bias_unimportant_threshold(gSavedSettings, "TextureBiasUnimportantFactor", 0.25f);
+//
F32 vsize = face->getPixelArea();
// Scale desired texture resolution higher or lower depending on texture scale
@@ -963,13 +969,17 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
min_scale = llclamp(min_scale*min_scale, texture_scale_min(), texture_scale_max());
vsize /= min_scale;
- vsize /= LLViewerTexture::sDesiredDiscardBias;
- vsize /= llmax(1.f, (LLViewerTexture::sDesiredDiscardBias-1.f) * (1.f + face->getDrawable()->mDistanceWRTCamera * bias_distance_scale));
+// Fix Blurry textures and use importance weight
+// vsize /= LLViewerTexture::sDesiredDiscardBias;
+// vsize /= llmax(1.f, (LLViewerTexture::sDesiredDiscardBias-1.f) * (1.f + face->getDrawable()->mDistanceWRTCamera * bias_distance_scale));
- F32 radius;
- F32 cos_angle_to_view_dir;
- bool in_frustum = face->calcPixelArea(cos_angle_to_view_dir, radius);
- if (!in_frustum || !face->getDrawable()->isVisible())
+
+// F32 radius;
+// F32 cos_angle_to_view_dir;
+// bool in_frustum = face->calcPixelArea(cos_angle_to_view_dir, radius);
+// if (!in_frustum || !face->getDrawable()->isVisible())
+//
+ if (!in_frustum || !face->getDrawable()->isVisible() || face->getImportanceToCamera() < bias_unimportant_threshold)
{ // further reduce by discard bias when off screen or occluded
vsize /= LLViewerTexture::sDesiredDiscardBias;
}
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 40edd647f7..6de62d8ad5 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -4968,8 +4968,12 @@ void LLVOAvatar::updateOrientation(LLAgent& agent, F32 speed, F32 delta_time)
LLVector3 pelvisDir( mRoot->getWorldMatrix().getFwdRow4().mV );
- const F32 AVATAR_PELVIS_ROTATE_THRESHOLD_SLOW = 60.0f;
- const F32 AVATAR_PELVIS_ROTATE_THRESHOLD_FAST = 2.0f;
+ // FIRE-34196 Restore the pelvis rotation threshold config removed by LL as "unused"
+ // const F32 AVATAR_PELVIS_ROTATE_THRESHOLD_SLOW = 60.0f;
+ // const F32 AVATAR_PELVIS_ROTATE_THRESHOLD_FAST = 2.0f;
+ static LLCachedControl AVATAR_PELVIS_ROTATE_THRESHOLD_SLOW(gSavedSettings, "AvatarRotateThresholdSlow", 60.0);
+ static LLCachedControl AVATAR_PELVIS_ROTATE_THRESHOLD_FAST(gSavedSettings, "AvatarRotateThresholdFast", 2.0);
+ //
F32 pelvis_rot_threshold = clamp_rescale(speed, 0.1f, 1.0f, AVATAR_PELVIS_ROTATE_THRESHOLD_SLOW, AVATAR_PELVIS_ROTATE_THRESHOLD_FAST);
diff --git a/indra/newview/skins/ansastorm/settings.xml b/indra/newview/skins/ansastorm/settings.xml
deleted file mode 100644
index a7efb8363a..0000000000
--- a/indra/newview/skins/ansastorm/settings.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
- FSShowChatType
-
- Comment
- Shows/Hides the chat type selector (Whisper, Say, Shout)
- Persist
- 1
- Type
- Boolean
- Value
- 0
-
-
-
diff --git a/indra/newview/skins/default/xui/de/panel_fs_tools_texture.xml b/indra/newview/skins/default/xui/de/panel_fs_tools_texture.xml
index 6b996ff83a..fa19700ac1 100644
--- a/indra/newview/skins/default/xui/de/panel_fs_tools_texture.xml
+++ b/indra/newview/skins/default/xui/de/panel_fs_tools_texture.xml
@@ -1,5 +1,5 @@
-
+
Falls mehrere Flächen kopiert werden, müssen auf dem Zielobjekt dieselbe Anzahl an Flächen selektiert sein.
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 64e72e62cb..dc8ec946c9 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -3282,14 +3282,14 @@ Low ↔ Lwst
top_pad="8"
width="132" />
+
+-->
@@ -2110,7 +2109,6 @@
max_val="255"
increment="1"
decimal_digits="0"
- text_readonly_color="LabelDisabledColor"
enabled_control="FSInternalFaceHasBPSpecularMap"
/>
@@ -2958,7 +2956,6 @@
top_pad="5"
right="-4"
height="2"
- visibility_control="FSInternalCanEditObjectFaces"
/>
-
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 4ab67bb2f8..7b4593e052 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -54,9 +54,9 @@ Concurrence: [CONCURRENCY]
Version OS : [OS_VERSION]
Distributeur de cartes graphiques : [GRAPHICS_CARD_VENDOR]
Carte graphique : [GRAPHICS_CARD]
-Mémoire de cartes graphiques : [GRAPHICS_CARD_MEMORY] MB
-Mémoire de cartes graphiques (Detected): [GRAPHICS_CARD_MEMORY_DETECTED] MB
-Mémoire de cartes graphiques (Budget): [VRAM_BUDGET]
+Mémoire de carte graphique : [GRAPHICS_CARD_MEMORY] Mo
+Mémoire de carte graphique (Détectée): [GRAPHICS_CARD_MEMORY_DETECTED] Mo
+Mémoire de carte graphique (Capacité): [VRAM_BUDGET]
Version Windows Graphics Driver : [GRAPHICS_DRIVER_VERSION]
@@ -7135,4 +7135,7 @@ Votre position actuelle : [AVATAR_POS]
l'équipe d'assistance de votre gestionnaire de grille
+
+ Illimité
+
diff --git a/indra/newview/skins/default/xui/it/floater_combobox_ok_cancel.xml b/indra/newview/skins/default/xui/it/floater_combobox_ok_cancel.xml
new file mode 100644
index 0000000000..8e75223bba
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_combobox_ok_cancel.xml
@@ -0,0 +1,7 @@
+
+
+
+ Seleziona un'opzione:
+
+
+
diff --git a/indra/newview/skins/default/xui/it/floater_emoji_picker.xml b/indra/newview/skins/default/xui/it/floater_emoji_picker.xml
index e16b383095..68bed86111 100644
--- a/indra/newview/skins/default/xui/it/floater_emoji_picker.xml
+++ b/indra/newview/skins/default/xui/it/floater_emoji_picker.xml
@@ -2,6 +2,7 @@
+
Nessuna emoji selezionata
diff --git a/indra/newview/skins/default/xui/it/floater_inventory_thumbnails_helper.xml b/indra/newview/skins/default/xui/it/floater_inventory_thumbnails_helper.xml
new file mode 100644
index 0000000000..8bd1a38a6a
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_inventory_thumbnails_helper.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/it/floater_media_browser.xml b/indra/newview/skins/default/xui/it/floater_media_browser.xml
index 0f70955513..e50948a9b4 100644
--- a/indra/newview/skins/default/xui/it/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/it/floater_media_browser.xml
@@ -25,7 +25,6 @@ https://wiki.firestormviewer.org/fs_media
per cercare di risolvere il problema.
-
diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture.xml
index 92b8b06ff0..f272239059 100644
--- a/indra/newview/skins/default/xui/it/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/it/floater_preview_gesture.xml
@@ -12,9 +12,6 @@
Attendi:
-
- Stop
-
Anteprima
@@ -58,13 +55,9 @@
(opzioni)
-
-
-
-
-
+
+
-
Tutte le fasi avvengono contemporaneamente, a meno che non aggiungi fasi di attesa.
diff --git a/indra/newview/skins/default/xui/it/floater_scene_load_stats.xml b/indra/newview/skins/default/xui/it/floater_scene_load_stats.xml
index ebd5d35936..6531a9acb2 100644
--- a/indra/newview/skins/default/xui/it/floater_scene_load_stats.xml
+++ b/indra/newview/skins/default/xui/it/floater_scene_load_stats.xml
@@ -1,14 +1,13 @@
-
-
+
-
+
@@ -17,6 +16,10 @@
+
+
+
+
@@ -41,7 +44,7 @@
-
+
@@ -50,14 +53,21 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml
index 7d3ef651f7..8bb5174118 100644
--- a/indra/newview/skins/default/xui/it/floater_tools.xml
+++ b/indra/newview/skins/default/xui/it/floater_tools.xml
@@ -142,7 +142,7 @@
[CAPACITY_STRING] [secondlife:///app/openfloater/object_weights Maggiori informazioni]
-
+
Cedi
diff --git a/indra/newview/skins/default/xui/it/floater_whitelist.xml b/indra/newview/skins/default/xui/it/floater_whitelist.xml
new file mode 100644
index 0000000000..6ff54da16c
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_whitelist.xml
@@ -0,0 +1,17 @@
+
+
+ Antivirus e antimalware sono una parte essenziale dell'utilizzo sicuro di internet, ma possono causare una serie di problemi al viewer.
+Per ridurre le interferenze e migliorare la stabilità e le prestazioni, consigliamo vivamente a tutti gli utenti di assicurarsi che siano previste esclusioni (note come Whitelist) per cartelle e programmi importanti utilizzati dal viewer.
+
+Per informazioni più dettagliate, visita:
+https://wiki.firestormviewer.org/antivirus_whitelisting
+
+
+ Per semplificare l'attività, qui sotto sono elencate tutte le cartelle utilizzate dal viewer.
+Aggiungile alle esclusioni del tuo antivirus come spiegato nella pagina del Wiki linkata sopra.
+
+
+ Qui sotto sono elencati i nomi e il loro percorso completo dei file eseguibili del viewer.
+Aggiungili alle esclusioni del tuo antivirus come spiegato nella pagina del Wiki linkata sopra.
+
+
diff --git a/indra/newview/skins/default/xui/it/menu_gallery_outfit_tab.xml b/indra/newview/skins/default/xui/it/menu_gallery_outfit_tab.xml
index d62bac4fb9..cd53213d3c 100644
--- a/indra/newview/skins/default/xui/it/menu_gallery_outfit_tab.xml
+++ b/indra/newview/skins/default/xui/it/menu_gallery_outfit_tab.xml
@@ -4,6 +4,10 @@
+
+
+
+
-
-
-
diff --git a/indra/newview/skins/default/xui/it/menu_inventory.xml b/indra/newview/skins/default/xui/it/menu_inventory.xml
index 2e7a6948f8..438440f282 100644
--- a/indra/newview/skins/default/xui/it/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/it/menu_inventory.xml
@@ -18,6 +18,7 @@
+
diff --git a/indra/newview/skins/default/xui/it/menu_outfit_gear.xml b/indra/newview/skins/default/xui/it/menu_outfit_gear.xml
index ab5ec2325b..4616f8cb03 100644
--- a/indra/newview/skins/default/xui/it/menu_outfit_gear.xml
+++ b/indra/newview/skins/default/xui/it/menu_outfit_gear.xml
@@ -4,6 +4,12 @@
+
+
+
+
+
+
@@ -25,9 +31,4 @@
-
-
-
-
-
diff --git a/indra/newview/skins/default/xui/it/menu_outfit_tab.xml b/indra/newview/skins/default/xui/it/menu_outfit_tab.xml
index 55c096396f..ef84fa6cef 100644
--- a/indra/newview/skins/default/xui/it/menu_outfit_tab.xml
+++ b/indra/newview/skins/default/xui/it/menu_outfit_tab.xml
@@ -3,7 +3,9 @@
+
+
diff --git a/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml
index eb3f0099ab..c38a9f362f 100644
--- a/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml
@@ -4,4 +4,5 @@
+
diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml
index 2f16692009..ffb89018a9 100644
--- a/indra/newview/skins/default/xui/it/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/it/menu_viewer.xml
@@ -32,6 +32,7 @@
+
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
index 725e6d2ac5..4ab8f45ec9 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
@@ -141,10 +141,12 @@
-
+
+
+
-
+
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_sound.xml b/indra/newview/skins/default/xui/it/panel_preferences_sound.xml
index f65915e5af..855fe2128d 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_sound.xml
@@ -119,7 +119,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/it/panel_profile_secondlife.xml b/indra/newview/skins/default/xui/it/panel_profile_secondlife.xml
index b03dcb66b1..1366813471 100644
--- a/indra/newview/skins/default/xui/it/panel_profile_secondlife.xml
+++ b/indra/newview/skins/default/xui/it/panel_profile_secondlife.xml
@@ -74,7 +74,8 @@
-
+
+
diff --git a/indra/newview/skins/default/xui/it/sidepanel_task_info.xml b/indra/newview/skins/default/xui/it/sidepanel_task_info.xml
index 41d3d8ca7d..d11a1fa0e5 100644
--- a/indra/newview/skins/default/xui/it/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/it/sidepanel_task_info.xml
@@ -45,72 +45,72 @@
-
-
- Nome:
-
-
-
- Descrizione:
-
-
-
- Creatore:
-
-
- Proprietario:
-
-
- Gruppo:
-
-
-
-
-
- Azione del clic:
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tu puoi modificare questo oggetto
+
+
+ Nome:
-
- Chiunque può:
+
+
+ Descrizione:
-
-
-
+
+
+ Creatore:
+
+
+ Proprietario:
+
+
Gruppo:
-
-
- Proprietario successivo:
+
+
+
+
+ Azione del clic:
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tu puoi modificare questo oggetto
+
+
+ Chiunque può:
+
+
+
+
+ Gruppo:
+
+
+
+ Proprietario successivo:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Attributi pathfinding:
-
-
-
-
-
-
-
-
-
-
-
-
- Attributi pathfinding:
-
-
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index ebb9c31021..4b154bdb4c 100644
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -68,6 +68,9 @@ Banda (Bandwidth): [BANDWIDTH] kbit/s
Fattore LOD (LOD factor): [LOD]
Qualità resa (Render quality): [RENDERQUALITY]
+
+ Cache del disco (disk cache): [DISK_CACHE_INFO]
+
Modalità display HiDPI: [HIDPI]
@@ -1370,6 +1373,51 @@ https://www.firestormviewer.org/support per avere aiuto nella soluzione.
Ricompila
+
+ Immagini JPEG
+
+
+ File eseguibili
+
+
+ Sequenza numerica non valida: '[STR]'
+
+
+ Carattere iniziale non valido: '[CH]' (non può essere un segno meno)
+
+
+ Carattere iniziale non valido: '[CH]' (non può essere né meno né zero)
+
+
+ Carattere [NR] non valido: '[CH]' (può essere solo una cifra)
+
+
+ Carattere [NR] non valido: '[CH]' (può essere solo una cifra o un punto decimale)
+
+
+ Carattere [NR] non valido: '[CH]' (può essere solo un carattere ASCII numerico o alfanumerico)
+
+
+ Carattere [NR] non valido: '[CH]' (può essere solo una cifra, un carattere ASCII alfanumerico o uno spazio)
+
+
+ Carattere [NR] non valido: '[CH]' (può essere solo una cifra, un carattere ASCII alfanumerico o un segno di punteggiatura)
+
+
+ Carattere [NR] non valido: '[CH]' (può essere solo una cifra, un carattere ASCII alfanumerico o un segno di punteggiatura senza spazi)
+
+
+ Carattere [NR] non valido: '[CH]' (può essere solo una cifra senza spazi)
+
+
+ Carattere [NR] non valido: '[CH]' (può essere solo un carattere ASCII)
+
+
+ Carattere [NR] non valido: '[CH]' (può essere solo un carattere ASCII o una nuova riga)
+
+
+ Script in sospensione per [SLEEP_TIME] secondi.
+
Corpo
@@ -5159,9 +5207,12 @@ Segnala abuso
Nuovo ambiente
-
+
[day,datetime,utc]/[mthnum,datetime,utc]/[year,datetime,utc]
+
+ [day,datetime,utc]/[mthnum,datetime,utc]
+
[day,datetime,slt]/[mthnum,datetime,slt]/[year,datetime,slt]
@@ -5271,7 +5322,8 @@ Segnala abuso
Questo abito non contiene alcun elemento
- Seleziona un editor usando l'impostazione ExternalEditor.
+ Seleziona un editor impostando l'ambiente LL_SCRIPT_EDITOR o impostando ExternalEditor
+Vedi https://wiki.secondlife.com/wiki/LSL_Alternate_Editors
L'editor esterno specificato non è stato trovato.
@@ -6349,6 +6401,9 @@ Assistenza nel sito SecondLife.com e segnala il problema.
ha attivato l'allarme età. Età: [AGE] giorno/i
+
+ n.d.
+
Il totale degli script nella regione è salito da [OLD_VALUE] a [NEW_VALUE] ([DIFFERENCE]).
diff --git a/indra/newview/skins/starlight/xui/en/floater_tools.xml b/indra/newview/skins/starlight/xui/en/floater_tools.xml
index 9ae008bbc8..0e10d331d7 100644
--- a/indra/newview/skins/starlight/xui/en/floater_tools.xml
+++ b/indra/newview/skins/starlight/xui/en/floater_tools.xml
@@ -3280,14 +3280,13 @@ Low ↔ Lwst
top_pad="8"
width="132" />
+
+-->
+
+-->
+
+-->