Ansariel 2024-07-18 20:14:24 +02:00
commit ebc0482bc0
152 changed files with 2607 additions and 793 deletions

4
.github/pull_request_template.md vendored Normal file
View File

@ -0,0 +1,4 @@
## Firestorm Pull Request Checklist
Thank you for contributing to the Phoenix Firestorm Project.
We will endeavour to review you changes and accept/reject/request changes as soon as possible.
Please read and follow the [Firestorm Pull Request Guidelines](https://github.com/firestormviewer/phoenix-firestorm/blob/master/FS_PR_GUIDELINES.md) to reduce the likelihood that we need to ask for "Bureaucratic" changes to make the code comply with our workflows.

View File

@ -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*.*.*"
@ -25,7 +30,7 @@ jobs:
build_matrix:
strategy:
matrix:
os: [macos-11,ubuntu-22.04,windows-2022]
os: [macos-12,ubuntu-22.04,windows-2022]
grid: [sl,os]
addrsize: [64]
runs-on: ${{ matrix.os }}
@ -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

63
FS_PR_GUIDELINES.md Normal file
View File

@ -0,0 +1,63 @@
# Firestorm Pull Request Guidelines
Thank you for submitting code to Firestorm; we will review it and merge or provide feedback in due course.
We have written this guide to help you contribute code that meets our needs. It will hopefully reduce the number of iterations required before we can merge the code.
1. **Descriptive Title**:
   - Use a clear and descriptive title for the PR.
1. **Related Issues**:
   - Reference any related issues or pull requests by including the JIRA number and description in the commit message header (e.g., `[FIRE-12345] When I click, my head falls off` or `[FIRE-12345] prevent click detaching head`).
1. **Description**:
   - Provide a detailed description of the changes. Explain why the changes are necessary and what problem they solve. If a JIRA is associated with the change, there is no need to duplicate that, but we would appreciate a summary and explanation of the fix.
1. **Comment tags (important)**:
   - We use comments to preserve the original upstream (LL) code when making modifications; this allows the person merging future code updates to see both the original code from LL and any new updates and then use those to determine whether the FS-specific changes need to be updated and reviewed.
If you are modifying LL code, we need the LL code preserved in a comment.
For example:
```c++
    int buggy_code = TRUE;
    LL_WARN() << "This code is buggy" << LL_ENDL;
```
Would become:
```c++
    // <FS> [FIRE-999] Fix the buggy code
    // int buggy_code = TRUE;
    // LL_WARN() << "This code is buggy" << LL_ENDL;
    bool fixed_code = true;
    LL_DEBUG() << "I fixed this" << LL_ENDL;
    // </FS>
```
Note: You can tag them with your initials, e.g. `<FS:YI>` or a short unique tag (shorter is better)
If you add new code, the same rules apply, but there is nothing to comment out.
This is done so that when LL updates the original code, we can see what the original code was doing, what their changes do, and how that relates to the changes that we applied on top.
A single line change can use the shorthand `<FS:YI/>`:
```c++
    bool break_stuff=true;
```
Could be fixed as follows:
```c++
    bool break_stuff=false; // <FS:Beq/> [FIRE-23456] don't break stuff.
```
The Comment tags are only required when changing code maintained upstream. If the code you are changing is in an FS-created file, RLV code, OpenSim-only code, etc., then we do not need the comments.
If the code you are changing is already inside an `//<FS>` comment block, then there is no need to add a new block, but do try to make sure that any comments align with the updates you make.
5. **Testing**:
   - Include details on how the changes should be tested. Describe the testing environment and any steps needed to verify the changes.
1. **Documentation**:
   - If the change includes a new feature, it would be beneficial to suggest how we should update the FS Wiki pages to help users understand the feature
Thank you for your contribution!

View File

@ -23,4 +23,4 @@ Build instructions for each operating system can be found using the links below
## Contribute
Help make Firestorm better! You can get involved with improvements by filing bugs and suggesting enhancements via [JIRA](https://jira.firestormviewer.org) or creating pull requests.
Help make Firestorm better! You can get involved with improvements by filing bugs and suggesting enhancements via [JIRA](https://jira.firestormviewer.org) or [creating pull requests](FS_PR_GUIDELINES.md).

View File

@ -2828,15 +2828,43 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>archive</key>
<map>
<key>hash</key>
<string>fc67514183e7dbbb96bebb9970e1431c</string>
<string>ae3ac835e50d75e1c1691534bfddbf71</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>https://3p.firestormviewer.org/tracy-v0.10.241491433-windows-241491433.tar.bz2</string>
<string>https://3p.firestormviewer.org/tracy-v0.10.241831928-windows-241831928.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
<key>linux</key>
<map>
<key>archive</key>
<map>
<key>hash</key>
<string>9ab29796dc144431a9db46fddfbd88b0</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>https://3p.firestormviewer.org/tracy-v0.10.241831929-linux-241831929.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
</map>
<key>darwin</key>
<map>
<key>archive</key>
<map>
<key>hash</key>
<string>f87f9db3a3c69464b46cd59490bca842</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>https://3p.firestormviewer.org/tracy-v0.10.241831925-darwin-241831925.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
</map>
</map>
<key>license</key>
<string>bsd</string>

View File

@ -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

View File

@ -39,6 +39,7 @@
#elif LL_LINUX
# include <unistd.h>
# include <sys/resource.h>
# include <sys/sysinfo.h>
#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; // <FS:Beq/> 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); // <FS:Beq/> align MemInfo across platforms
sAllocatedPageSizeInKB = U32Kilobytes::convert(U64Bytes(counters.PagefileUsage));
sample(sVirtualMem, sAllocatedPageSizeInKB);
// <FS:Beq> 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);
}
// </FS:Beq>
#elif defined(LL_DARWIN)
task_vm_info info;
mach_msg_type_number_t infoCount = TASK_VM_INFO_COUNT;
@ -120,7 +124,7 @@ void LLMemory::updateMemoryInfo()
{
// Our Windows definition of PagefileUsage is documented by Microsoft as "the total amount of
// memory that the memory manager has committed for a running process", which is rss.
sAllocatedPageSizeInKB = U32Bytes(info.resident_size);
sAllocatedPageSizeInKB = U64Bytes(info.resident_size);
// Activity Monitor => Inspect Process => Real Memory Size appears to report resident_size
// Activity monitor => main window memory column appears to report phys_footprint, which spot checks as at least 30% less.
@ -130,7 +134,7 @@ void LLMemory::updateMemoryInfo()
// reported for the app by the Memory Monitor in Instruments.' It is still about 8% bigger than phys_footprint.
//
// (On Windows, we use WorkingSetSize.)
sAllocatedMemInKB = U32Bytes(info.resident_size - info.reusable);
sAllocatedMemInKB = U64Bytes(info.resident_size - info.reusable);
}
else
{
@ -147,21 +151,54 @@ 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();
}
// <FS:Beq> align MemInfo across platforms
// sAvailPhysicalMemInKB = U32Bytes(vmstat.free_count * page_size);
// sMaxPhysicalMemInKB = LLMemoryInfo::getHardwareMemSize();
avail_phys = U64Bytes( (vmstat.free_count + vmstat.inactive_count) * page_size);
sMaxHeapSizeInKB = LLMemoryInfo::getHardwareMemSize();
// </FS:Beq>
}
else
{
LL_WARNS() << "task_info failed" << LL_ENDL;
}
// <FS:Beq> 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)
// </FS:Beq>
#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
// <FS:Beq> 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);
}
// debug log the memory info
LL_DEBUGS("MemoryInfo") << "Memory Info:"
<< "Heap: " << sMaxHeapSizeInKB << "; " // Heap
<< "Free: " << sAvailPhysicalMemInKB << "; " // Free
<< "FS Use: " << sAllocatedMemInKB << "; " // In use by this instance right now
<< "FS Max poss: " << sMaxPhysicalMemInKB << "; " // How much we could have (In use now + free)
<< LL_ENDL;
// </FS:Beq>
return ;
}

View File

@ -426,6 +426,29 @@ void LLQueuedThread::processRequest(LLQueuedThread::QueuedRequest* req)
// safe to access req.
if (req)
{
// <FS:Beq> Deferred retry requests
// Avoid loop when idle by restoring a sleep
// note that when there is nothing to do the thread still sleeps normally.
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); });
unlockData();
mIdleThread = true;
return;
}
// </FS:Beq>
// process request
bool complete = req->processRequest();
@ -473,21 +496,27 @@ void LLQueuedThread::processRequest(LLQueuedThread::QueuedRequest* req)
llassert(ret);
#else
using namespace std::chrono_literals;
auto retry_time = LL::WorkQueue::TimePoint::clock::now() + 16ms;
mRequestQueue.post([=]
{
LL_PROFILE_ZONE_NAMED("processRequest - retry");
if (LL::WorkQueue::TimePoint::clock::now() < retry_time)
{
auto sleep_time = std::chrono::duration_cast<std::chrono::milliseconds>(retry_time - LL::WorkQueue::TimePoint::clock::now());
// <FS:Beq> improve retry behaviour
// mRequestQueue.post([=]
// {
// LL_PROFILE_ZONE_NAMED("processRequest - retry");
// if (LL::WorkQueue::TimePoint::clock::now() < retry_time)
// {
// auto sleep_time = std::chrono::duration_cast<std::chrono::milliseconds>(retry_time - LL::WorkQueue::TimePoint::clock::now());
if (sleep_time.count() > 0)
{
ms_sleep(sleep_time.count());
}
}
processRequest(req);
});
// if (sleep_time.count() > 0)
// {
// ms_sleep(sleep_time.count());
// }
// }
// 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); });
// </FS:Beq>
#endif
}
@ -565,6 +594,7 @@ LLQueuedThread::QueuedRequest::QueuedRequest(LLQueuedThread::handle_t handle, U3
LLSimpleHashEntry<LLQueuedThread::handle_t>(handle),
mStatus(STATUS_UNKNOWN),
mFlags(flags)
,mDeferUntil(LL::WorkQueue::TimePoint::clock::now()) // <FS:Beq/> handle deffered retries without an enforced sleep
{
}

View File

@ -97,6 +97,10 @@ public:
// NOTE: flags are |'d
mFlags |= flags;
}
void defer_until(std::chrono::steady_clock::time_point time)
{
mDeferUntil = time;
}
virtual bool processRequest() = 0; // Return true when request has completed
virtual void finishRequest(bool completed); // Always called from thread after request has completed or aborted
@ -105,6 +109,7 @@ public:
protected:
LLAtomicBase<status_t> mStatus;
U32 mFlags;
std::chrono::steady_clock::time_point mDeferUntil;
};
//------------------------------------------------------------------------

View File

@ -98,6 +98,9 @@ LLImageDecodeThread::handle_t LLImageDecodeThread::decodeImage(
LL_PROFILE_ZONE_SCOPED_CATEGORY_TEXTURE;
U32 decode_id = ++mDecodeCount;
if (decode_id == 0)
decode_id = ++mDecodeCount;
// Instantiate the ImageRequest right in the lambda, why not?
bool posted = mThreadPool->getQueue().post(
[req = ImageRequest(image, discard, needs_aux, responder, decode_id)]

View File

@ -1014,6 +1014,7 @@ LLGLManager::LLGLManager() :
mGLSLVersionMajor(0),
mGLSLVersionMinor(0),
mVRAM(0),
mVRAMDetected(0), // <FS:Beq/> add override support
mGLMaxVertexRange(0),
mGLMaxIndexRange(0)
{

View File

@ -133,7 +133,7 @@ public:
std::string mGLVersionString;
S32 mVRAM; // VRAM in MB
S32 mVRAMDetected; // <FS:Beq/> The amount detected/reported by the OS/Drivers. If different to mVRAM there is an override in place.
void getPixelFormat(); // Get the best pixel format
std::string getGLInfoString();

View File

@ -251,8 +251,14 @@ bool LLFlatListView::removeItemByValue(const LLSD& value, bool rearrange)
if (value.isUndefined()) return false;
item_pair_t* item_pair = getItemPair(value);
if (!item_pair) return false;
// <FS:Beq> try to find where the notifications get stuck
// if (!item_pair) return false;
if (!item_pair)
{
LL_WARNS() << "LLFlatListView::removeItemByValue: item_pair not found" << LL_ENDL;
return false;
}
// </FS:Beq>
return removeItemPair(item_pair, rearrange);
}
@ -1105,7 +1111,13 @@ bool LLFlatListView::removeItemPair(item_pair_t* item_pair, bool rearrange)
}
}
if (!deleted) return false;
// <FS:Beq> try to find where the notifications get stuck
// if (!deleted) return false;
if (!deleted)
{
LL_WARNS() << "LLFlatListView::removeItemPair: item not found" << LL_ENDL;
return false;
}
for (pairs_iterator_t it = mSelectedItemPairs.begin(); it != mSelectedItemPairs.end(); ++it)
{

View File

@ -1014,7 +1014,6 @@ LLBoundListener LLNotificationChannelBase::connectChangedImpl(const LLEventListe
LLBoundListener LLNotificationChannelBase::connectAtFrontChangedImpl(const LLEventListener& slot)
{
LLMutexLock lock(&mItemsMutex); // <FS:Beq/> 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"];
// <FS:Beq> 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());
}
// </FS:Beq>
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); // <FS:Beq/> 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); // <FS:Beq/> 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); // <FS:Beq/> 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); // <FS:Beq/> 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); // <FS:Beq/> 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)
{
// <FS:Ansariel> 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); // <FS:Beq/> Guard against unlocked acceess to mItems
LLNotificationSet::iterator it=mItems.find(pNotif);
if (it != mItems.end())
{

View File

@ -98,8 +98,7 @@
#include "llrefcount.h"
#include "llsdparam.h"
// <FS:Ansariel> Disable test API
//#include "llnotificationslistener.h"
#include "llnotificationslistener.h"
class LLAvatarName;
typedef enum e_notification_priority
@ -999,8 +998,7 @@ private:
bool mIgnoreAllNotifications;
// <FS:Ansariel> Disable test API
//std::unique_ptr<LLNotificationsListener> mListener;
std::unique_ptr<LLNotificationsListener> mListener;
std::vector<LLNotificationChannelPtr> mDefaultChannels;
};

View File

@ -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;
// </FS:Ansariel>
}
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;
// </FS:Ansariel>
}
}

View File

@ -182,6 +182,7 @@ BOOL AnimationExplorer::postBuild()
else
{
LL_WARNS("AnimationExplorer") << "Could not find animation preview control to place animation texture" << LL_ENDL;
return FALSE;
}
// request list of recent animations

View File

@ -19,7 +19,6 @@
<string>RenderAvatarMaxComplexity</string>
<string>RenderAvatarMaxNonImpostors</string>
<string>RenderAvatarPhysicsLODFactor</string>
<string>RenderCloudShadowAmbianceFactor</string>
<string>RenderCompressTextures</string>
<string>RenderDeferredSSAO</string>
<string>RenderDepthOfField</string>

View File

@ -2186,6 +2186,28 @@
<key>Value</key>
<string>http://lecs-viewer-web-components.s3.amazonaws.com/v3.0/[GRID_LOWERCASE]/avatars.html</string>
</map>
<key>AvatarRotateThresholdSlow</key>
<map>
<key>Comment</key>
<string>Angle between avatar facing and camera facing at which avatar turns to face same direction as camera, when moving slowly (degrees)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<integer>60</integer>
</map>
<key>AvatarRotateThresholdFast</key>
<map>
<key>Comment</key>
<string>Angle between avatar facing and camera facing at which avatar turns to face same direction as camera, when moving fast (degrees)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<integer>2</integer>
</map>
<key>AvatarBakedTextureUploadTimeout</key>
<map>
<key>Comment</key>
@ -14959,6 +14981,19 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Backup</key>
<integer>0</integer>
</map>
<key>TextureBiasUnimportantFactor</key>
<map>
<key>Comment</key>
<string>When biasing textures to lower resolution due to lack of vram, the importance threshold below which is considered unimportant and getting an extra bias.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>0.25</real>
<key>Backup</key>
<integer>0</integer>
</map>
<key>TextureDecodeDisabled</key>
<map>
<key>Comment</key>
@ -15141,7 +15176,7 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>500.0</real>
<real>3000.0</real>
</map>
<key>ToolTipDelay</key>
<map>
@ -25052,7 +25087,7 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>FSRestrictMaxTextureSize</key>
<map>
<key>Comment</key>
<string>If enabled, the maximum resolution for fetched textures will be restricted and lowered by factor 2 (64bit versions only; requires restart)</string>
<string>If enabled, the maximum resolution for fetched textures will be restricted to FSRestrictMaxTexturePixels pixels (64bit versions only; requires restart)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@ -25060,6 +25095,17 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key>
<integer>0</integer>
</map>
<key>FSRestrictMaxTexturePixels</key>
<map>
<key>Comment</key>
<string>Maximum texture resolution when FSRestrictMaxTextureSize is enabled. Must be a power of 2 and at least 512 pixels.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>U32</string>
<key>Value</key>
<integer>512</integer>
</map>
<key>FSScriptInfoExtended</key>
<map>
<key>Comment</key>
@ -25442,5 +25488,16 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key>
<integer>1</integer>
</map>
<key>FSMinFreeMainMemoryTextureDiscardThreshold</key>
<map>
<key>Comment</key>
<string>Minimum of available physical memory in MB before textures get scaled down</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>S32</string>
<key>Value</key>
<integer>512</integer>
</map>
</map>
</llsd>

View File

@ -1072,6 +1072,19 @@
<real>0.0</real>
</array>
</map>
<!-- <FS:Chanayane> Camera roll (from Alchemy) -->
<key>ALStoredCameraRoll</key>
<map>
<key>Comment</key>
<string>Stored camera roll in camera tools</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>0.0</real>
</map>
<!-- </FS:Chanayane> -->
<key>FSStoredCameraFocusObjectId</key>
<map>
<key>Comment</key>

View File

@ -1021,7 +1021,7 @@ LLSD FSData::getSystemInfo()
info["SIMD"].asString().c_str(),
info["BUILD_TYPE"].asString().c_str());
sysinfo1 += llformat("Build with %s version %s\n\n", info["COMPILER"].asString().c_str(), info["COMPILER_VERSION"].asString().c_str());
sysinfo1 += llformat("I am in %s located at %s (%s)\n", info["REGION"].asString().c_str(), info["HOSTNAME"].asString().c_str(), info["HOSTIP"].asString().c_str());
sysinfo1 += llformat("Location: %s (%s)\n", info["REGION"].asString().c_str(), info["HOSTNAME"].asString().c_str(), info["HOSTIP"].asString().c_str());
sysinfo1 += llformat("%s\n\n", info["SERVER_VERSION"].asString().c_str());
sysinfo1 += llformat("CPU: %s\n", info["CPU"].asString().c_str());
@ -1029,7 +1029,9 @@ LLSD FSData::getSystemInfo()
sysinfo1 += llformat("OS: %s\n", info["OS_VERSION"].asString().c_str());
sysinfo1 += llformat("Graphics Card Vendor: %s\n", info["GRAPHICS_CARD_VENDOR"].asString().c_str());
sysinfo1 += llformat("Graphics Card: %s\n", info["GRAPHICS_CARD"].asString().c_str());
sysinfo1 += llformat("Graphics Card Memory: %d MB\n", info["GRAPHICS_CARD_MEMORY"].asInteger());
sysinfo1 += llformat("VRAM: %d MB\n", info["GRAPHICS_CARD_MEMORY"].asInteger());
sysinfo1 += llformat("VRAM (Detected): %d MB\n", info["GRAPHICS_CARD_MEMORY_DETECTED"].asInteger());
sysinfo1 += llformat("VRAM (Budget): %s\n", info["VRAM_BUDGET_ENGLISH"].asString().c_str());
if (info.has("GRAPHICS_DRIVER_VERSION"))
{
@ -1062,15 +1064,6 @@ LLSD FSData::getSystemInfo()
sysinfo2 += llformat("Bandwidth: %d kbit/s\n", info["BANDWIDTH"].asInteger());
sysinfo2 += llformat("LOD Factor: %.3f\n", info["LOD"].asReal());
sysinfo2 += llformat("Render quality: %s\n", info["RENDERQUALITY_FSDATA_ENGLISH"].asString().c_str());
sysinfo2 += llformat("ALM enabled: %s\n", info["ALMSTATUS_FSDATA_ENGLISH"].asString().c_str());
if (info["TEXTUREMEMORYDYNAMIC"].asBoolean())
{
sysinfo2 += llformat("Texture memory: Dynamic (%d MB min / %d%% Cache / %d%% VRAM)\n", info["TEXTUREMEMORYMIN"].asInteger(), info["TEXTUREMEMORYCACHERESERVE"].asInteger(), info["TEXTUREMEMORYGPURESERVE"].asInteger());
}
else
{
sysinfo2 += llformat("Texture memory: %d MB (%.2f)\n", info["TEXTUREMEMORY"].asInteger(), info["TEXTUREMEMORYMULTIPLIER"].asReal());
}
sysinfo2 += "Disk cache: " + info["DISK_CACHE_INFO"].asString();
LLSD sysinfos;

View File

@ -405,7 +405,7 @@ void FSFloaterNearbyChat::openFloater(const LLSD& key)
void FSFloaterNearbyChat::removeScreenChat()
{
LLNotificationsUI::LLScreenChannelBase* chat_channel = LLNotificationsUI::LLChannelManager::getInstance()->findChannelByID(LLNotificationsUI::NOTIFICATION_CHANNEL_UUID);
LLNotificationsUI::LLScreenChannelBase* chat_channel = LLNotificationsUI::LLChannelManager::getInstance()->findChannelByID(LLNotificationsUI::NEARBY_CHAT_CHANNEL_UUID);
if (chat_channel)
{
chat_channel->removeToastsFromChannel();

View File

@ -50,10 +50,14 @@ void FSFloaterWhiteListHelper::populateWhitelistInfo()
// On windows use exe (not work or RO) directory
std::string voiceexe_path = gDirUtilp->getExecutableDir();
gDirUtilp->append(voiceexe_path, "SLVoice.exe");
std::string dullahan_path = gDirUtilp->getLLPluginDir();
std::string dullahan_exe = "dullahan_host.exe";
#elif LL_DARWIN
// On MAC use resource directory
std::string voiceexe_path = gDirUtilp->getAppRODataDir();
gDirUtilp->append(voiceexe_path, "SLVoice");
std::string dullahan_path = ""; // ignore dullahan on mac until we can identify it accurately
std::string dullahan_exe = "";
#else
std::string voiceexe_path = gDirUtilp->getExecutableDir();
bool usingWine = gSavedSettings.getBOOL("FSLinuxEnableWin64VoiceProxy");
@ -65,8 +69,12 @@ void FSFloaterWhiteListHelper::populateWhitelistInfo()
{
gDirUtilp->append(voiceexe_path, "win64/SLVoice.exe"); // use bundled win64 version
}
std::string dullahan_path = gDirUtilp->getExecutableDir(); // linux keeps dullahan in the bin folder
std::string dullahan_exe = "dullahan_host";
#endif
gDirUtilp->append(dullahan_path, dullahan_exe);
const std::string slpluginexe_path = gDirUtilp->getLLPluginLauncher();
std::string whitelist_folder_info =
@ -80,7 +88,10 @@ void FSFloaterWhiteListHelper::populateWhitelistInfo()
+ gDirUtilp->getBaseFileName(voiceexe_path, false) + "\n" // " Voice Binary"
+ voiceexe_path + "\n" // slvoice full path
+ gDirUtilp->getBaseFileName(slpluginexe_path, false) + "\n" // SLPlugin Launcher Binary
+ slpluginexe_path + "\n"; // SLPlugin Launcher full path
+ slpluginexe_path + "\n" // SLPlugin Launcher full path
+ gDirUtilp->getBaseFileName(dullahan_path, false) + "\n" // SLPlugin Launcher Binary
+ dullahan_path + "\n"
;
getChild<LLTextEditor>("whitelist_folders_editor")->setText(whitelist_folder_info);
getChild<LLTextEditor>("whitelist_exes_editor")->setText(whitelist_exe_info);

View File

@ -257,13 +257,13 @@ public:
// Override object's values with values from editor where appropriate
if (mUnsavedChanges & MATERIAL_BASE_COLOR_DIRTY)
{
LL_DEBUGS("APPLY_GLTF_CHANGES") << "appyling MATERIAL_BASE_COLOR_DIRTY" << LL_ENDL;
LL_DEBUGS("APPLY_GLTF_CHANGES") << "applying MATERIAL_BASE_COLOR_DIRTY" << LL_ENDL;
material->setBaseColorFactor(mMaterialToApply->mBaseColor, true);
}
if (mUnsavedChanges & MATERIAL_BASE_COLOR_TEX_DIRTY)
{
LL_DEBUGS("APPLY_GLTF_CHANGES") << "appyling MATERIAL_BASE_COLOR_TEX_DIRTY" << LL_ENDL;
LL_DEBUGS("APPLY_GLTF_CHANGES") << "applying MATERIAL_BASE_COLOR_TEX_DIRTY" << LL_ENDL;
material->setBaseColorId(mMaterialToApply->mTextureId[LLGLTFMaterial::GLTF_TEXTURE_INFO_BASE_COLOR], true);
/*
LLUUID tracking_id = mEditor->getLocalTextureTrackingIdFromFlag(MATERIAL_BASE_COLOR_TEX_DIRTY);
@ -276,7 +276,7 @@ public:
if (mUnsavedChanges & MATERIAL_NORMAL_TEX_DIRTY)
{
LL_DEBUGS("APPLY_GLTF_CHANGES") << "appyling MATERIAL_NORMAL_TEX_DIRTY" << LL_ENDL;
LL_DEBUGS("APPLY_GLTF_CHANGES") << "applying MATERIAL_NORMAL_TEX_DIRTY" << LL_ENDL;
material->setNormalId(mMaterialToApply->mTextureId[LLGLTFMaterial::GLTF_TEXTURE_INFO_NORMAL], true);
/*
LLUUID tracking_id = mEditor->getLocalTextureTrackingIdFromFlag(MATERIAL_NORMAL_TEX_DIRTY);
@ -289,7 +289,7 @@ public:
if (mUnsavedChanges & MATERIAL_METALLIC_ROUGHTNESS_TEX_DIRTY)
{
LL_DEBUGS("APPLY_GLTF_CHANGES") << "appyling MATERIAL_METALLIC_ROUGHTNESS_TEX_DIRTY" << LL_ENDL;
LL_DEBUGS("APPLY_GLTF_CHANGES") << "applying MATERIAL_METALLIC_ROUGHTNESS_TEX_DIRTY" << LL_ENDL;
material->setOcclusionRoughnessMetallicId(mMaterialToApply->mTextureId[LLGLTFMaterial::GLTF_TEXTURE_INFO_METALLIC_ROUGHNESS], true);
/*
LLUUID tracking_id = mEditor->getLocalTextureTrackingIdFromFlag(MATERIAL_METALLIC_ROUGHTNESS_TEX_DIRTY);
@ -302,25 +302,25 @@ public:
if (mUnsavedChanges & MATERIAL_METALLIC_ROUGHTNESS_METALNESS_DIRTY)
{
LL_DEBUGS("APPLY_GLTF_CHANGES") << "appyling MATERIAL_METALLIC_ROUGHTNESS_METALNESS_DIRTY" << LL_ENDL;
LL_DEBUGS("APPLY_GLTF_CHANGES") << "applying MATERIAL_METALLIC_ROUGHTNESS_METALNESS_DIRTY" << LL_ENDL;
material->setMetallicFactor(mMaterialToApply->mMetallicFactor, true);
}
if (mUnsavedChanges & MATERIAL_METALLIC_ROUGHTNESS_ROUGHNESS_DIRTY)
{
LL_DEBUGS("APPLY_GLTF_CHANGES") << "appyling MATERIAL_METALLIC_ROUGHTNESS_ROUGHNESS_DIRTY" << LL_ENDL;
LL_DEBUGS("APPLY_GLTF_CHANGES") << "applying MATERIAL_METALLIC_ROUGHTNESS_ROUGHNESS_DIRTY" << LL_ENDL;
material->setRoughnessFactor(mMaterialToApply->mRoughnessFactor, true);
}
if (mUnsavedChanges & MATERIAL_EMISIVE_COLOR_DIRTY)
{
LL_DEBUGS("APPLY_GLTF_CHANGES") << "appyling MATERIAL_EMISIVE_COLOR_DIRTY" << LL_ENDL;
LL_DEBUGS("APPLY_GLTF_CHANGES") << "applying MATERIAL_EMISIVE_COLOR_DIRTY" << LL_ENDL;
material->setEmissiveColorFactor(LLColor3(mMaterialToApply->mEmissiveColor), true);
}
if (mUnsavedChanges & MATERIAL_EMISIVE_TEX_DIRTY)
{
LL_DEBUGS("APPLY_GLTF_CHANGES") << "appyling MATERIAL_EMISIVE_TEX_DIRTY" << LL_ENDL;
LL_DEBUGS("APPLY_GLTF_CHANGES") << "applying MATERIAL_EMISIVE_TEX_DIRTY" << LL_ENDL;
material->setEmissiveId(mMaterialToApply->mTextureId[LLGLTFMaterial::GLTF_TEXTURE_INFO_EMISSIVE], true);
/*
LLUUID tracking_id = mEditor->getLocalTextureTrackingIdFromFlag(MATERIAL_EMISIVE_TEX_DIRTY);
@ -333,19 +333,19 @@ public:
if (mUnsavedChanges & MATERIAL_DOUBLE_SIDED_DIRTY)
{
LL_DEBUGS("APPLY_GLTF_CHANGES") << "appyling MATERIAL_DOUBLE_SIDED_DIRTY" << LL_ENDL;
LL_DEBUGS("APPLY_GLTF_CHANGES") << "applying MATERIAL_DOUBLE_SIDED_DIRTY" << LL_ENDL;
material->setDoubleSided(mMaterialToApply->mDoubleSided, true);
}
if (mUnsavedChanges & MATERIAL_ALPHA_MODE_DIRTY)
{
LL_DEBUGS("APPLY_GLTF_CHANGES") << "appyling MATERIAL_ALPHA_MODE_DIRTY" << LL_ENDL;
LL_DEBUGS("APPLY_GLTF_CHANGES") << "applying MATERIAL_ALPHA_MODE_DIRTY" << LL_ENDL;
material->setAlphaMode(mMaterialToApply->mAlphaMode, true);
}
if (mUnsavedChanges & MATERIAL_ALPHA_CUTOFF_DIRTY)
{
LL_DEBUGS("APPLY_GLTF_CHANGES") << "appyling MATERIAL_ALPHA_CUTOFF_DIRTY" << LL_ENDL;
LL_DEBUGS("APPLY_GLTF_CHANGES") << "applying MATERIAL_ALPHA_CUTOFF_DIRTY" << LL_ENDL;
material->setAlphaCutoff(mMaterialToApply->mAlphaCutoff, true);
}
@ -751,29 +751,30 @@ BOOL FSPanelFace::postBuild()
// Blinn-Phong Diffuse texture swatch
mTextureCtrl->setDefaultImageAssetID(DEFAULT_OBJECT_TEXTURE);
mTextureCtrl->setCommitCallback(boost::bind(&FSPanelFace::onCommitTexture, this, _1, _2));
mTextureCtrl->setOnSelectCallback(boost::bind(&FSPanelFace::onSelectTexture, this));
mTextureCtrl->setCommitCallback(boost::bind(&FSPanelFace::onCommitTexture, this));
mTextureCtrl->setOnCancelCallback(boost::bind(&FSPanelFace::onCancelTexture, this));
mTextureCtrl->setDragCallback(boost::bind(&FSPanelFace::onDragTexture, this, _2));
mTextureCtrl->setOnCloseCallback(boost::bind(&FSPanelFace::onCloseTexturePicker, this, _2));
mTextureCtrl->setDragCallback(boost::bind(&FSPanelFace::onDragTexture, this, _1, _2));
mTextureCtrl->setOnCloseCallback(boost::bind(&FSPanelFace::onCloseTexturePicker, this));
mTextureCtrl->setImmediateFilterPermMask(PERM_NONE);
mTextureCtrl->setDnDFilterPermMask(PERM_COPY | PERM_TRANSFER);
// Blinn-Phong Normal texture swatch
mBumpyTextureCtrl->setDefaultImageAssetID(DEFAULT_OBJECT_NORMAL);
mBumpyTextureCtrl->setBlankImageAssetID(BLANK_OBJECT_NORMAL);
mBumpyTextureCtrl->setCommitCallback(boost::bind(&FSPanelFace::onCommitNormalTexture, this, _1, _2));
mBumpyTextureCtrl->setCommitCallback(boost::bind(&FSPanelFace::onCommitNormalTexture, this));
mBumpyTextureCtrl->setOnCancelCallback(boost::bind(&FSPanelFace::onCancelNormalTexture, this));
mBumpyTextureCtrl->setDragCallback(boost::bind(&FSPanelFace::onDragTexture, this, _2));
mBumpyTextureCtrl->setOnCloseCallback(boost::bind(&FSPanelFace::onCloseTexturePicker, this, _2));
mBumpyTextureCtrl->setDragCallback(boost::bind(&FSPanelFace::onDragTexture, this, _1, _2));
mBumpyTextureCtrl->setOnCloseCallback(boost::bind(&FSPanelFace::onCloseTexturePicker, this));
mBumpyTextureCtrl->setImmediateFilterPermMask(PERM_NONE);
mBumpyTextureCtrl->setDnDFilterPermMask(PERM_COPY | PERM_TRANSFER);
// Blinn-Phong Specular texture swatch
mShinyTextureCtrl->setDefaultImageAssetID(DEFAULT_OBJECT_SPECULAR);
mShinyTextureCtrl->setCommitCallback(boost::bind(&FSPanelFace::onCommitSpecularTexture, this, _1, _2));
mShinyTextureCtrl->setCommitCallback(boost::bind(&FSPanelFace::onCommitSpecularTexture, this));
mShinyTextureCtrl->setOnCancelCallback(boost::bind(&FSPanelFace::onCancelSpecularTexture, this));
mShinyTextureCtrl->setDragCallback(boost::bind(&FSPanelFace::onDragTexture, this, _2));
mShinyTextureCtrl->setOnCloseCallback(boost::bind(&FSPanelFace::onCloseTexturePicker, this, _2));
mShinyTextureCtrl->setDragCallback(boost::bind(&FSPanelFace::onDragTexture, this, _1, _2));
mShinyTextureCtrl->setOnCloseCallback(boost::bind(&FSPanelFace::onCloseTexturePicker, this));
mShinyTextureCtrl->setImmediateFilterPermMask(PERM_NONE);
mShinyTextureCtrl->setDnDFilterPermMask(PERM_COPY | PERM_TRANSFER);
@ -800,7 +801,7 @@ BOOL FSPanelFace::postBuild()
mMaterialCtrlPBR->setOnSelectCallback(boost::bind(&FSPanelFace::onSelectPbr, this));
mMaterialCtrlPBR->setDragCallback(boost::bind(&FSPanelFace::onDragPbr, this, _2));
mMaterialCtrlPBR->setOnTextureSelectedCallback(boost::bind(&FSPanelFace::onPbrSelectionChanged, this, _1));
mMaterialCtrlPBR->setOnCloseCallback(boost::bind(&FSPanelFace::onCloseTexturePicker, this, _2));
mMaterialCtrlPBR->setOnCloseCallback(boost::bind(&FSPanelFace::onCloseTexturePicker, this));
mMaterialCtrlPBR->setImmediateFilterPermMask(PERM_NONE);
mMaterialCtrlPBR->setDnDFilterPermMask(PERM_COPY | PERM_TRANSFER);
mMaterialCtrlPBR->setBakeTextureEnabled(false);
@ -1979,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
@ -3584,12 +3581,26 @@ void FSPanelFace::onSelectPbr(const LLUICtrl* map_ctrl)
onCommitPbr(map_ctrl);
}
BOOL FSPanelFace::onDragTexture(LLInventoryItem* item)
BOOL FSPanelFace::onDragTexture(const LLUICtrl* texture_ctrl, LLInventoryItem* item)
{
bool accept = true;
for (LLObjectSelection::root_iterator iter = LLSelectMgr::getInstance()->getSelection()->root_begin();
iter != LLSelectMgr::getInstance()->getSelection()->root_end(); iter++)
{
// applying the texture relies on the tab control showing the correct channel
if (texture_ctrl == mTextureCtrl)
{
selectMatChannel(MATTYPE_DIFFUSE);
}
else if (texture_ctrl == mBumpyTextureCtrl)
{
selectMatChannel(MATTYPE_NORMAL);
}
else if (texture_ctrl == mShinyTextureCtrl)
{
selectMatChannel(MATTYPE_SPECULAR);
}
LLSelectNode* node = *iter;
LLViewerObject* obj = node->getObject();
if (!LLToolDragAndDrop::isInventoryDropAcceptable(obj, item))
@ -3601,11 +3612,23 @@ BOOL FSPanelFace::onDragTexture(LLInventoryItem* item)
return accept;
}
void FSPanelFace::onCommitTexture(const LLUICtrl* ctrl, const LLSD& data)
void FSPanelFace::onCommitTexture()
{
LL_WARNS() << "onCommitTexture" << LL_ENDL;
add(LLStatViewer::EDIT_TEXTURE, 1);
// applying the texture relies on the tab control showing the correct channel
selectMatChannel(MATTYPE_DIFFUSE);
sendTexture();
}
void FSPanelFace::onSelectTexture()
{
add(LLStatViewer::EDIT_TEXTURE, 1);
// applying the texture relies on the tab control showing the correct channel
selectMatChannel(MATTYPE_DIFFUSE);
LLSelectMgr::getInstance()->saveSelectedObjectTextures();
sendTexture();
@ -3635,29 +3658,31 @@ void FSPanelFace::onCommitTexture(const LLUICtrl* ctrl, const LLSD& data)
LLSelectedTEMaterial::setDiffuseAlphaMode(this, getCurrentDiffuseAlphaMode());
// can't just pass "ctrl" on because it's const, and we also need to check
// the ctrl type so we make sure it's a texture swatch
onTextureSelectionChanged(ctrl->getName());
onTextureSelectionChanged(mTextureCtrl);
}
void FSPanelFace::onCommitNormalTexture(const LLUICtrl* ctrl, const LLSD& data)
void FSPanelFace::onCommitNormalTexture()
{
LL_DEBUGS("Materials") << data << LL_ENDL;
LLUUID nmap_id = getCurrentNormalMap();
// applying the texture relies on the tab control showing the correct channel
selectMatChannel(MATTYPE_NORMAL);
sendBump(nmap_id.isNull() ? 0 : BUMPY_TEXTURE);
onTextureSelectionChanged(ctrl->getName());
onTextureSelectionChanged(mBumpyTextureCtrl);
}
void FSPanelFace::onCommitSpecularTexture(const LLUICtrl* ctrl, const LLSD& data)
void FSPanelFace::onCommitSpecularTexture()
{
LL_DEBUGS("Materials") << data << LL_ENDL;
// applying the texture relies on the tab control showing the correct channel
selectMatChannel(MATTYPE_SPECULAR);
sendShiny(SHINY_TEXTURE);
onTextureSelectionChanged(ctrl->getName());
onTextureSelectionChanged(mShinyTextureCtrl);
}
void FSPanelFace::onCloseTexturePicker(const LLSD& data)
void FSPanelFace::onCloseTexturePicker()
{
LL_DEBUGS("Materials") << data << LL_ENDL;
updateUI();
}
@ -5350,47 +5375,43 @@ void FSPanelFace::onCommitGLTFUVSpinner(const LLUICtrl* ctrl, const LLSD& user_d
}
// selection inside the texture/material picker changed
void FSPanelFace::onTextureSelectionChanged(const std::string& which_control)
void FSPanelFace::onTextureSelectionChanged(LLTextureCtrl* texture_ctrl)
{
LL_DEBUGS("Materials") << "control " << which_control << LL_ENDL;
LL_DEBUGS("Materials") << "control " << texture_ctrl->getName() << LL_ENDL;
LLTextureCtrl* texture_ctrl = findChild<LLTextureCtrl>(which_control);
if (texture_ctrl)
LLInventoryItem* itemp = gInventory.getItem(texture_ctrl->getImageItemID());
if (!itemp)
{
LLInventoryItem* itemp = gInventory.getItem(texture_ctrl->getImageItemID());
if (!itemp)
{
// no inventory asset available, i.e. could be "Blank"
return;
}
// no inventory asset available, i.e. could be "Blank"
return;
}
LL_WARNS("Materials") << "item inventory id " << itemp->getUUID() << " - item asset " << itemp->getAssetUUID() << LL_ENDL;
LL_WARNS("Materials") << "item inventory id " << itemp->getUUID() << " - item asset " << itemp->getAssetUUID() << LL_ENDL;
LLUUID obj_owner_id;
std::string obj_owner_name;
LLSelectMgr::instance().selectGetOwner(obj_owner_id, obj_owner_name);
LLUUID obj_owner_id;
std::string obj_owner_name;
LLSelectMgr::instance().selectGetOwner(obj_owner_id, obj_owner_name);
LLSaleInfo sale_info;
LLSelectMgr::instance().selectGetSaleInfo(sale_info);
LLSaleInfo sale_info;
LLSelectMgr::instance().selectGetSaleInfo(sale_info);
bool can_copy = itemp->getPermissions().allowCopyBy(gAgentID); // do we have perm to copy this texture?
bool can_transfer = itemp->getPermissions().allowOperationBy(PERM_TRANSFER, gAgentID); // do we have perm to transfer this texture?
bool is_object_owner = gAgentID == obj_owner_id; // does object for which we are going to apply texture belong to the agent?
bool not_for_sale = !sale_info.isForSale(); // is object for which we are going to apply texture not for sale?
bool can_copy = itemp->getPermissions().allowCopyBy(gAgentID); // do we have perm to copy this texture?
bool can_transfer = itemp->getPermissions().allowOperationBy(PERM_TRANSFER, gAgentID); // do we have perm to transfer this texture?
bool is_object_owner = gAgentID == obj_owner_id; // does object for which we are going to apply texture belong to the agent?
bool not_for_sale = !sale_info.isForSale(); // is object for which we are going to apply texture not for sale?
if (can_copy && can_transfer)
{
texture_ctrl->setCanApply(true, true);
return;
}
if (can_copy && can_transfer)
{
texture_ctrl->setCanApply(true, true);
return;
}
// if texture has (no-transfer) attribute it can be applied only for object which we own and is not for sale
texture_ctrl->setCanApply(false, can_transfer ? true : is_object_owner && not_for_sale);
// if texture has (no-transfer) attribute it can be applied only for object which we own and is not for sale
texture_ctrl->setCanApply(false, can_transfer ? true : is_object_owner && not_for_sale);
if (gSavedSettings.getBOOL("TextureLivePreview"))
{
LLNotificationsUtil::add("LivePreviewUnavailable");
}
if (gSavedSettings.getBOOL("TextureLivePreview"))
{
LLNotificationsUtil::add("LivePreviewUnavailable");
}
}
@ -5960,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");
}
}

View File

@ -197,17 +197,18 @@ protected:
void onSelectColor();
// Blinn-Phong Diffuse texture swatch
void onCommitTexture(const LLUICtrl* ctrl, const LLSD& data);
void onSelectTexture();
void onCommitTexture();
void onCancelTexture();
BOOL onDragTexture(LLInventoryItem* item); // this function is to return TRUE if the drag should succeed.
void onCloseTexturePicker(const LLSD& data);
BOOL onDragTexture(const LLUICtrl* texture_ctrl, LLInventoryItem* item); // this function is to return TRUE if the drag should succeed.
void onCloseTexturePicker();
// Blinn-Phong Normal texture swatch
void onCommitNormalTexture(const LLUICtrl* ctrl, const LLSD& data);
void onCommitNormalTexture();
void onCancelNormalTexture();
// Blinn-Phong Specular texture swatch
void onCommitSpecularTexture(const LLUICtrl* ctrl, const LLSD& data);
void onCommitSpecularTexture();
void onCancelSpecularTexture();
// Blinn-Phong Specular tint color swatch
@ -225,7 +226,7 @@ protected:
* If agent selects texture which is not allowed to be applied for the currently selected object,
* all controls of the floater texture picker which allow to apply the texture will be disabled.
*/
void onTextureSelectionChanged(const std::string& which_control);
void onTextureSelectionChanged(LLTextureCtrl* texture_ctrl);
// Media
void onClickBtnEditMedia();

View File

@ -331,6 +331,8 @@ void FSPanelRadar::updateList(const std::vector<LLSD>& 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<LLSD>& 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<LLSD>& 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();

View File

@ -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

View File

@ -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;

View File

@ -2751,6 +2751,17 @@ void LLAgent::endAnimationUpdateUI()
// clean up UI from mode we're leaving
if (gAgentCamera.getLastCameraMode() == CAMERA_MODE_MOUSELOOK )
{
// <FS:Zi> FIRE-33958: clear out any visible toasts/group notices before leaving mouselook
LLNotificationsUI::LLScreenChannel* channel = dynamic_cast<LLNotificationsUI::LLScreenChannel*>(
LLNotificationsUI::LLChannelManager::getInstance()->findChannelByID(LLNotificationsUI::NOTIFICATION_CHANNEL_UUID)
);
if(channel)
{
channel->removeAndStoreAllStorableToasts();
}
// </FS:Zi>
// <FS:Zi> Unhide chat bar, unless autohide is enabled
gSavedSettings.setBOOL("MouseLookEnabled",FALSE);
if(!gSavedSettings.getBOOL("AutohideChatBar"))
@ -2914,6 +2925,16 @@ void LLAgent::endAnimationUpdateUI()
//---------------------------------------------------------------------
if (gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK)
{
// <FS:Zi> FIRE-33958: clear out any visible toasts/group notices before entering mouselook
LLNotificationsUI::LLScreenChannel* channel = dynamic_cast<LLNotificationsUI::LLScreenChannel*>(
LLNotificationsUI::LLChannelManager::getInstance()->findChannelByID(LLNotificationsUI::NOTIFICATION_CHANNEL_UUID)
);
if(channel)
{
channel->removeAndStoreAllStorableToasts();
}
// </FS:Zi>
// <FS:PP> FIRE-8868: Show UI in mouselook
if(!gSavedSettings.getBOOL("FSShowInterfaceInMouselook"))

View File

@ -267,6 +267,25 @@ S32 LLAgentBenefits::getTextureUploadCost(const LLImageBase* tex) const
return getTextureUploadCost();
}
// <FS:Chanayane> 2048x2048 snapshots upload to inventory
S32 LLAgentBenefits::getTextureUploadCost(S32 w, S32 h) const
{
if (w > 0 && h > 0)
{
S32 area = w * h;
if (area >= MIN_2K_TEXTURE_AREA)
{
return get2KTextureUploadCost(area);
}
else
{
return getTextureUploadCost();
}
}
return getTextureUploadCost();
}
// </FS:Chanayane>
S32 LLAgentBenefits::get2KTextureUploadCost(S32 area) const
{
if (m_2k_texture_upload_cost.empty())

View File

@ -54,6 +54,9 @@ public:
S32 getTextureUploadCost() const;
S32 getTextureUploadCost(const LLViewerTexture* tex) const;
S32 getTextureUploadCost(const LLImageBase* tex) const;
// <FS:Chanayane> 2048x2048 snapshots upload to inventory
S32 getTextureUploadCost(S32 w, S32 h) const;
// </FS:Chanayane>
S32 get2KTextureUploadCost(S32 area) const;
bool findUploadCost(LLAssetType::EType& asset_type, S32& cost) const;

View File

@ -189,7 +189,10 @@ LLAgentCamera::LLAgentCamera() :
mPanRightKey(0.f),
mPanInKey(0.f),
mPanOutKey(0.f),
// <FS:Chanayane> Camera roll (from Alchemy)
mRollLeftKey(0.f),
mRollRightKey(0.f),
// </FS:Chanayane>
mPointAtObject(NULL)
{
mFollowCam.setMaxCameraDistantFromSubject( MAX_CAMERA_DISTANCE_FROM_AGENT );
@ -200,6 +203,9 @@ LLAgentCamera::LLAgentCamera() :
resetPanDiff();
resetOrbitDiff();
// <FS:Chanayane> Camera roll (from Alchemy)
resetCameraRoll();
// </FS:Chanayane>
}
// Requires gSavedSettings to be initialized.
@ -381,6 +387,9 @@ void LLAgentCamera::resetView(BOOL reset_camera, BOOL change_camera, BOOL moveme
setFocusOnAvatar(TRUE, ANIMATE);
mCameraFOVZoomFactor = 0.f;
// <FS:Chanayane> Camera roll (from Alchemy)
resetCameraRoll();
// </FS:Chanayane>
}
resetPanDiff();
resetOrbitDiff();
@ -782,11 +791,6 @@ F32 LLAgentCamera::getCameraZoomFraction(bool get_third_person)
return mHUDTargetZoom;
}
if (isDisableCameraConstraints())
{
return mCameraZoomFraction;
}
if (get_third_person || (mFocusOnAvatar && cameraThirdPerson()))
{
return clamp_rescale(mCameraZoomFraction, MIN_ZOOM_FRACTION, MAX_ZOOM_FRACTION, 1.f, 0.f);
@ -800,6 +804,10 @@ F32 LLAgentCamera::getCameraZoomFraction(bool get_third_person)
F32 min_zoom;
F32 max_zoom = getCameraMaxZoomDistance();
if (isDisableCameraConstraints())
{
max_zoom = MAX_CAMERA_DISTANCE_FROM_OBJECT;
}
F32 distance = (F32)mCameraFocusOffsetTarget.magVec();
if (mFocusObject.notNull())
@ -831,10 +839,6 @@ void LLAgentCamera::setCameraZoomFraction(F32 fraction)
{
mHUDTargetZoom = fraction;
}
else if (isDisableCameraConstraints())
{
mCameraZoomFraction = fraction;
}
else if (mFocusOnAvatar && cameraThirdPerson())
{
mCameraZoomFraction = rescale(fraction, 0.f, 1.f, MAX_ZOOM_FRACTION, MIN_ZOOM_FRACTION);
@ -849,6 +853,10 @@ void LLAgentCamera::setCameraZoomFraction(F32 fraction)
{
F32 min_zoom = LAND_MIN_ZOOM;
F32 max_zoom = getCameraMaxZoomDistance();
if (isDisableCameraConstraints())
{
max_zoom = MAX_CAMERA_DISTANCE_FROM_OBJECT;
}
if (mFocusObject.notNull())
{
@ -938,6 +946,20 @@ void LLAgentCamera::cameraOrbitOver(const F32 angle)
}
}
// <FS:Chanayane> Camera roll (from Alchemy)
//-----------------------------------------------------------------------------
// cameraRollOver()
//-----------------------------------------------------------------------------
void LLAgentCamera::cameraRollOver(const F32 angle)
{
mRollAngle += fmodf(angle, F_TWO_PI);
}
void LLAgentCamera::resetCameraRoll()
{
mRollAngle = 0.f;
}
// </FS:Chanayane>
void LLAgentCamera::resetCameraOrbit()
{
LLVector3 camera_offset_unit(mCameraFocusOffsetTarget);
@ -951,6 +973,9 @@ void LLAgentCamera::resetCameraOrbit()
cameraZoomIn(1.f);
resetOrbitDiff();
// <FS:Chanayane> Camera roll (from Alchemy)
resetCameraRoll();
// </FS:Chanayane>
}
void LLAgentCamera::resetOrbitDiff()
@ -1357,6 +1382,9 @@ void LLAgentCamera::updateCamera()
const F32 ORBIT_OVER_RATE = 90.f * DEG_TO_RAD; // radians per second
const F32 ORBIT_AROUND_RATE = 90.f * DEG_TO_RAD; // radians per second
const F32 PAN_RATE = 5.f; // meters per second
// <FS:Chanayane> Camera roll (from Alchemy)
const F32 ROLL_RATE = 45.f * DEG_TO_RAD; // radians per second
// </FS:Chanayane>
if (gAgentCamera.getOrbitUpKey() || gAgentCamera.getOrbitDownKey())
{
@ -1398,6 +1426,14 @@ void LLAgentCamera::updateCamera()
cameraPanUp(input_rate * PAN_RATE / gFPSClamped );
}
// <FS:Chanayane> Camera roll (from Alchemy)
if (getRollLeftKey() || getRollRightKey())
{
F32 input_rate = getRollRightKey() - getRollLeftKey();
cameraRollOver(input_rate * ROLL_RATE / gFPSClamped);
}
// </FS:Chanayane>
// Clear camera keyboard keys.
gAgentCamera.clearOrbitKeys();
gAgentCamera.clearPanKeys();
@ -1642,7 +1678,20 @@ void LLAgentCamera::updateCamera()
torso_joint->setScale(torso_scale);
chest_joint->setScale(chest_scale);
}
// <FS:Chanayane> Camera roll (from Alchemy)
// We have do this at the very end to make sure it takes all previous calculations into
// account and then applies our roll on top of it, besides it wouldn't even work otherwise.
LLQuaternion rot_quat = LLViewerCamera::getInstance()->getQuaternion();
LLMatrix3 rot_mat(mRollAngle, 0.f, 0.f);
rot_quat = LLQuaternion(rot_mat)*rot_quat;
LLMatrix3 mat(rot_quat);
LLViewerCamera::getInstance()->mXAxis = LLVector3(mat.mMatrix[0]);
LLViewerCamera::getInstance()->mYAxis = LLVector3(mat.mMatrix[1]);
LLViewerCamera::getInstance()->mZAxis = LLVector3(mat.mMatrix[2]);
}
// </FS:Chanayane>
void LLAgentCamera::updateLastCamera()
{
@ -2757,6 +2806,9 @@ void LLAgentCamera::switchCameraPreset(ECameraPreset preset)
resetPanDiff();
resetOrbitDiff();
// <FS:Chanayane> Camera roll (from Alchemy)
resetCameraRoll();
// </FS:Chanayane>
gSavedSettings.setU32("CameraPresetType", mCameraPreset);
}
@ -3261,6 +3313,10 @@ void LLAgentCamera::clearOrbitKeys()
mOrbitDownKey = 0.f;
mOrbitInKey = 0.f;
mOrbitOutKey = 0.f;
// <FS:Chanayane> Camera roll (from Alchemy)
mRollLeftKey = 0.f;
mRollRightKey = 0.f;
// </FS:Chanayane>
}
void LLAgentCamera::clearPanKeys()
@ -3291,6 +3347,9 @@ void LLAgentCamera::storeCameraPosition()
// flycam mode and not repositioned after
LLVector3d forward = LLVector3d(1.0, 0.0, 0.0) * LLViewerCamera::getInstance()->getQuaternion() + getCameraPositionGlobal();
gSavedPerAccountSettings.setVector3d("FSStoredCameraFocus", forward);
// <FS:Chanayane> Camera roll (from Alchemy)
gSavedPerAccountSettings.setF32("ALStoredCameraRoll", mRollAngle);
// </FS:Chanayane>
LLUUID stored_camera_focus_object_id = LLUUID::null;
if (mFocusObject)
@ -3304,6 +3363,9 @@ void LLAgentCamera::loadCameraPosition()
{
LLVector3d stored_camera_pos = gSavedPerAccountSettings.getVector3d("FSStoredCameraPos");
LLVector3d stored_camera_focus = gSavedPerAccountSettings.getVector3d("FSStoredCameraFocus");
// <FS:Chanayane> Camera roll (from Alchemy)
F32 stored_camera_roll = gSavedPerAccountSettings.getF32("ALStoredCameraRoll");
// </FS:Chanayane>
LLUUID stored_camera_focus_object_id = LLUUID(gSavedPerAccountSettings.getString("FSStoredCameraFocusObjectId"));
F32 renderFarClip = gSavedSettings.getF32("RenderFarClip");
@ -3332,6 +3394,9 @@ void LLAgentCamera::loadCameraPosition()
unlockView();
setCameraPosAndFocusGlobal(stored_camera_pos, stored_camera_focus, stored_camera_focus_object_id);
// <FS:Chanayane> Camera roll (from Alchemy)
mRollAngle = stored_camera_roll;
// </FS:Chanayane>
}
// </FS:Ansariel> FIRE-7758: Save/load camera position feature

View File

@ -300,8 +300,14 @@ public:
void cameraOrbitAround(const F32 radians); // Rotate camera CCW radians about build focus point
void cameraOrbitOver(const F32 radians); // Rotate camera forward radians over build focus point
void cameraOrbitIn(const F32 meters); // Move camera in toward build focus point
// <FS:Chanayane> Camera roll (from Alchemy)
void cameraRollOver(const F32 radians); // Roll the camera
// </FS:Chanayane>
void resetCameraOrbit();
void resetOrbitDiff();
// <FS:Chanayane> Camera roll (from Alchemy)
void resetCameraRoll();
// </FS:Chanayane>
//--------------------------------------------------------------------
// Zoom
//--------------------------------------------------------------------
@ -409,6 +415,10 @@ public:
F32 getOrbitDownKey() const { return mOrbitDownKey; }
F32 getOrbitInKey() const { return mOrbitInKey; }
F32 getOrbitOutKey() const { return mOrbitOutKey; }
// <FS:Chanayane> Camera roll (from Alchemy)
F32 getRollLeftKey() const { return mRollLeftKey; }
F32 getRollRightKey() const { return mRollRightKey; }
// </FS:Chanayane>
void setOrbitLeftKey(F32 mag) { mOrbitLeftKey = mag; }
void setOrbitRightKey(F32 mag) { mOrbitRightKey = mag; }
@ -416,6 +426,10 @@ public:
void setOrbitDownKey(F32 mag) { mOrbitDownKey = mag; }
void setOrbitInKey(F32 mag) { mOrbitInKey = mag; }
void setOrbitOutKey(F32 mag) { mOrbitOutKey = mag; }
// <FS:Chanayane> Camera roll (from Alchemy)
void setRollLeftKey(F32 mag) { mRollLeftKey = mag; }
void setRollRightKey(F32 mag) { mRollRightKey = mag; }
// </FS:Chanayane>
void clearOrbitKeys();
private:
@ -429,6 +443,12 @@ private:
F32 mOrbitAroundRadians;
F32 mOrbitOverAngle;
// <FS:Chanayane> Camera roll (from Alchemy)
F32 mRollLeftKey;
F32 mRollRightKey;
F32 mRollAngle = 0.f;
// </FS:Chanayane>
//--------------------------------------------------------------------
// Pan
//--------------------------------------------------------------------

View File

@ -984,6 +984,7 @@ void AISAPI::InvokeAISCommandCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t ht
id = result["linked_id"];
}
break;
case COPYINVENTORY: // <FS:Ansariel> Bring this back from Kitty's patch
case CREATEINVENTORY:
// CREATEINVENTORY can have multiple callbacks
if (result.has("_created_categories"))
@ -1009,6 +1010,25 @@ void AISAPI::InvokeAISCommandCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t ht
}
}
break;
// <FS:Zi> FIRE-34169 - Fix #RLV ~Subfolder creation
case UPDATECATEGORY:
if (result.has("_updated_categories"))
{
LLSD& items = result["_updated_categories"];
LLSD::array_const_iterator item_iter;
for (item_iter = items.beginArray(); item_iter != items.endArray(); ++item_iter)
{
LLUUID item_id = *item_iter;
callback(item_id);
needs_callback = false;
}
}
else if (result.has("category_id"))
{
id = result["category_id"];
}
break;
// </FS:Zi>
default:
break;
}

View File

@ -1131,6 +1131,12 @@ bool LLAppViewer::init()
gGLActive = TRUE;
initWindow();
LL_INFOS("InitInfo") << "Window is initialized." << LL_ENDL ;
// <FS:Beq> allow detected hardware to be overridden.
gGLManager.mVRAMDetected = gGLManager.mVRAM;
LL_INFOS("AppInit") << "VRAM detected: " << gGLManager.mVRAMDetected << LL_ENDL;
overrideDetectedHardware();
// </FS:Beq>
// writeSystemInfo can be called after window is initialized (gViewerWindow non-null)
writeSystemInfo();
@ -1491,6 +1497,20 @@ bool LLAppViewer::init()
return true;
}
// <FS:Beq> allow detected hardware to be overridden.
void LLAppViewer::overrideDetectedHardware()
{
// Override the VRAM Detection if FSOverrideVRAMDetection is set.
if ( gSavedSettings.getBOOL("FSOverrideVRAMDetection") )
{
S32 forced_video_memory = gSavedSettings.getS32("FSForcedVideoMemory");
// Note: 0 is allowed here, some systems detect VRAM as zero so override should support emulating them.
LL_INFOS("AppInit") << "Overriding VRAM to " << forced_video_memory*1024 << " MB" << LL_ENDL;
gGLManager.mVRAM = forced_video_memory*1024;
}
}
// </FS:Beq>
void LLAppViewer::initMaxHeapSize()
{
//set the max heap size.
@ -3139,7 +3159,7 @@ bool LLAppViewer::initConfiguration()
loadSettingsFromDirectory("UserSession");
//AO: Re-read user settings again. This is a Firestorm hack to get user settings to override modes
// <FS:AO> Re-read user settings again. This is a Firestorm hack to get user settings to override modes
//Todo, find a cleaner way of doing this via the various set_default arguments.
loadSettingsFromDirectory("User");
@ -3936,6 +3956,7 @@ LLSD LLAppViewer::getViewerInfo() const
info["GRAPHICS_CARD_VENDOR"] = ll_safe_string((const char*)(glGetString(GL_VENDOR)));
info["GRAPHICS_CARD"] = ll_safe_string((const char*)(glGetString(GL_RENDERER)));
info["GRAPHICS_CARD_MEMORY"] = gGLManager.mVRAM;
info["GRAPHICS_CARD_MEMORY_DETECTED"] = gGLManager.mVRAMDetected; // <FS:Beq/> allow detected hardware to be overridden.
#if LL_WINDOWS
std::string drvinfo;
@ -4137,18 +4158,18 @@ LLSD LLAppViewer::getViewerInfo() const
}
// </FS:PP>
// <FS:PP> ALM enabled or disabled
if (gSavedSettings.getBOOL("RenderDeferred"))
// <FS:Ansariel> Include VRAM budget
if (auto budget = gSavedSettings.getU32("RenderMaxVRAMBudget"); budget > 0)
{
info["ALMSTATUS"] = LLTrans::getString("PermYes");
info["ALMSTATUS_FSDATA_ENGLISH"] = "Yes";
info["VRAM_BUDGET"] = std::to_string(budget) + " MB";
info["VRAM_BUDGET_ENGLISH"] = std::to_string(budget) + " MB";
}
else
{
info["ALMSTATUS"] = LLTrans::getString("PermNo");
info["ALMSTATUS_FSDATA_ENGLISH"] = "No";
info["VRAM_BUDGET"] = LLTrans::getString("Unlimited");
info["VRAM_BUDGET_ENGLISH"] = "Unlimited";
}
// </FS:PP>
// </FS:Ansariel>
return info;
}

View File

@ -245,6 +245,7 @@ protected:
virtual void initLoggingAndGetLastDuration(); // Initialize log files, logging system
virtual void initConsole() {}; // Initialize OS level debugging console.
virtual bool initHardwareTest() { return true; } // A false result indicates the app should quit.
virtual void overrideDetectedHardware(); // <FS:Beq/> Override VRAM (and others in future?) consistently.
virtual bool initSLURLHandler();
virtual bool sendURLToOtherInstance(const std::string& url);
@ -368,7 +369,7 @@ private:
};
// consts from viewer.h
const S32 AGENT_UPDATES_PER_SECOND = 10;
const S32 AGENT_UPDATES_PER_SECOND = 125; // <FS:Beq/> 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

View File

@ -1027,22 +1027,10 @@ bool LLAppViewerWin32::initHardwareTest()
if (gGLManager.mVRAM == 0)
{
// <FS:Beq> Allow the user to override the VRAM detection
if ( gSavedSettings.getBOOL("FSOverrideVRAMDetection") )
{
S32 forced_video_memory = gSavedSettings.getS32("FSForcedVideoMemory");
if ( forced_video_memory > 0 )
{
LL_INFOS("AppInit") << "Forcing VRAM to " << forced_video_memory*1024 << " MB" << LL_ENDL;
gGLManager.mVRAM = forced_video_memory*1024;
}
}
else
// </FS:Beq>
gGLManager.mVRAM = gDXHardware.getVRAM();
}
LL_INFOS("AppInit") << "Detected VRAM: " << gGLManager.mVRAM << LL_ENDL;
// LL_INFOS("AppInit") << "Detected VRAM: " << gGLManager.mVRAM << LL_ENDL; // <FS:Beq/> move this into common code
return true;
}

View File

@ -191,7 +191,9 @@ BOOL LLViewerDynamicTexture::updateAllInstances()
return TRUE;
}
LLRenderTarget& bake_target = gPipeline.mAuxillaryRT.deferredScreen;
// <FS:Ansariel> Auxillary render target pack for 1024px LLDynamicTexture
//LLRenderTarget& bake_target = gPipeline.mAuxillaryRT.deferredScreen;
LLRenderTarget& bake_target = gPipeline.mDynamicTextureRT.deferredScreen;
if (!bake_target.isComplete())
{

View File

@ -88,11 +88,17 @@ protected:
void onCameraTrack();
void onCameraRotate();
F32 getOrbitRate(F32 time);
// <FS:Chanayane> Camera roll (from Alchemy)
void onRollLeftHeldDown();
void onRollRightHeldDown();
// </FS:Chanayane>
private:
LLButton* mPlusBtn { nullptr };
LLButton* mMinusBtn{ nullptr };
LLSlider* mSlider{ nullptr };
LLButton* mRollLeft{ nullptr };
LLButton* mRollRight{ nullptr };
friend class LLUICtrlFactory;
};
@ -177,6 +183,10 @@ void LLPanelCameraZoom::onCreate()
mCommitCallbackRegistrar.add("Slider.value_changed", boost::bind(&LLPanelCameraZoom::onSliderValueChanged, this));
mCommitCallbackRegistrar.add("Camera.track", boost::bind(&LLPanelCameraZoom::onCameraTrack, this));
mCommitCallbackRegistrar.add("Camera.rotate", boost::bind(&LLPanelCameraZoom::onCameraRotate, this));
// <FS:Chanayane> Camera roll (from Alchemy)
mCommitCallbackRegistrar.add("Camera.roll_left", boost::bind(&LLPanelCameraZoom::onRollLeftHeldDown, this));
mCommitCallbackRegistrar.add("Camera.roll_right", boost::bind(&LLPanelCameraZoom::onRollRightHeldDown, this));
// </FS:Chanayane>
}
BOOL LLPanelCameraZoom::postBuild()
@ -184,6 +194,10 @@ BOOL LLPanelCameraZoom::postBuild()
mPlusBtn = getChild<LLButton>("zoom_plus_btn");
mMinusBtn = getChild<LLButton>("zoom_minus_btn");
mSlider = getChild<LLSlider>("zoom_slider");
// <FS:Chanayane> Camera roll (from Alchemy)
mRollLeft = getChild<LLButton>("roll_left");
mRollRight = getChild<LLButton>("roll_right");
// </FS:Chanayane>
return LLPanel::postBuild();
}
@ -213,6 +227,22 @@ void LLPanelCameraZoom::onZoomMinusHeldDown()
gAgentCamera.setOrbitOutKey(getOrbitRate(time));
}
// <FS:Chanayane> Camera roll (from Alchemy)
void LLPanelCameraZoom::onRollLeftHeldDown()
{
F32 time = mRollLeft->getHeldDownTime();
gAgentCamera.unlockView();
gAgentCamera.setRollLeftKey(getOrbitRate(time));
}
void LLPanelCameraZoom::onRollRightHeldDown()
{
F32 time = mRollRight->getHeldDownTime();
gAgentCamera.unlockView();
gAgentCamera.setRollRightKey(getOrbitRate(time));
}
// </FS:Chanayane>
void LLPanelCameraZoom::onCameraTrack()
{
// EXP-202 when camera panning activated, remove the hint

View File

@ -2927,10 +2927,10 @@ void LLPanelLandAccess::refresh_ui()
BOOL public_access = getChild<LLUICtrl>("public_access")->getValue().asBoolean();
if (public_access)
{
bool override = false;
// bool overridden = false; // <FS:Beq/> set but never used clang appeasement
if(parcel->getRegionDenyAnonymousOverride())
{
override = true;
// overridden = true; // <FS:Beq/> set but never used clang appeasement
getChildView("limit_payment")->setEnabled(FALSE);
}
else
@ -2939,7 +2939,7 @@ void LLPanelLandAccess::refresh_ui()
}
if(parcel->getRegionDenyAgeUnverifiedOverride())
{
override = true;
// overridden = true; // <FS:Beq/> set but never used clang appeasement
getChildView("limit_age_verified")->setEnabled(FALSE);
}
else

View File

@ -5278,7 +5278,7 @@ static void copy_prefs_file(const std::string& from, const std::string& to)
LL_INFOS() << "Copying " << from << " to " << to << LL_ENDL;
std::error_code ec;
if (!std::filesystem::copy_file(from, to, ec) || ec)
if (!std::filesystem::copy_file(from, to, std::filesystem::copy_options::overwrite_existing, ec) || ec)
LL_WARNS() << "Couldn't copy file: " << ec.message() << LL_ENDL;
}

View File

@ -58,7 +58,10 @@ LLSnapshotFloaterView* gSnapshotFloaterView = NULL;
const F32 AUTO_SNAPSHOT_TIME_DELAY = 1.f;
const S32 MAX_POSTCARD_DATASIZE = 1572864; // 1.5 megabyte, similar to simulator limit
const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512
// <FS:Chanayane> 2048x2048 snapshots upload to inventory
//const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512
const S32 MAX_TEXTURE_SIZE = 2048 ; //max upload texture size 2048 * 2048
// <FS:Chanayane> 2048x2048 snapshots upload to inventory
static LLDefaultChildRegistry::Register<LLSnapshotFloaterView> r("snapshot_floater_view");

View File

@ -302,6 +302,7 @@ BOOL LLFloaterTools::postBuild()
LLSelectMgr::instance().setFSShowHideHighlight(FS_SHOW_HIDE_HIGHLIGHT_NORMAL);
mCheckActualRoot = getChild<LLCheckBoxCtrl>("checkbox actual root");
mCheckSelectProbes = getChild<LLCheckBoxCtrl>("checkbox select probes");
// </FS:KC>
@ -428,6 +429,7 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)
// <FS:KC>
mCheckShowHighlight(NULL),
mCheckActualRoot(NULL),
mCheckSelectProbes(NULL),
// </FS:KC>
mBtnRotateLeft(NULL),
@ -1014,6 +1016,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
// <FS:KC>
if (mCheckShowHighlight) mCheckShowHighlight->setVisible( edit_visible );
if (mCheckActualRoot) mCheckActualRoot->setVisible( edit_visible );
if (mCheckSelectProbes) mCheckSelectProbes->setVisible( edit_visible );
// </FS:KC>
// Create buttons

View File

@ -171,6 +171,7 @@ public:
LLCheckBoxCtrl* mCheckStretchTexture;
LLCheckBoxCtrl* mCheckShowHighlight; //Phoenix:KC
LLCheckBoxCtrl* mCheckActualRoot; //Phoenix:KC
LLCheckBoxCtrl* mCheckSelectProbes; // <FS:PP>
// Ansariel: Reverted the hack because then when clicking the label it
// doesn't check the checkbox anymore!

View File

@ -121,6 +121,7 @@ void LLHeroProbeManager::update()
// Find our nearest hero candidate.
float last_distance = 99999.f;
float camera_center_distance = 99999.f;
mNearestHero = nullptr; // <FS:Beq/> LL-1719/1721 Mirrors do not disable properly (interim fix)
for (auto vo : mHeroVOList)
{
if (vo && !vo->isDead() && vo->mDrawable.notNull() && vo->isReflectionProbe() && vo->getReflectionProbeIsBox())
@ -139,10 +140,23 @@ void LLHeroProbeManager::update()
bool visible = LLViewerCamera::instance().AABBInFrustum(center, size);
// <FS:Beq> Check if the reflection normal (Z-Up axis) is facing towards the camera
auto reflection_normal = LLVector3(0, 0, 1);
if(visible)
{
vo->mDrawable->getWorldRotation();
reflection_normal *= vo->mDrawable->getWorldRotation();
reflection_normal.normalize();
LLVector3 offset = camera_pos - vo->getPositionAgent();
visible = (reflection_normal * offset >= 0.0);
}
// </FS:Beq>
if (distance < last_distance && center_distance < camera_center_distance && visible)
{
probe_present = true;
mNearestHero = vo;
mMirrorNormal = reflection_normal;
last_distance = distance;
camera_center_distance = center_distance;
}
@ -160,10 +174,13 @@ void LLHeroProbeManager::update()
if (mNearestHero != nullptr && !mNearestHero->isDead() && mNearestHero->mDrawable.notNull())
{
LLVector3 hero_pos = mNearestHero->getPositionAgent();
LLVector3 face_normal = LLVector3(0, 0, 1);
// <FS:Beq> let's not redo work we already did
// LLVector3 face_normal = LLVector3(0, 0, 1);
face_normal *= mNearestHero->mDrawable->getWorldRotation();
face_normal.normalize();
// face_normal *= mNearestHero->mDrawable->getWorldRotation();
// face_normal.normalize();
const LLVector3 face_normal = mMirrorNormal; // this is redundant could use mMirrorNormal but as the code following is likely to change this might make merges simpler.
// </FS:Beq>
LLVector3 offset = camera_pos - hero_pos;
LLVector3 project = face_normal * (offset * face_normal);
@ -172,7 +189,7 @@ void LLHeroProbeManager::update()
mCurrentClipPlane.setVec(hero_pos, face_normal);
mMirrorPosition = hero_pos;
mMirrorNormal = face_normal;
// mMirrorNormal = face_normal; // <FS:Beq/> no need to assign back
probe_pos.load3(point.mV);
@ -204,10 +221,18 @@ void LLHeroProbeManager::update()
else
{
mNearestHero = nullptr;
mDefaultProbe->mViewerObject = nullptr; // <FS:Beq/> FIRE-34201 TP crash
}
mHeroProbeStrength = 1;
}
// <FS:Beq> LL-1719/1721 Mirrors do not disable properly (interim fix)
else
{
mNearestHero = nullptr;
mDefaultProbe->mViewerObject = nullptr; // <FS:Beq/> FIRE-34201 TP crash
}
// </FS:Beq>
}
void LLHeroProbeManager::renderProbes()

View File

@ -467,7 +467,6 @@ void LLModelPreview::rebuildUploadData()
{
assert_main_thread();
mDefaultPhysicsShapeP = NULL;
mUploadData.clear();
mTextureSet.clear();
@ -1662,11 +1661,11 @@ void LLModelPreview::genGlodLODs(S32 which_lod, U32 decimation, bool enforce_tri
U32 instanced_triangle_count = 0;
//get the triangle count for the whole scene
for (LLModelLoader::scene::iterator iter = mBaseScene.begin(), endIter = mBaseScene.end(); iter != endIter; ++iter)
for (auto& [pos, instance_list] : mBaseScene)
{
for (LLModelLoader::model_instance_list::iterator instance = iter->second.begin(), end_instance = iter->second.end(); instance != end_instance; ++instance)
for (auto& instance : instance_list)
{
LLModel* mdl = instance->mModel;
LLModel* mdl = instance.mModel;
if (mdl)
{
instanced_triangle_count += mdl->getNumTriangles();
@ -1675,9 +1674,9 @@ void LLModelPreview::genGlodLODs(S32 which_lod, U32 decimation, bool enforce_tri
}
//get the triangle count for the non-instanced set of models
for (U32 i = 0; i < mBaseModel.size(); ++i)
for (auto& model : mBaseModel)
{
triangle_count += mBaseModel[i]->getNumTriangles();
triangle_count += model->getNumTriangles();
}
//get ratio of uninstanced triangles to instanced triangles
@ -1736,9 +1735,9 @@ void LLModelPreview::genGlodLODs(S32 which_lod, U32 decimation, bool enforce_tri
if (object_dirty)
{
for (LLModelLoader::model_list::iterator iter = mBaseModel.begin(); iter != mBaseModel.end(); ++iter)
bool first_model = true;
for (auto mdl : mBaseModel)
{ //build GLOD objects for each model in base model list
LLModel* mdl = *iter;
if (mObject[mdl] != 0)
{
@ -1750,17 +1749,17 @@ void LLModelPreview::genGlodLODs(S32 which_lod, U32 decimation, bool enforce_tri
glodNewObject(mObject[mdl], mGroup, GLOD_DISCRETE);
stop_gloderror();
if (iter == mBaseModel.begin() && !mdl->mSkinWeights.empty())
if (first_model && !mdl->mSkinWeights.empty())
{ //regenerate vertex buffer for skinned models to prevent animation feedback during LOD generation
mVertexBuffer[5].clear();
}
first_model = false;
if (mVertexBuffer[5].empty())
{
genBuffers(5, false);
}
U32 tri_count = 0;
for (U32 i = 0; i < mVertexBuffer[5][mdl].size(); ++i)
{
LLVertexBuffer* buff = mVertexBuffer[5][mdl][i];
@ -1806,7 +1805,6 @@ void LLModelPreview::genGlodLODs(S32 which_lod, U32 decimation, bool enforce_tri
glodInsertElements( mObject[ mdl ], i, GL_TRIANGLES, num_indices, GL_UNSIGNED_SHORT, (U8*)index_strider.get(), 0, 0.f, &vbo );
// </FS:ND>
}
tri_count += num_indices / 3;
stop_gloderror();
}
@ -1854,8 +1852,6 @@ void LLModelPreview::genGlodLODs(S32 which_lod, U32 decimation, bool enforce_tri
mModel[lod].resize(mBaseModel.size());
mVertexBuffer[lod].clear();
U32 actual_tris = 0;
U32 actual_verts = 0;
U32 submeshes = 0;
mRequestedTriangleCount[lod] = (S32)((F32)triangle_count / triangle_ratio);
@ -2001,8 +1997,6 @@ void LLModelPreview::genGlodLODs(S32 which_lod, U32 decimation, bool enforce_tri
buff->getIndexStrider(index);
target_model->setVolumeFaceData(names[i], pos, norm, tc, index, buff->getNumVerts(), buff->getNumIndices());
actual_tris += buff->getNumIndices() / 3;
actual_verts += buff->getNumVerts();
++submeshes;
if (!validate_face(target_model->getVolumeFace(names[i])))

View File

@ -246,7 +246,7 @@ private:
/// It is set only when the user chooses a physics shape file that contains a mesh with a name that matches DEFAULT_PHYSICS_MESH_NAME.
/// It is reset when such a name is not found, and when resetting the modelpreview.
/// Not read unless mWarnOfUnmatchedPhyicsMeshes is true.
LLPointer<LLModel> mDefaultPhysicsShapeP;
LLPointer<LLModel> mDefaultPhysicsShapeP{nullptr};
typedef enum
{

View File

@ -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") == FALSE)
{

View File

@ -41,7 +41,10 @@
#include "llagentbenefits.h"
const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512
// <FS:Chanayane> 2048x2048 snapshots upload to inventory
//const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512
const S32 MAX_TEXTURE_SIZE = 2048 ; //max upload texture size 2048 * 2048
// </FS:Chanayane>
S32 power_of_two(S32 sz, S32 upper)
{
@ -66,7 +69,12 @@ BOOL LLPanelSnapshot::postBuild()
LLUICtrl* save_btn = findChild<LLUICtrl>("save_btn");
if (save_btn)
{
save_btn->setLabelArg("[UPLOAD_COST]", std::to_string(LLAgentBenefitsMgr::current().getTextureUploadCost()));
// <FS:Chanayane> 2048x2048 snapshots upload to inventory
//save_btn->setLabelArg("[UPLOAD_COST]", std::to_string(LLAgentBenefitsMgr::current().getTextureUploadCost()));
S32 w = getTypedPreviewWidth();
S32 h = getTypedPreviewHeight();
save_btn->setLabelArg("[UPLOAD_COST]", std::to_string(LLAgentBenefitsMgr::current().getTextureUploadCost(w, h)));
// </FS:Chanayane>
}
// </FS:Ansariel>
getChild<LLUICtrl>(getImageSizeComboName())->setCommitCallback(boost::bind(&LLPanelSnapshot::onResolutionComboCommit, this, _1));

View File

@ -187,7 +187,23 @@ LLPanelSnapshotInventory::~LLPanelSnapshotInventory()
void LLPanelSnapshotInventoryBase::onSend()
{
S32 expected_upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost();
// <FS:Chanayane> 2048x2048 snapshots upload to inventory
//S32 expected_upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost();
S32 w = 0;
S32 h = 0;
if( mSnapshotFloater )
{
LLSnapshotLivePreview* preview = mSnapshotFloater->getPreviewView();
if( preview )
{
preview->getSize(w, h);
}
}
S32 expected_upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost(w, h);
// </FS:Chanayane>
if (can_afford_transaction(expected_upload_cost))
{
if (mSnapshotFloater)

View File

@ -30,6 +30,7 @@
#include "llsidetraypanelcontainer.h"
#include "llfloatersnapshot.h" // FIXME: create a snapshot model
#include "llsnapshotlivepreview.h" // <FS:Chanayane> 2048x2048 snapshots upload to inventory
#include "llfloaterreg.h"
#include "llfloaterflickr.h" // <FS:Ansariel> Share to Flickr
@ -92,7 +93,22 @@ void LLPanelSnapshotOptions::onOpen(const LLSD& key)
void LLPanelSnapshotOptions::updateUploadCost()
{
S32 upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost();
// <FS:Chanayane> 2048x2048 snapshots upload to inventory
//S32 upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost();
S32 w = 0;
S32 h = 0;
if( mSnapshotFloater )
{
LLSnapshotLivePreview* preview = mSnapshotFloater->getPreviewView();
if( preview )
{
preview->getSize(w, h);
}
}
S32 upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost(w, h);
// </FS:Chanayane>
getChild<LLUICtrl>("save_to_inventory_btn")->setLabelArg("[AMOUNT]", llformat("%d", upload_cost));
}

View File

@ -66,7 +66,10 @@ F32 FALL_TIME = 0.6f;
S32 BORDER_WIDTH = 6;
S32 TOP_PANEL_HEIGHT = 30;
const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512
// <FS:Chanayane> 2048x2048 snapshots upload to inventory
//const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512
const S32 MAX_TEXTURE_SIZE = 2048 ; //max upload texture size 2048 * 2048
// <FS:Chanayane> 2048x2048 snapshots upload to inventory
std::set<LLSnapshotLivePreview*> LLSnapshotLivePreview::sList;
LLPointer<LLImageFormatted> LLSnapshotLivePreview::sSaveLocalImage = NULL;
@ -1131,7 +1134,10 @@ void LLSnapshotLivePreview::saveTexture(BOOL outfit_snapshot, std::string name)
LLAgentUI::buildLocationString(pos_string, LLAgentUI::LOCATION_FORMAT_FULL);
std::string who_took_it;
LLAgentUI::buildFullname(who_took_it);
S32 expected_upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost();
// <FS:Chanayane> 2048x2048 snapshots upload to inventory
//S32 expected_upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost();
S32 expected_upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost(scaled->getWidth(), scaled->getHeight());
// </FS:Chanayane>
std::string res_name = outfit_snapshot ? name : "Snapshot : " + pos_string;
std::string res_desc = outfit_snapshot ? "" : "Taken by " + who_took_it + " at " + pos_string;
LLFolderType::EType folder_type = outfit_snapshot ? LLFolderType::FT_NONE : LLFolderType::FT_SNAPSHOT_CATEGORY;

View File

@ -1269,11 +1269,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)
// <FS> 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();
}
// </FS>
show_debug_menus();
@ -3976,11 +3978,13 @@ void reset_login()
}
// Hide any other stuff
LLNotificationsUI::LLScreenChannelBase* chat_channel = LLNotificationsUI::LLChannelManager::getInstance()->findChannelByID(LLNotificationsUI::NOTIFICATION_CHANNEL_UUID);
if(chat_channel)
// <FS> 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();
}
// </FS>
LLFloaterReg::hideVisibleInstances();
LLStartUp::setStartupState( STATE_BROWSER_INIT );

View File

@ -1814,6 +1814,7 @@ LLTextureCtrl::LLTextureCtrl(const LLTextureCtrl::Params& p)
mFallbackImage(p.fallback_image),
mTextEnabledColor(p.text_enabled_color), // <FS:Zi> Add label/caption colors
mTextDisabledColor(p.text_disabled_color), // <FS:Zi> Add label/caption colors
mLabel(p.label), // <FS:Zi> FIRE-34300 - Fix label not showing in texture picker floater title
// <FS:Ansariel> Mask texture if desired
mIsMasked(FALSE)
{

View File

@ -97,7 +97,19 @@ LLViewerCamera::LLViewerCamera() : LLCamera()
mZoomSubregion = 1;
mAverageSpeed = 0.f;
mAverageAngularSpeed = 0.f;
gSavedSettings.getControl("CameraAngle")->getCommitSignal()->connect(boost::bind(&LLViewerCamera::updateCameraAngle, this, _2));
// <FS:Zi> add a way to disconnect/reconnect the "CameraAngle" changed signal
// mCameraAngleChangedSignal = gSavedSettings.getControl("CameraAngle")->getCommitSignal()->connect(boost::bind(&LLViewerCamera::updateCameraAngle, this, _2));
connectCameraAngleSignal();
// </FS:Zi>
}
LLViewerCamera::~LLViewerCamera()
{
// <FS:Zi> add a way to disconnect/reconnect the "CameraAngle" changed signal
// mCameraAngleChangedSignal.disconnect();
disconnectCameraAngleSignal();
// </FS:Zi>
}
void LLViewerCamera::updateCameraLocation(const LLVector3 &center, const LLVector3 &up_direction, const LLVector3 &point_of_interest)
@ -909,10 +921,24 @@ BOOL LLViewerCamera::isDefaultFOVChanged()
return FALSE;
}
// static
void LLViewerCamera::updateCameraAngle( void* user_data, const LLSD& value)
void LLViewerCamera::updateCameraAngle(const LLSD& value)
{
LLViewerCamera* self=(LLViewerCamera*)user_data;
self->setDefaultFOV(value.asReal());
setDefaultFOV(value.asReal());
}
// <FS:Zi> add a way to disconnect/reconnect the "CameraAngle" changed signal
void LLViewerCamera::connectCameraAngleSignal()
{
if (mCameraAngleChangedSignal.connected())
{
mCameraAngleChangedSignal.disconnect();
}
mCameraAngleChangedSignal = gSavedSettings.getControl("CameraAngle")->getCommitSignal()->connect(boost::bind(&LLViewerCamera::updateCameraAngle, this, _2));
}
void LLViewerCamera::disconnectCameraAngleSignal()
{
mCameraAngleChangedSignal.disconnect();
}
// </FS:Zi>

View File

@ -43,6 +43,7 @@ class alignas(16) LLViewerCamera : public LLCamera, public LLSimpleton<LLViewerC
LL_ALIGN_NEW
public:
LLViewerCamera();
~LLViewerCamera();
typedef enum
{
@ -64,8 +65,8 @@ public:
const LLVector3 &up_direction,
const LLVector3 &point_of_interest);
static void updateFrustumPlanes(LLCamera& camera, BOOL ortho = FALSE, BOOL zflip = FALSE, BOOL no_hacks = FALSE);
static void updateCameraAngle(void* user_data, const LLSD& value);
static void updateFrustumPlanes(LLCamera& camera, BOOL ortho = false, BOOL zflip = false, BOOL no_hacks = false);
void updateCameraAngle(const LLSD& value);
void setPerspective(BOOL for_selection, S32 x, S32 y_from_bot, S32 width, S32 height, BOOL limit_select_distance, F32 z_near = 0, F32 z_far = 0);
const LLMatrix4 &getProjection() const;
@ -125,7 +126,15 @@ protected:
F32 mZoomFactor;
S16 mZoomSubregion;
boost::signals2::connection mCameraAngleChangedSignal;
public:
// <FS:Zi> Enable external classes to disconnect and connect the "CameraAngle" settings
// changed signal, so classes can copy and overwrite the camera class and restore
// the signal handler
void connectCameraAngleSignal();
void disconnectCameraAngleSignal();
// </FS:Zi>
};

View File

@ -381,11 +381,6 @@ static void update_tp_display(bool minimized)
gViewerWindow->setProgressPercent(75.f);
}
if (!gSavedSettings.getBOOL("FSDisableTeleportScreens"))
{
gAgentCamera.resetView(TRUE, TRUE);
}
// <FS:Ansariel> 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();

View File

@ -3519,6 +3519,10 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
capabilityNames.append("ViewerMetrics");
capabilityNames.append("ViewerStartAuction");
capabilityNames.append("ViewerStats");
// <FS:Beq> [FIRE-34104] Add special opensim Capability for signalling PBR Terrain support
constexpr char OpenSimPBRTerrain[]{"VETPBR"};
capabilityNames.append(OpenSimPBRTerrain);
// </FS:Beq>
// Please add new capabilities alphabetically to reduce
// merge conflicts.

View File

@ -112,11 +112,7 @@ LLViewerTexture::EDebugTexels LLViewerTexture::sDebugTexelsMode = LLViewerTextur
const F64 log_2 = log(2.0);
#if ADDRESS_SIZE == 32
/*const*/ U32 DESIRED_NORMAL_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT / 2; // <FS:Ansariel> Max texture resolution
#else
/*const*/ U32 DESIRED_NORMAL_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT; // <FS:Ansariel> Max texture resolution
#endif
LLUUID LLViewerTexture::sInvisiprimTexture1 = LLUUID::null;
LLUUID LLViewerTexture::sInvisiprimTexture2 = LLUUID::null;
@ -548,6 +544,29 @@ void LLViewerTexture::getGPUMemoryForTextures(S32Megabytes &gpu, S32Megabytes &p
}
}
// <FS:Ansariel> Restrict texture memory by available physical system memory
static bool isSystemMemoryForTextureLow()
{
static LLFrameTimer timer;
static S32Megabytes physical_res = S32Megabytes(S32_MAX);
static LLCachedControl<S32> 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;
}
// </FS:Ansariel>
//static
void LLViewerTexture::updateClass()
{
@ -577,12 +596,35 @@ void LLViewerTexture::updateClass()
F32 target = llmax(budget - 512.f, 768.f);
F32 over_pct = llmax((used-target) / target, 0.f);
sDesiredDiscardBias = llmax(sDesiredDiscardBias, 1.f + over_pct);
// <FS:Ansariel> 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
LL_DEBUGS("TextureMemory") << "System memory is low, use more aggressive discard bias." << LL_ENDL;
if (sEvaluationTimer.getElapsedTimeF32() > GPU_MEMORY_CHECK_WAIT_TIME)
{
sDesiredDiscardBias += llmax(.1f, over_pct); // add at least 10% over-percentage
sEvaluationTimer.reset();
}
}
else
{
LL_DEBUGS("TextureMemory") << "System memory is plentiful, act normally." << LL_ENDL;
sDesiredDiscardBias = llmax(sDesiredDiscardBias, 1.f + over_pct);
if (sDesiredDiscardBias > 1.f)
{
sDesiredDiscardBias -= gFrameIntervalSeconds * 0.01;
}
}
// </FS:Ansariel>
LLViewerTexture::sFreezeImageUpdates = false; // sDesiredDiscardBias > (desired_discard_bias_max - 1.0f);
}

View File

@ -915,6 +915,12 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
if (face && face->getViewerObject() && face->getTextureEntry())
{
// <FS:Beq> 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<F32> bias_unimportant_threshold(gSavedSettings, "TextureBiasUnimportantFactor", 0.25f);
// </FS:Beq>
F32 vsize = face->getPixelArea();
// scale desired texture resolution higher or lower depending on texture scale
@ -923,18 +929,20 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
min_scale = llmax(min_scale*min_scale, 0.1f);
vsize /= min_scale;
// <FS:Beq> Fix Blurry texture on Mac
// <FS:Beq> Fix Blurry textures and use importance weight
// #if LL_DARWIN
// vsize /= 1.f + LLViewerTexture::sDesiredDiscardBias*(1.f+face->getDrawable()->mDistanceWRTCamera*bias_distance_scale);
// #else
// </FS:Beq>
vsize /= LLViewerTexture::sDesiredDiscardBias;
vsize /= llmax(1.f, (LLViewerTexture::sDesiredDiscardBias-1.f) * (1.f + face->getDrawable()->mDistanceWRTCamera * bias_distance_scale));
// 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())
// </FS:Beq>
if (!in_frustum || !face->getDrawable()->isVisible() || face->getImportanceToCamera() < bias_unimportant_threshold)
{ // further reduce by discard bias when off screen or occluded
vsize /= LLViewerTexture::sDesiredDiscardBias;
}

View File

@ -2093,15 +2093,30 @@ LLViewerWindow::LLViewerWindow(const Params& p)
gSavedSettings.setU32("RenderQualityPerformance", 0);
}
// <FS:Ansariel> Max texture resolution
#if ADDRESS_SIZE == 64
// <FS:Ansariel> Max texture resolution / Zi: changed this to accept pixel values so we are independent from maximum texture size
if (gSavedSettings.getBOOL("FSRestrictMaxTextureSize"))
{
DESIRED_NORMAL_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT / 2;
// fallback value if no matching pixel size is found (i.e. someone fiddled with the debugs)
DESIRED_NORMAL_TEXTURE_SIZE = 512;
// clamp pixels between 512 and half the current maximum texture size
U32 pixels = llclamp(gSavedSettings.getU32("FSRestrictMaxTexturePixels"), 512, (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT / 2);
// check pixel value against powers of 2 up to (not including) current maximum texture size
U32 pow_of_2 = 512;
while(pow_of_2 < (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT)
{
// power of 2 matches, save it
if (pixels == pow_of_2)
{
DESIRED_NORMAL_TEXTURE_SIZE = pixels;
break;
}
// next power of 2
pow_of_2 <<= 1;
}
}
#else
gSavedSettings.setBOOL("FSRestrictMaxTextureSize", TRUE);
#endif
LL_INFOS() << "Maximum fetched texture size: " << DESIRED_NORMAL_TEXTURE_SIZE << "px" << LL_ENDL;
// </FS:Ansariel>
@ -6534,6 +6549,8 @@ BOOL LLViewerWindow::cubeSnapshot(const LLVector3& origin, LLCubeMapArray* cubea
glh::matrix4f saved_proj = get_current_projection();
glh::matrix4f saved_mod = get_current_modelview();
camera->disconnectCameraAngleSignal(); // <FS:Zi> disconnect the "CameraAngle" changed signal
// camera constants for the square, cube map capture image
camera->setAspect(1.0); // must set aspect ratio first to avoid undesirable clamping of vertical FoV
camera->setViewNoBroadcast(F_PI_BY_TWO);
@ -6668,6 +6685,8 @@ BOOL LLViewerWindow::cubeSnapshot(const LLVector3& origin, LLCubeMapArray* cubea
setup3DViewport();
LLPipeline::sUseOcclusion = old_occlusion;
camera->connectCameraAngleSignal(); // <FS:Zi> reconnect the "CameraAngle" changed signal so mouselook zoom keeps working
// ====================================================
return true;
}

View File

@ -4913,8 +4913,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;
// <FS:Beq> 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<F32> AVATAR_PELVIS_ROTATE_THRESHOLD_SLOW(gSavedSettings, "AvatarRotateThresholdSlow", 60.0);
static LLCachedControl<F32> AVATAR_PELVIS_ROTATE_THRESHOLD_FAST(gSavedSettings, "AvatarRotateThresholdFast", 2.0);
// </FS:Beq>
F32 pelvis_rot_threshold = clamp_rescale(speed, 0.1f, 1.0f, AVATAR_PELVIS_ROTATE_THRESHOLD_SLOW, AVATAR_PELVIS_ROTATE_THRESHOLD_FAST);

View File

@ -550,6 +550,16 @@ F32 LLVOCacheEntry::getSquaredPixelThreshold(bool is_front)
bool LLVOCacheEntry::isAnyVisible(const LLVector4a& camera_origin, const LLVector4a& local_camera_origin, F32 dist_threshold)
{
#if 0
// this is ill-conceived and should be removed pending QA
// In the name of saving memory, we evict objects that are still within view distance from memory
// This results in constant paging of objects in and out of memory, leading to poor performance
// and many unacceptable visual glitches when rotating the camera
// Honestly, the entire VOCache partition system needs to be removed since it doubles the overhead of
// the spatial partition system and is redundant to the object cache, but this is a start
// - davep 2024.06.07
if( gAgent.getFSAreaSearchActive() ) { return true; } // <FS:Beq/> FIRE-32688 Area Search improvements
LLOcclusionCullingGroup* group = (LLOcclusionCullingGroup*)getGroup();
if(!group)
@ -587,6 +597,9 @@ bool LLVOCacheEntry::isAnyVisible(const LLVector4a& camera_origin, const LLVecto
}
return vis;
#else
return true;
#endif
}
void LLVOCacheEntry::calcSceneContribution(const LLVector4a& camera_origin, bool needs_update, U32 last_update, F32 max_dist)

View File

@ -4674,6 +4674,7 @@ void LLVOVolume::updateReflectionProbePtr()
if (getReflectionProbeIsMirror())
{
gPipeline.mHeroProbeManager.unregisterViewerObject(this);
mIsHeroProbe = false; // <FS:Beq> LL-1719/1721 Mirrors do not disable properly (interim fix)
}
}
}

View File

@ -219,7 +219,9 @@ S32 LLPipeline::RenderHeroProbeUpdateRate;
S32 LLPipeline::RenderHeroProbeConservativeUpdateMultiplier;
LLTrace::EventStatHandle<S64> LLPipeline::sStatBatchSize("renderbatchsize");
const U32 LLPipeline::MAX_BAKE_WIDTH = 512;
// <FS:Ansariel> 1024px previews
//const U32 LLPipeline::MAX_BAKE_WIDTH = 512;
const U32 LLPipeline::MAX_BAKE_WIDTH = 1024;
const F32 BACKLIGHT_DAY_MAGNITUDE_OBJECT = 0.1f;
const F32 BACKLIGHT_NIGHT_MAGNITUDE_OBJECT = 0.08f;
@ -860,6 +862,12 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
allocateScreenBuffer(res, res, samples);
}
// <FS:Ansariel> Auxillary render target pack for 1024px LLDynamicTexture
mRT = &mDynamicTextureRT;
res = MAX_BAKE_WIDTH;
allocateScreenBuffer(res, res, samples);
// </FS:Ansariel>
mRT = &mMainRT;
gCubeSnapshot = FALSE;
}
@ -1257,6 +1265,14 @@ void LLPipeline::releaseScreenBuffers()
mHeroProbeRT.fxaaBuffer.release();
mHeroProbeRT.deferredScreen.release();
mHeroProbeRT.deferredLight.release();
// <FS:Ansariel> Auxillary render target pack for 1024px LLDynamicTexture
mDynamicTextureRT.uiScreen.release();
mDynamicTextureRT.screen.release();
mDynamicTextureRT.fxaaBuffer.release();
mDynamicTextureRT.deferredScreen.release();
mDynamicTextureRT.deferredLight.release();
// </FS:Ansariel>
}
void LLPipeline::releaseSunShadowTarget(U32 index)

View File

@ -719,6 +719,9 @@ public:
// Auxillary render target pack scaled to the hero probe's per-face size.
RenderTargetPack mHeroProbeRT;
// <FS:Ansariel> Auxillary render target pack for 1024px LLDynamicTexture
RenderTargetPack mDynamicTextureRT;
// currently used render target pack
RenderTargetPack* mRT;

View File

@ -575,42 +575,24 @@ void RlvGiveToRLVOffer::moveAndRename(const LLUUID& idFolder, const LLUUID& idDe
const LLViewerInventoryCategory* pFolder = gInventory.getCategory(idFolder);
if ( (idDestination.notNull()) && (pFolder) )
{
bool needsRename = (pFolder->getName() != strName);
gInventory.changeCategoryParent(gInventory.getCategory(idFolder), idDestination, false);
gInventory.addChangedMask(LLInventoryObserver::STRUCTURE, idFolder);
gInventory.notifyObservers();
gInventory.fetchDescendentsOf(idDestination);
LLPointer<LLInventoryCallback> cbMove;
if (idDestination != pFolder->getParentUUID())
// rename and restart this function if the folder doesn't have the correct name.
// This will also trigger another move above, but that should have no ill effects
// and might even help when the folder didn't move correctly the first time. -Zi
if (pFolder->getName() != strName)
{
// We have to move *after* the rename operation completes or AIS will drop it
if (!needsRename)
{
LLInventoryModel::update_list_t update;
LLInventoryModel::LLCategoryUpdate updOldParent(pFolder->getParentUUID(), -1);
update.push_back(updOldParent);
LLInventoryModel::LLCategoryUpdate updNewParent(idDestination, 1);
update.push_back(updNewParent);
gInventory.accountForUpdate(update);
LLPointer<LLViewerInventoryCategory> pNewFolder = new LLViewerInventoryCategory(pFolder);
pNewFolder->setParent(idDestination);
pNewFolder->updateParentOnServer(FALSE);
gInventory.updateCategory(pNewFolder);
gInventory.notifyObservers();
if (cbFinal)
{
cbFinal.get()->fire(idFolder);
}
}
else
{
cbMove = new LLBoostFuncInventoryCallback(boost::bind(RlvGiveToRLVOffer::moveAndRename, _1, idDestination, strName, cbFinal));
}
LLPointer<LLInventoryCallback> cb = new LLBoostFuncInventoryCallback(boost::bind(RlvGiveToRLVOffer::moveAndRename, _1, idDestination, strName, cbFinal));
rename_category(&gInventory, idFolder, strName, cb);
return;
}
if (needsRename)
if (cbFinal)
{
rename_category(&gInventory, idFolder, strName, (cbMove) ? cbMove : cbFinal);
cbFinal.get()->fire(idFolder);
}
}
else if (cbFinal)

View File

@ -1,15 +0,0 @@
<llsd>
<map>
<key>FSShowChatType</key>
<map>
<key>Comment</key>
<string>Shows/Hides the chat type selector (Whisper, Say, Shout)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
</map>
</llsd>

View File

@ -19,6 +19,8 @@
<panel name="controls">
<panel name="zoom">
<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus kreisen"/>
<button name="roll_left" tool_tip="Kamera nach links rollen" />
<button name="roll_right" tool_tip="Kamera nach rechts rollen" />
<slider_bar name="zoom_slider" tool_tip="Kamera auf Fokus zoomen"/>
<joystick_track name="cam_track_stick" tool_tip="Kamera nach oben, unten, links und rechts bewegen"/>
</panel>

View File

@ -71,6 +71,36 @@
tool_tip="Orbit camera around focus"
top="25"
width="78" />
<!-- <FS:Chanayane> Camera roll (from Alchemy) -->
<button
follows="bottom|left"
width="16"
height="16"
image_selected="VirtualTrackball_Rotate_Left_Active"
image_unselected="VirtualTrackball_Rotate_Left"
layout="topleft"
top="89"
left="2"
name="roll_left"
tool_tip="Roll camera Left">
<commit_callback function="Camera.roll_left" />
<mouse_held_callback function="Camera.roll_left" />
</button>
<button
follows="top|left"
width="16"
height="16"
image_selected="VirtualTrackball_Rotate_Right_Active"
image_unselected="VirtualTrackball_Rotate_Right"
layout="topleft"
top="89"
left="64"
name="roll_right"
tool_tip="Roll camera Right">
<commit_callback function="Camera.roll_right" />
<mouse_held_callback function="Camera.roll_right" />
</button>
<!-- </FS:Chanayane> -->
<button
follows="top|left"
height="18"

View File

@ -18,6 +18,8 @@
<panel name="controls">
<panel name="zoom">
<joystick_rotate name="cam_rotate_stick" tool_tip="Obróć kamerę wokół punktu skupienia"/>
<button name="roll_left" tool_tip="Przechyl kamerę w lewo" />
<button name="roll_right" tool_tip="Przechyl kamerę w prawo" />
<slider_bar name="zoom_slider" tool_tip="Przybliż kamerę do punktu skupienia"/>
<joystick_track name="cam_track_stick" tool_tip="Poruszaj kamerą w górę, w dół, w lewo i w prawo"/>
</panel>

View File

@ -58,6 +58,8 @@ OS versiyası: [OS_VERSION]
Grafik kartının istehsalçısı: [GRAPHICS_CARD_VENDOR]
Grafik kartı: [GRAPHICS_CARD]
Grafik kartının yaddaşı: [GRAPHICS_CARD_MEMORY] MB
Grafik kartının yaddaşı (Detected): [GRAPHICS_CARD_MEMORY_DETECTED] MB
Grafik kartının yaddaşı (Budget): [VRAM_BUDGET]
</string>
<string name="AboutDriver">
Windows grafik sürücüsü versiyası: [GRAPHICS_DRIVER_VERSION]
@ -76,13 +78,6 @@ UI məstabı: [UI_SCALE_FACTOR]
Bandwidth: [BANDWIDTH]
Detallaşdırma səviyyəsi: [LOD]
Grafika keyfiyyəti: [RENDERQUALITY]
Yüksəldilmiş işıqlandırma modeli: [ALMSTATUS]
</string>
<string name="AboutTextureMemory">
Tekstur yaddaşı: [TEXTUREMEMORY] MB ([TEXTUREMEMORYMULTIPLIER])
</string>
<string name="AboutTextureMemoryDynamic">
Tekstur yaddaşı: dinamik ([TEXTUREMEMORYMIN] MB min. / [TEXTUREMEMORYCACHERESERVE]% Cache / [TEXTUREMEMORYGPURESERVE]% VRAM)
</string>
<string name="AboutCache">
Disk keşi: [DISK_CACHE_INFO]

View File

@ -19,6 +19,8 @@
<layout_stack name="camera_view_layout_stack">
<layout_panel name="camera_rotate_layout_panel">
<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus kreisen"/>
<button name="roll_left" tool_tip="Kamera nach links rollen" />
<button name="roll_right" tool_tip="Kamera nach rechts rollen" />
</layout_panel>
<layout_panel name="camera_zoom_layout_panel">
<slider_bar name="zoom_slider" tool_tip="Kamera auf Fokus zoomen"/>

View File

@ -17,6 +17,8 @@
<layout_stack name="camera_view_layout_stack">
<layout_panel name="camera_rotate_layout_panel">
<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus kreisen"/>
<button name="roll_left" tool_tip="Kamera nach links rollen" />
<button name="roll_right" tool_tip="Kamera nach rechts rollen" />
</layout_panel>
<layout_panel name="camera_zoom_layout_panel">
<slider_bar name="zoom_slider" tool_tip="Kamera auf Fokus zoomen"/>

View File

@ -94,8 +94,9 @@
<check_box label="Beide Seiten dehnen" name="checkbox uniform"/>
<check_box label="Texturen dehnen" name="checkbox stretch textures"/>
<check_box label="Einrasten" name="checkbox snap to grid"/>
<check_box label="Achse an Wurzel edit." name="checkbox actual root"/>
<check_box label="Achse an Wurzel edit." name="checkbox actual root"/>
<check_box label="Aktiviere Hervorhebung" name="checkbox show highlight"/>
<check_box label="Reflexionstests ausw." name="checkbox select probes"/>
<combo_box name="combobox grid mode" tool_tip="Wählen Sie das gewünschte Rasterlineal zum Positionieren des Objekts aus." left_pad="20">
<combo_box.item label="Welt" name="World"/>
<combo_box.item label="Lokal" name="Local"/>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel name="Texture">
<panel name="Texture" label="Textur">
<panel.string name="paste_error_face_selection_mismatch">
Falls mehrere Flächen kopiert werden, müssen auf dem Zielobjekt dieselbe Anzahl an Flächen selektiert sein.
</panel.string>

View File

@ -163,7 +163,17 @@
</text>
<check_box label="Minimale Texturen laden" tool_tip="Diese Einstellung setzt den 'TextureDisable'-Parameter - lädt Texturen extrem langsam, eventuell nützlich für Computer mit langsamer GPU" name="TexturesLoaded"/>
<check_box label="HTTP für Laden von Texturen verwenden" tool_tip="Aktiviert das Laden von Texturen über das HTTP-Protokoll - deaktivieren wenn es Probleme mit schlecht oder nicht korrekt ladenden Texturen gibt und das veraltete UDP-Protokoll verwendet werden soll." name="TexturesHTTP"/>
<check_box label="Maximale Auflösung für Texturen auf 512px beschränken (nur 64bit; erfordert Neustart)" tool_tip="Beschränkt die maximale Auflösung für Inworld-Texturen auf 512px. Dies erlaubt die Darstellung von mehreren Texturen bevor der vorhandene Texturspeicher aufgebraucht ist und unscharfe Texturen dargestellt werden." name="FSRestrictMaxTextureSize"/>
<check_box label="Maximale Auflösung für Texturen:" tool_tip="Beschränkt die maximale Auflösung für Inworld-Texturen. Dies erlaubt die Darstellung von mehreren Texturen bevor der vorhandene Texturspeicher aufgebraucht ist und unscharfe Texturen dargestellt werden." name="FSRestrictMaxTextureSize"/>
<combo_box name="FSRestrictMaxTexturePixels">
<combo_box.item label="512 Pixel" name="512"/>
<combo_box.item label="1024 Pixel" name="1024"/>
<!-- 2048 is the current maximum, so this only becomes important if we get 4096 pixel textures
<combo_box.item label="2048 Pixel" name="2048"/>
-->
</combo_box>
<text name="FSRestrictMaxTextureSizeRestartText">
(erfordert Neustart)
</text>
<slider label="Max. Anzahl gleichzeitiger HTTP-GET-Anfragen" name="HTTPFetchMaxRequests"/>
<text name="TextureDetailLabel" width="215" tool_tip="Qualitätslevel, auf das Texturen geladen werden. Beeinflusst die Einstellung TextureDiscardLevel">
Maximales Qualitätslevel für Texturen:

View File

@ -58,6 +58,8 @@ Betriebssystemversion: [OS_VERSION]
Grafikkartenhersteller: [GRAPHICS_CARD_VENDOR]
Grafikkarte: [GRAPHICS_CARD]
Grafikkartenspeicher: [GRAPHICS_CARD_MEMORY] MB
Grafikkartenspeicher (Erkannt): [GRAPHICS_CARD_MEMORY_DETECTED] MB
Grafikkartenspeicher (Budget): [VRAM_BUDGET]
</string>
<string name="AboutDriver">
Windows-Grafiktreiberversion: [GRAPHICS_DRIVER_VERSION]
@ -76,7 +78,6 @@ Draw Distance: [DRAW_DISTANCE] m
Bandbreite: [BANDWIDTH] kbit/s
LOD-Faktor: [LOD]
Darstellungsqualität: [RENDERQUALITY]
Erweitertes Beleuchtungsmodell: [ALMSTATUS]
</string>
<string name="AboutCache">
Disk-Cache: [DISK_CACHE_INFO]
@ -7273,4 +7274,7 @@ Ihre aktuelle Position: [AVATAR_POS]
<string name="OpenSimInventoryValidationErrorGenericHelp">
das Support-Team Ihres Grid-Betreibers
</string>
<string name="Unlimited">
Unlimitiert
</string>
</strings>

View File

@ -155,6 +155,36 @@
tool_tip="Orbit camera around focus"
held_down_delay.seconds="0.0"
top="0" />
<!-- <FS:Chanayane> Camera roll (from Alchemy) -->
<button
follows="bottom|left"
width="12"
height="12"
image_selected="VirtualTrackball_Rotate_Left_Active"
image_unselected="VirtualTrackball_Rotate_Left"
layout="topleft"
top_delta="68"
left_delta="0"
name="roll_left"
tool_tip="Roll camera Left">
<commit_callback function="Camera.roll_left" />
<mouse_held_callback function="Camera.roll_left" />
</button>
<button
follows="bottom|right"
width="12"
height="12"
image_selected="VirtualTrackball_Rotate_Right_Active"
image_unselected="VirtualTrackball_Rotate_Right"
layout="topleft"
top_delta="0"
left_delta="68"
name="roll_right"
tool_tip="Roll camera Right">
<commit_callback function="Camera.roll_right" />
<mouse_held_callback function="Camera.roll_right" />
</button>
<!-- </FS:Chanayane> -->
</layout_panel>
<layout_panel

View File

@ -96,6 +96,36 @@ free_mode_title
tool_tip="Orbit camera around focus"
held_down_delay.seconds="0.0"
top="0" />
<!-- <FS:Chanayane> Camera roll (from Alchemy) -->
<button
follows="bottom|left"
width="12"
height="12"
image_selected="VirtualTrackball_Rotate_Left_Active"
image_unselected="VirtualTrackball_Rotate_Left"
layout="topleft"
top_delta="68"
left_delta="0"
name="roll_left"
tool_tip="Roll camera Left">
<commit_callback function="Camera.roll_left" />
<mouse_held_callback function="Camera.roll_left" />
</button>
<button
follows="bottom|right"
width="12"
height="12"
image_selected="VirtualTrackball_Rotate_Right_Active"
image_unselected="VirtualTrackball_Rotate_Right"
layout="topleft"
top_delta="0"
left_delta="68"
name="roll_right"
tool_tip="Roll camera Right">
<commit_callback function="Camera.roll_right" />
<mouse_held_callback function="Camera.roll_right" />
</button>
<!-- </FS:Chanayane> -->
</layout_panel>
<layout_panel

View File

@ -355,18 +355,18 @@
</combo_box>
<check_box
control_name="ScaleUniform"
height="19"
height="17"
label="Stretch Both Sides"
layout="topleft"
left="143"
name="checkbox uniform"
top="48"
top="52"
label_text.wrap="true"
label_text.width="120"
width="134" />
<check_box
control_name="ScaleStretchTextures"
height="19"
height="17"
initial_value="true"
label="Stretch Textures"
layout="topleft"
@ -377,7 +377,7 @@
width="134" />
<check_box
control_name="SnapEnabled"
height="18"
height="17"
initial_value="true"
label="Snap"
layout="topleft"
@ -386,7 +386,7 @@
width="134" />
<check_box
control_name="FSBuildPrefs_ActualRoot"
height="18"
height="17"
initial_value="false"
label="Edit axis at root"
layout="topleft"
@ -394,7 +394,7 @@
name="checkbox actual root"
width="134" />
<check_box
height="18"
height="17"
initial_value="true"
label="Show Highlight"
layout="topleft"
@ -404,6 +404,15 @@
<check_box.commit_callback
function="BuildTool.commitShowHighlight"/>
</check_box>
<check_box
control_name="SelectReflectionProbes"
height="17"
initial_value="false"
label="Select Reflection Probes"
layout="topleft"
top_pad="-2"
name="checkbox select probes"
width="134" />
<button
left_pad="0"
image_selected="ForwardArrow_Press"
@ -412,7 +421,7 @@
follows="top|left"
name="Options..."
tool_tip="See more grid options"
top="80"
top="78"
right="-10"
width="18"
height="23" >
@ -3273,14 +3282,14 @@ Low ↔ Lwst
top_pad="8"
width="132" />
</panel>
<!-- <FS:Zi> switchable edit texture/materials panel
<panel
label="Texture"
help_topic="toolbox_texture_tab"
name="Texture">
<!-- <FS:Zi> switchable edit texture/materials panel
filename="panel_tools_texture.xml">
-->
</panel>
-->
<panel
border="false"
follows="all"

View File

@ -38,7 +38,7 @@ Please add these to your AV folder exclusions as shown on the above wiki page.
parse_urls="true"
follows="top|left|right|bottom"
font="SansSerif"
height="100"
height="70"
bg_readonly_color="Transparent"
left="5"
max_length="65536"
@ -63,7 +63,7 @@ Add these to you AV executable exclusions as shown in the above wiki.
parse_urls="true"
follows="top|left|right|bottom"
font="SansSerif"
height="130"
height="160"
bg_readonly_color="Transparent"
left="5"
max_length="65536"

View File

@ -111,7 +111,6 @@
name="base_color_tint_picker"
label="Tint"
can_apply_immediately="true"
allow_no_texture="true"
tool_tip="Click to choose the base color tint"
/>
@ -350,7 +349,7 @@
<panel
follows="left|top"
layout="topleft"
left="0"
left="4"
top="0"
mouse_opaque="false"
name="pbr_transforms_all_scale"
@ -472,7 +471,7 @@
<panel
follows="left|top"
layout="topleft"
left="98"
left="100"
top="0"
width="90"
height="70"
@ -610,7 +609,7 @@
<panel
follows="left|top"
layout="topleft"
left="0"
left="4"
top="0"
mouse_opaque="false"
name="pbr_transforms_base_color_scale"
@ -732,7 +731,7 @@
<panel
follows="left|top"
layout="topleft"
left="98"
left="100"
top="0"
width="90"
height="70"
@ -869,7 +868,7 @@
<panel
follows="left|top"
layout="topleft"
left="0"
left="4"
top="0"
mouse_opaque="false"
name="pbr_transforms_normal_scale"
@ -991,7 +990,7 @@
<panel
follows="left|top"
layout="topleft"
left="98"
left="100"
top="0"
width="90"
height="70"
@ -1128,7 +1127,7 @@
<panel
follows="left|top"
layout="topleft"
left="0"
left="4"
top="0"
mouse_opaque="false"
name="pbr_transforms_orm_scale"
@ -1250,7 +1249,7 @@
<panel
follows="left|top"
layout="topleft"
left="98"
left="100"
top="0"
width="90"
height="70"
@ -1387,7 +1386,7 @@
<panel
follows="left|top"
layout="topleft"
left="0"
left="4"
top="0"
mouse_opaque="false"
name="pbr_transforms_emissive_scale"
@ -1509,7 +1508,7 @@
<panel
follows="left|top"
layout="topleft"
left="98"
left="100"
top="0"
width="90"
height="70"
@ -2110,7 +2109,6 @@
max_val="255"
increment="1"
decimal_digits="0"
text_readonly_color="LabelDisabledColor"
enabled_control="FSInternalFaceHasBPSpecularMap"
/>
@ -2162,7 +2160,7 @@
<panel
follows="left|top"
layout="topleft"
left="0"
left="4"
top="0"
width="90"
height="70"
@ -2276,7 +2274,7 @@
<panel
follows="left|top"
layout="topleft"
left="98"
left="100"
top="0"
width="90"
height="70"
@ -2402,7 +2400,7 @@
<panel
follows="left|top"
layout="topleft"
left="0"
left="4"
top="0"
width="90"
height="70"
@ -2516,7 +2514,7 @@
<panel
follows="left|top"
layout="topleft"
left="98"
left="100"
top="0"
width="90"
height="70"
@ -2642,7 +2640,7 @@
<panel
follows="left|top"
layout="topleft"
left="0"
left="4"
top="0"
width="90"
height="70"
@ -2756,7 +2754,7 @@
<panel
follows="left|top"
layout="topleft"
left="98"
left="100"
top="0"
width="90"
height="70"
@ -2958,7 +2956,6 @@
top_pad="5"
right="-4"
height="2"
visibility_control="FSInternalCanEditObjectFaces"
/>
<panel

View File

@ -1053,7 +1053,7 @@ If you do not understand the distinction then leave this control alone."
label="Freeze updates to World (pause everything)"
tool_tip="Set this to freeze all updates from the server - stops all actions in-world but does not affect chat, IMs or voice"
layout="topleft"
left_delta="5"
left_delta="10"
name="WorldPause"
top_pad="6"
width="256"/>
@ -1074,25 +1074,63 @@ If you do not understand the distinction then leave this control alone."
<check_box
control_name="FSRestrictMaxTextureSize"
height="16"
label="Restrict maximum texture resolution to 512px (64bit only; requires Restart)"
tool_tip="Set this restrict the maximum display resolution for inworld textures to 512px. This allows displaying more textures before exceeding the available texture memory and observing blurry textures."
label="Restrict maximum texture resolution to:"
tool_tip="Set this restrict the maximum display resolution for inworld textures. This allows displaying more textures before exceeding the available texture memory and observing blurry textures."
layout="topleft"
left_delta="0"
left_delta="10"
name="FSRestrictMaxTextureSize"
top_pad="2"
width="400"/>
top_pad="4"
width="250"/>
<combo_box
control_name="FSRestrictMaxTexturePixels"
enabled_control="FSRestrictMaxTextureSize"
height="23"
layout="topleft"
left_pad="2"
name="FSRestrictMaxTexturePixels"
width="100">
<combo_box.item
label="512 pixels"
name="512"
value="512"/>
<combo_box.item
label="1024 pixels"
name="1024"
value="1024"/>
<!-- 2048 is the current maximum, so this only becomes important if we get 4096 pixel textures
<combo_box.item
label="2048 pixels"
name="2048"
value="2048"/>
-->
</combo_box>
<text
name="FSRestrictMaxTextureSizeRestartText"
type="string"
text_color="White_50"
length="1"
follows="left|top"
height="12"
layout="topleft"
left_pad="10"
top_delta="5"
width="150">
(requires restart)
</text>
<!-- New Texture detail 5 is lowest, 0 is highest -->
<text
type="string"
length="1"
top_pad="8"
top_pad="18"
follows="top|left"
height="18"
width="150"
word_wrap="true"
layout="topleft"
left_delta="0"
left="10"
name="TextureDetailLabel">
Max Texture Quality Level:
</text>

View File

@ -56,6 +56,8 @@ OS Version: [OS_VERSION]
Graphics Card Vendor: [GRAPHICS_CARD_VENDOR]
Graphics Card: [GRAPHICS_CARD]
Graphics Card Memory: [GRAPHICS_CARD_MEMORY] MB
Graphics Card Memory (Detected): [GRAPHICS_CARD_MEMORY_DETECTED] MB
Graphics Card Memory (Budget): [VRAM_BUDGET]
</string>
<string name="AboutDriver">Windows Graphics Driver Version: [GRAPHICS_DRIVER_VERSION]</string>
<string name="AboutOGL">OpenGL Version: [OPENGL_VERSION]</string>
@ -70,7 +72,6 @@ Draw distance: [DRAW_DISTANCE] m
Bandwidth: [BANDWIDTH] kbit/s
LOD factor: [LOD]
Render quality: [RENDERQUALITY]
Advanced Lighting Model: [ALMSTATUS]
</string>
<string name="AboutCache">
Disk cache: [DISK_CACHE_INFO]
@ -3299,4 +3300,5 @@ Your current position: [AVATAR_POS]
<string name="FSObjectInventoryOneElement">1 Element</string>
<string name="FSObjectInventoryElements">[NUM_ELEMENTS] Elements</string>
<string name="OpenSimInventoryValidationErrorGenericHelp">your Grid Operator's support team</string>
<string name="Unlimited">Unlimited</string>
</strings>

View File

@ -35,8 +35,6 @@ Distancia de dibujo (Draw distance): [DRAW_DISTANCE]
Ancho de banda (Bandwidth): [BANDWIDTH]
Factor de nivel de detalle (LOD factor): [LOD]
Calidad de dibujo (Render quality): [RENDERQUALITY]
Advanced Lighting Model: [ALMSTATUS]
Memoria de texturas (Texture memory): [TEXTUREMEMORY] MB ([TEXTUREMEMORYMULTIPLIER])
</floater.string>
<floater.string name="none">
(ninguno)

View File

@ -55,6 +55,8 @@ Versión del Sistema Operativo: [OS_VERSION]
Fabricante de la tarjeta gráfica: [GRAPHICS_CARD_VENDOR]
Tarjeta gráfica: [GRAPHICS_CARD]
Memoria de la tarjeta gráfica: [GRAPHICS_CARD_MEMORY] MB
Memoria de la tarjeta gráfica (Detected): [GRAPHICS_CARD_MEMORY_DETECTED] MB
Memoria de la tarjeta gráfica (Budget): [VRAM_BUDGET]
</string>
<string name="AboutDriver">
Versión de Windows Graphics Driver: [GRAPHICS_DRIVER_VERSION]

View File

@ -49,14 +49,11 @@
</text>
<combo_box label="Anti-aliasing" name="fsaa">
<combo_box.item label="Désactivé" name="FSAADisabled"/>
<combo_box.item label="2x" name="2x"/>
<combo_box.item label="FXAA" name="FXAA"/>
<combo_box.item label="4x" name="4x"/>
<combo_box.item label="8x" name="8x"/>
<combo_box.item label="16x" name="16x"/>
</combo_box>
<text name="antialiasing restart">
(redémarrage requis)
</text>
<text name="MeshText">
Maillage
</text>
@ -76,6 +73,9 @@
<text name="FlexibleMeshDetailText">
Faible
</text>
<text name="antialiasing restart">
(redémarrage requis)
</text>
<text name="ShadersText">
Effets
</text>
@ -113,6 +113,44 @@
<combo_box.item label="Soleil/Lune" name="1"/>
<combo_box.item label="Soleil/Lune + Projecteurs" name="2"/>
</combo_box>
<check_box label="Reflets de la zone de l'écran (SSR)" name="ScreenSpaceReflections"/>
<text name="ReflectionDetailText">
Détail des réflexions :
</text>
<combo_box name="ReflectionDetail">
<combo_box.item label="Statiques seulement" name="0"/>
<combo_box.item label="Statiques + dynamiques" name="1"/>
<combo_box.item label="Temps réel" name="2"/>
</combo_box>
<text name="ReflectionProbeText">
Couverture de réflexion :
</text>
<combo_box name="ReflectionLevel">
<combo_box.item label="Aucune" name="0"/>
<combo_box.item label="Manuelles slt" name="1"/>
<combo_box.item label="Manuelles + terrain" name="2"/>
<combo_box.item label="Scène complète" name="3"/>
</combo_box>
<slider label="Exposition :" name="RenderExposure"/>
<check_box label="Miroirs" name="Mirrors"/>
<text name="MirrorResolutionText">
Résolution des miroirs :
</text>
<combo_box name="MirrorResolution">
<combo_box.item label="256" name="0"/>
<combo_box.item label="512" name="1"/>
<combo_box.item label="1024" name="2"/>
<combo_box.item label="2048" name="3"/>
</combo_box>
<text name="HeroProbeUpdateText">
Rafraîchissement :
</text>
<combo_box name="HeroProbeUpdateRate">
<combo_box.item label="Toutes les images" name="0"/>
<combo_box.item label="Toutes les 2 images" name="1"/>
<combo_box.item label="Toutes les 3 images" name="2"/>
<combo_box.item label="Toutes les 4 images" name="3"/>
</combo_box>
<button label="Réinitialiser les paramètres recommandés" name="Defaults"/>
<button label="OK" label_selected="OK" name="OK"/>
<button label="Annuler" label_selected="Annuler" name="Cancel"/>

View File

@ -78,6 +78,7 @@
<check_box initial_value="true" label="Fixer" name="checkbox snap to grid"/>
<check_box label="Axe d'édition à la racine" name="checkbox actual root"/>
<check_box label="Afficher le surlignage" name="checkbox show highlight"/>
<check_box label="Sél. les sondes de réfl." name="checkbox select probes" />
<combo_box name="combobox grid mode" tool_tip="Choisir le type d&apos;axe de grille pour le positionnement de l&apos;objet.">
<combo_box.item label="Monde" name="World"/>
<combo_box.item label="Local" name="Local"/>
@ -464,6 +465,23 @@ Bas ↔ + bas
<spinner label="Point central" name="Light Focus"/>
<spinner label="Atténuation" name="Light Falloff"/>
<spinner label="Ambiance" name="Light Ambiance"/>
<check_box label="Sonde de réflexion" name="Reflection Probe" tool_tip="Règle la façon dont les objets de ce volume reçoivent des reflets lorsque la fonction PBR est activée."/>
<combo_box name="Probe Volume Type" tool_tip="Choisir le volume d'influence de la sonde">
<combo_box.item label="Sphère"/>
<combo_box.item label="Boîte" name="Box"/>
</combo_box>
<check_box label="Dynamique" name="Probe Dynamic" tool_tip="Lorsque cette option est activée, les avatars apparaissent dans les réflexions à l'intérieur du volume d'influence de cette sonde."/>
<text name="Probe Update Label">
Mise à jour
</text>
<combo_box name="Probe Update Type" tool_tip="Détermine le mode de mise à jour de la sonde. La mise à jour statique est la plus lente et ne comporte pas d'avatars. Les mises à jour dynamiques sont plus fréquentes et les avatars sont visibles dans les sondes. Miroir (Environnement) transforme cette sonde en une sonde planaire projetée en temps réel qui ne fait que refléter l'environnement, mais ne calcule pas l'ambiance. Miroir (Tout) est similaire à Miroir (Environnement), mais il reflète les particules et les avatars.">
<combo_box.item label="Statique" name="Static"/>
<combo_box.item label="Dynamique" name="Dynamic"/>
<combo_box.item label="Miroir (Environnement)" name="Mirror"/>
<combo_box.item label="Miroir (tout)" name="Dynamic Mirror"/>
</combo_box>
<spinner label="Ambiance" name="Probe Ambiance"/>
<spinner label="Couverture" name="Probe Near Clip"/>
<text name="label physicsshapetype">
Type de forme physique :
</text>
@ -483,7 +501,6 @@ Bas ↔ + bas
<spinner label="Densité en 100 kg/m^3" name="Physics Density"/>
<spinner label="Restitution" name="Physics Restitution"/>
</panel>
<panel label="Texture" name="Texture"/>
<panel label="Contenu" name="Contents">
<button label="Nouveau script" label_selected="Nouveau script" name="button new script"/>
<button label="Droits" name="button permissions"/>

View File

@ -219,15 +219,19 @@
<menu_item_check label="Sélectionner les objets déplaçables uniquement" name="Select Only Movable Objects"/>
<menu_item_check label="Ne sélectionner que les objets verrouillés" name="Select Only Locked Objects"/>
<menu_item_check label="Ne sélectionner que les objets copiables" name="Select Only Copyable Objects"/>
<menu_item_check label="Sélectionner les objets invisibles" name="Select Invisible Objects"/>
<menu_item_check label="Sélectionner les sondes de réflexion" name="Select Reflection Probes"/>
<menu_item_check label="Sélectionner en entourant" name="Select By Surrounding"/>
<menu_item_check label="Inclure les objets appartenant à un groupe" name="Include Group-Owned Objects"/>
<menu_item_check label="Afficher la forme physique lors d'une modification" name="Show Physics Shape"/>
<menu_item_check label="Afficher les contours de la sélection" name="Show Selection Outlines"/>
<menu_item_check label="Afficher la sélection masquée" name="Show Hidden Selection"/>
<menu_item_check label="Afficher le rayon lumineux pour la sélection" name="Show Light Radius for Selection"/>
<menu_item_check label="Afficher les volumes des sondes de réflexion" name="Show Reflection Probe Volumes"/>
<menu_item_check label="Afficher le faisceau de sélection lumineux" name="Show Selection Beam"/>
<menu_item_check label="Mettre la transparence en surbrillance" name="Highlight Transparent"/>
<menu_item_check label="- Inclure les transparents riggés" name="Include Transparent Rigged"/>
<menu_item_check label="Pas de post-traitement" name="No Post"/>
<menu_item_check label="Fixer sur la grille" name="Snap to Grid"/>
<menu_item_call label="Fixer les coordonnées XY de l&apos;objet sur la grille" name="Snap Object XY to Grid"/>
<menu_item_call label="Utiliser la sélection pour la grille" name="Use Selection for Grid"/>
@ -314,6 +318,11 @@
</menu>
<menu label="Types de rendu" name="Rendering Types">
<menu_item_check label="Simple" name="Rendering Type Simple"/>
<menu_item_check label="Matériaux" name="Rendering Type Materials"/>
<menu_item_check label="Masqua alpha" name="Rendering Type Alpha Mask"/>
<menu_item_check label="Masque alpha lumineux" name="Rendering Type Fullbright Alpha Mask"/>
<menu_item_check label="Lueur" name="Rendering Type Glow"/>
<menu_item_check label="Lumineux" name="Rendering Type Fullbright"/>
<menu_item_check label="Alpha" name="Rendering Type Alpha"/>
<menu_item_check label="Arbre" name="Rendering Type Tree"/>
<menu_item_check label="Avatars" name="Rendering Type Character"/>
@ -424,13 +433,16 @@
<menu_item_check label="Test cadre" name="Frame Test"/>
<menu_item_call label="Profil du cadre" name="Frame Profile"/>
<menu_item_call label="Référence" name="Benchmark"/>
<menu_item_call label="Aperçu HDRI" name="HDRI Preview"/>
<menu_item_call label="Aperçu de la scène GLTF" name="GLTF Scene Preview"/>
</menu>
<menu label="Métadonnées de rendu" name="Render Metadata">
<menu_item_check label="Cadres" name="Bounding Boxes"/>
<menu_item_check label="Boîtes de collision de l'avatar'" name="Avatar Hitboxes"/>
<menu_item_check label="Normales" name="Normals"/>
<menu_item_check label="Octree" name="Octree"/>
<menu_item_check label="Shadow Frusta" name="Shadow Frusta"/>
<menu_item_check label="Nœuds GLTF" name="GLTF Nodes"/>
<menu_item_check label="Occlusion améliorée (Shadow Frusta)" name="Shadow Frusta"/>
<menu_item_check label="Formes physiques" name="Physics Shapes"/>
<menu_item_check label="Occlusion" name="Occlusion"/>
<menu_item_check label="Lots de rendu" name="Render Batches"/>
@ -482,6 +494,9 @@
<menu_item_check label="Textures pleine résolution" name="Rull Res Textures"/>
<menu_item_check label="Rendu des lumières jointes" name="Render Attached Lights"/>
<menu_item_check label="Rendu des particules jointes" name="Render Attached Particles"/>
<menu_item_check label="Activer le cache des shaders" name="Enable Shader Cache"/>
<menu_item_call label="Vider le cache des shaders" name="Shader Cache Clear"/>
<menu_item_call label="Reconstruire le terrain" name="Rebuild Terrain"/>
<menu_item_check label="Objets en surbrillance avec le pointeur" name="Hover Glow Objects"/>
<menu_item_call label="Vider le cache immédiatement" name="Cache Clear"/>
</menu>

View File

@ -1649,7 +1649,23 @@ Veuillez ne sélectionner qu&apos;un seul objet.
Impossible de definir les textures de la région :
La texture du terrain [TEXTURE_NUM] a une profondeur invalide ([TEXTURE_BIT_DEPTH]).
Remplacer la texture [TEXTURE_NUM] avec une image de 24 bits, [MAX_SIZE]x[MAX_SIZE], ou plus petite, puis cliquez à nouveau sur Appliquer.
Remplacer la texture [TEXTURE_NUM] avec une image RVB, [MAX_SIZE]x[MAX_SIZE], ou plus petite, puis cliquez à nouveau sur Appliquer.
</notification>
<notification name="InvalidTerrainAlphaNotFullyLoaded">
Impossible de definir les textures de la région :
La texture de terrain [TEXTURE_NUM] n'est pas entièrement chargée, mais on suppose qu'elle contient de la transparence en raison d'une profondeur de bits de [TEXTURE_BIT_DEPTH]. La transparence n'est actuellement pas prise en charge pour les textures de terrain.
Si la texture [TEXTURE_NUM] est opaque, attendez qu'elle soit complètement chargée, puis cliquez à nouveau sur "Appliquer".
L'alpha n'est pris en charge que pour les matériaux de terrain (PBR Metallic Roughness), lorsque alphaMode="MASK" et doubleSided=false.
</notification>
<notification name="InvalidTerrainAlpha">
Impossible de definir les textures de la région :
La texture de terrain [TEXTURE_NUM] contient de la transparence. La transparence n'est pas prise en charge actuellement pour les textures de terrain.
Remplacez la texture [TEXTURE_NUM] par une image RVB opaque, puis cliquez à nouveau sur "Appliquer".
L'alpha n'est pris en charge que pour les matériaux de terrain (PBR Metallic Roughness), lorsque alphaMode="MASK" et doubleSided=false.
</notification>
<notification name="InvalidTerrainSize">
Impossible de definir les textures de la région :
@ -2913,6 +2929,18 @@ Cela risque d&apos;impacter votre mot de passe.
<notification name="UnableToLoadNotecard">
Impossible de lire les données de la note actuellement.
</notification>
<notification name="UnableToLoadMaterial">
Impossible de charger le matériel.
Veuillez réessayer.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="MissingMaterialCaps">
Non connecté à une région capable de gérer des matériaux.
</notification>
<notification name="CantSelectReflectionProbe">
Vous avez placé une sonde de réflexion, mais l'option "Sélectionner les sondes de réflexion" est désactivée. Pour pouvoir sélectionner les sondes de réflexion, cochez Construire &gt; Options &gt; Sélectionner les sondes de réflexion.
<usetemplate ignoretext="Warn if Reflection Probes selection is disabled." name="okignore" yestext="OK"/>
</notification>
<notification name="ScriptMissing">
Script absent de la base de données.
</notification>
@ -3874,6 +3902,30 @@ Texture figée de [RESOLUTION] mise à jour localement pour [BODYREGION] au bout
Chargement de la texture impossible: &apos;[NAME]&apos;
[REASON]
</notification>
<notification name="CannotLoad">
Impossible de charger [WHAT].
[REASON]
</notification>
<notification name="CannotUploadMaterial">
Il y a eu un problème pour transférer le fichier
</notification>
<notification label="Save Material" name="SaveMaterialAs">
Nommez ce matériel :
<form name="form">
<button name="OK" text="OK"/>
<button name="Cancel" text="Cancel"/>
</form>
</notification>
<notification name="InvalidMaterialName">
Veuillez saisir un nom non vide
</notification>
<notification name="UsavedMaterialChanges">
Vous avez des modifications non sauvegardées.
<form name="form">
<button name="discard" text="Abandonner les modifications"/>
<button name="keep" text="Poursuivre l'édition"/>
</form>
</notification>
<notification name="LivePreviewUnavailable">
Impossible d&apos;afficher un aperçu de cette texture car il s&apos;agit d&apos;une texture sans copie et/ou transfert.
<usetemplate ignoretext="M&apos;avertir que le mode Aperçu en direct n&apos;est pas disponible pour les textures sans copie et/ou transfert" name="okignore" yestext="OK"/>
@ -5497,6 +5549,10 @@ Voulez-vous continuer ?
Vous modifiez un ciel non HDR qui a été automatiquement converti en HDR. Pour supprimer le HDR et le mappage des tons, réglez l'Ambiance de la sonde de réflexion sur zéro.
<usetemplate ignoretext="Avertissement concernant l'ajustement du ciel HDR" name="okignore" yestext="OK"/>
</notification>
<notification name="GLTFPreviewSelection">
Vous devez sélectionner un objet qui servira de référence à la ressource GLTF que vous prévisualisez.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="EnableAutoFPSWarning">
Vous êtes sur le point d'activer l'AutoFPS. Tous les paramètres graphiques non sauvegardés seront perdus.

View File

@ -13,11 +13,11 @@
<text name="ShadersPrefText2">Moyen</text>
<text name="ShadersPrefText3">Élevé</text>
<text name="ShadersPrefText4">Ultra</text>
<check_box label="Mode plein écran" name="Fullscreen Mode" tool_tip="Exécuter Firestorm en mode plein écran. Un redémarrage est nécessaire pour changer de mode."/>
<text name="ShadersText">Shaders :</text>
<check_box label="Transparence de l'eau" name="TransparentWater"/>
<check_box label="Occlusion ambiante" name="UseSSAO"/>
<check_box label="Reflets affichés à l'écran (SSR)" name="ScreenSpaceReflections"/>
<check_box label="Miroirs" name="Mirrors"/>
<text name="shadows_label">Ombres :</text>
<combo_box name="ShadowDetail">
<combo_box.item label="Aucunes" name="0"/>
@ -49,6 +49,25 @@
<combo_box.item label="Réduites" name="2"/>
<combo_box.item label="Soleil / Lune uniquement" name="1"/>
</combo_box>
<text name="MirrorResolutionText">
Résolution du miroir :
</text>
<combo_box name="MirrorResolution">
<combo_box.item label="256" name="0"/>
<combo_box.item label="512" name="1"/>
<combo_box.item label="1024" name="2"/>
<combo_box.item label="2048" name="3"/>
</combo_box>
<text name="HeroProbeUpdateText">
Rythme de mise à jour du miroir :
</text>
<combo_box name="HeroProbeUpdateRate">
<combo_box.item label="Toutes les images" name="0"/>
<combo_box.item label="Toutes les 2 images" name="1"/>
<combo_box.item label="Toutes les 3 images" name="2"/>
<combo_box.item label="Toutes les 4 images" name="3"/>
</combo_box>
<check_box label="Mode plein écran" name="Fullscreen Mode" tool_tip="Exécuter Firestorm en mode plein écran. Un redémarrage est nécessaire pour changer de mode."/>
<slider label="Distance d'affichage" name="DrawDistance"/>
<text name="DrawDistanceMeterText2">m</text>
<slider label="Nombre max. de particules" name="MaxParticleCount"/>
@ -84,10 +103,7 @@
</text>
<combo_box label="Anticrénelage" name="fsaa">
<combo_box.item label="Désactivé" name="FSAADisabled"/>
<combo_box.item label="2x" name="2x"/>
<combo_box.item label="4x" name="4x"/>
<combo_box.item label="8x" name="8x"/>
<combo_box.item label="16x" name="16x"/>
<combo_box.item label="FXAA" name="FXAA"/>
</combo_box>
<text name="advanced_settings">
Paramètres avancés (redémarrage requis) :
@ -102,7 +118,10 @@ Si vous ne comprenez pas la distinction, ne vous souciez pas de ce contrôle."/>
<text name="World Updating">Actualisation de l'univers :</text>
<check_box label="Figer les mises à jour de l'univers (Met tout en pause)" tool_tip="Cochez cette option pour figer toutes les mises à jour provenant de l'univers - Ceci interrompra toutes les actions visuelles mais n'affectera pas les conversations écrites ou vocales" name="WorldPause"/>
<text name="Texture Rendering">Rendu des textures :</text>
<check_box label="Limiter le résolution maximale des textures à 512px (64bit seulement; redémarrage requis)" tool_tip="Activée, cette option limite la résomution maximale d'affichage des textures dans Second Life à 512px. Cela permet d'afficher plus de textures avant de dépasser la limite de mémoire disponible et évite de voir des textures floues." name="FSRestrictMaxTextureSize"/>
<check_box width="270" label="Limiter le résolution maximale des textures à :" tool_tip="Activée, cette option limite la résomution maximale d'affichage des textures dans Second Life. Cela permet d'afficher plus de textures avant de dépasser la limite de mémoire disponible et évite de voir des textures floues." name="FSRestrictMaxTextureSize"/>
<text name="FSRestrictMaxTextureSizeRestartText">
(Redémarrage requis)
</text>
<text name="TextureDetailLabel">
Qualité max. des textures :
</text>

View File

@ -1,26 +1,67 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Terrain" name="Terrain">
<text name="region_text_lbl">Région :</text>
<text name="region_text">inconnue</text>
<text name="region_text_lbl">
Région :
</text>
<text name="region_text">
inconnue
</text>
<spinner label="Niveau de la mer" name="water_height_spin"/>
<spinner label="Altitude maximale" name="terrain_raise_spin"/>
<spinner label="Altitude minimale" name="terrain_lower_spin"/>
<text name="detail_texture_text">Textures du terrain (Requis : fichiers .tga de taille 1024x1024, 24 bits)</text>
<text name="height_text_lbl" width="95">1 (Basse altitude)</text>
<text name="height_text_lbl2" left_pad="60">2</text>
<text name="height_text_lbl3" width="70">3</text>
<text name="height_text_lbl4" left_pad="0">4 (Haute altitude)</text>
<text name="height_text_lbl5">Variation des textures</text>
<text name="height_text_lbl10">Ces valeurs représentent l'altitude de changement des textures ci-dessus.</text>
<text name="height_text_lbl11">Mesurées en mètres, la valeur Basse est l'altitude maximum de la première texture, et la valeur Haute est l'altitude minimum de la dernière texture.</text>
<text name="height_text_lbl6">Nord-Ouest</text>
<text name="height_text_lbl7">Nord-Est</text>
<text name="detail_texture_text">
Textures du terrain
</text>
<text name="detail_material_text">
Matériaux du terrain
</text>
<check_box label="PBR Metallic Roughness" name="terrain_material_type" tool_tip="Si cette case est cochée, utilisez des matériaux PBR Metallic Roughness (rugosité métal) pour le terrain. Sinon, utilisez des textures."/>
<text name="height_text_lbl">
1 (Basse altitude)
</text>
<text name="height_text_lbl2">
2
</text>
<text name="height_text_lbl3">
3
</text>
<text name="height_text_lbl4">
4 (Haute altitude)
</text>
<text name="height_text_lbl5">
Variation des textures
</text>
<text name="height_text_lbl5_material">
Variation des matériaux
</text>
<text name="height_text_lbl10">
Ces valeurs représentent l'altitude de changement des textures ci-dessus.
</text>
<text name="height_text_lbl10_material">
Ces valeurs représentent la zone de mélange pour les matériaux ci-dessus.
</text>
<text name="height_text_lbl11">
Mesurées en mètres, la valeur Basse est l'altitude maximum de la première texture, et la valeur Haute est l'altitude minimum de la dernière texture.
</text>
<text name="height_text_lbl11_material">
Mesurée en mètres, la valeur BASSE est la hauteur MAXIMALE du matériau n°1, et la valeur HAUTE est la hauteur MINIMALE du matériau n°4.
</text>
<text name="height_text_lbl6">
Nord-Ouest
</text>
<text name="height_text_lbl7">
Nord-Est
</text>
<spinner label="Bas" name="height_start_spin_1"/>
<spinner label="Bas" name="height_start_spin_3"/>
<spinner label="Haut" name="height_range_spin_1"/>
<spinner label="Haut" name="height_range_spin_3"/>
<text name="height_text_lbl8">Sud-Ouest</text>
<text name="height_text_lbl9">Sud-Est</text>
<text name="height_text_lbl8">
Sud-Ouest
</text>
<text name="height_text_lbl9">
Sud-Est
</text>
<spinner label="Bas" name="height_start_spin_0"/>
<spinner label="Bas" name="height_start_spin_2"/>
<spinner label="Haut" name="height_range_spin_0"/>

View File

@ -54,7 +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 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]
</string>
<string name="AboutDriver">
Version Windows Graphics Driver : [GRAPHICS_DRIVER_VERSION]
@ -73,13 +75,6 @@ Distance d'affichage : [DRAW_DISTANCE] m
Bande passante : [BANDWIDTH] kbit/s
Facteur LOD : [LOD]
Qualité du rendu : [RENDERQUALITY]
Modèle d'éclairage avancé : [ALMSTATUS]
</string>
<string name="AboutTextureMemory">
Mémoire des textures : [TEXTUREMEMORY] MB ([TEXTUREMEMORYMULTIPLIER])
</string>
<string name="AboutTextureMemoryDynamic">
Mémoire des textures : Dynamique ([TEXTUREMEMORYMIN] Mo min / [TEXTUREMEMORYCACHERESERVE]% Cache / [TEXTUREMEMORYGPURESERVE]% VRAM)
</string>
<string name="AboutCache">
Cache disque : [DISK_CACHE_INFO]
@ -7140,4 +7135,7 @@ Votre position actuelle : [AVATAR_POS]
<string name="OpenSimInventoryValidationErrorGenericHelp">
l'équipe d'assistance de votre gestionnaire de grille
</string>
<string name="Unlimited">
Illimité
</string>
</strings>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<floater name="floater_combo">
<text name="combo_text">
Seleziona un'opzione:
</text>
<button label="Annulla" name="combo_cancel" />
</floater>

View File

@ -2,6 +2,7 @@
<floater name="emojipicker" title="Scegli Emoji">
<floater.string name="title_for_recently_used" value="Usate di recente"/>
<floater.string name="title_for_frequently_used" value="Usate di frequente"/>
<floater.string name="text_no_emoji_for_filter" value="Nessuna emoji trovata per '[FILTER]'"/>
<text name="Dummy">
Nessuna emoji selezionata
</text>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="contents" title="Assistente Miniature Inventario">
<scroll_list name="inventory_thumbnails_list" tool_tip="Incolla elementi dal tuo inventario">
<scroll_list.columns label="Elemento" name="item_name" />
<scroll_list.columns label="Immagine Attuale" name="existing_texture" />
<scroll_list.columns label="Nuova Immagine" name="new_texture" />
</scroll_list>
<button label="Incolla elementi dal tuo inventario" name="paste_items_btn" />
<button label="Incolla immagini dal tuo inventario" name="paste_textures_btn" />
<button label="Salva miniature" name="write_thumbnails_btn" />
<button label="Registra elementi senza miniatura" name="log_missing_thumbnails_btn" />
<button label="Rimuovi miniature dagli elementi incollati" name="clear_thumbnails_btn" />
</floater>

View File

@ -25,7 +25,6 @@ https://wiki.firestormviewer.org/fs_media
per cercare di risolvere il problema.
</text>
<button label="Apri nel web browser" name="open_browser"/>
<check_box label="Apri sempre nel web browser" name="open_always"/>
<button label="Chiudi" name="close"/>
</layout_panel>
</layout_stack>

View File

@ -1,28 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="prefs_graphics_advanced" title="Preferenze Avanzate Grafica">
<text name="GeneralText">
Generali
Generale
</text>
<slider label="Distanza visualizzazione:" name="DrawDistance"/>
<text name="DrawDistanceMeterText2">
m
</text>
<slider label="Numero massimo particelle:" name="MaxParticleCount"/>
<slider label="Qualità dopo l&apos;elaborazione:" name="RenderPostProcess"/>
<text name="PostProcessText">
Basso
</text>
<check_box label="Abilita VSync" name="vsync" tool_tip="Sincronizza il numero di fotogrammi al secondo con la frequenza di aggiornamento del monitor, il che potrebbe comportare una riduzione della fluidità e del ritardo visibili." />
<text name="AvatarText">
Avatar
</text>
<slider label="Complessità massima:" name="IndirectMaxComplexity" tool_tip="Definisce il punto in cui un avatar dall&apos;aspetto complesso viene visualizzato come JellyDoll"/>
<text name="IndirectMaxComplexityText">
0
</text>
<slider label="N. max di non impostori:" name="IndirectMaxNonImpostors"/>
<text name="IndirectMaxNonImpostorsText">
0
</text>
<slider label="Dettagli:" name="AvatarMeshDetail"/>
<text name="AvatarMeshDetailText">
Basso
@ -34,29 +26,15 @@
<text name="HardwareText">
Hardware
</text>
<slider label="Memoria texture (MB):" name="GraphicsCardTextureMemory" tool_tip="Spazio di memoria da assegnare alle texture. Utilizza la memoria della scheda video come impostazione predefinita. La riduzione di questa impostazione potrebbe migliorare il rendimento ma potrebbe anche rendere le texture poco definite."/>
<slider label="Rapporto distanza nebbia:" name="fog"/>
<slider label="Gamma:" name="gamma"/>
<text name="(brightness, lower is brighter)">
(0 = luminosità predefinita, più basso = più luminoso)
</text>
<check_box label="Filtro anisotropico (rallenta quando è attivato)" name="ani"/>
<check_box initial_value="true" label="Attiva oggetti buffer vertici OpenGL" name="vbo" tool_tip="Se si attiva questa impostazione su hardware più recente si migliorano le prestazioni. Con la funzione attiva, l&apos;hardware meno recente potrebbe implementare VBO in maniera errata, causando interruzioni."/>
<check_box initial_value="true" label="Attiva compressione texture (richiede riavvio)" name="texture compression" tool_tip="Comprime le texture nella memoria video, consentendo il caricamento di texture a risoluzione maggiore al prezzo di una perdita di qualità del colore."/>
<check_box initial_value="true" label="Abilita assistenza per display HiDPI (riavvio necessario)" name="use HiDPI" tool_tip="Abilita OpenGL per disegni ad alta risoluzione."/>
<check_box label="Attiva compressione texture (richiede riavvio)" name="texture compression" tool_tip="Comprime le texture nella memoria video, consentendo il caricamento di texture a risoluzione maggiore al prezzo di una perdita di qualità del colore."/>
<check_box label="Abilita assistenza per display HiDPI (richiede riavvio)" name="use HiDPI" tool_tip="Abilita OpenGL per disegni ad alta risoluzione."/>
<text name="antialiasing label">
Antialiasing:
</text>
<combo_box label="Antialiasing" name="fsaa">
<combo_box.item label="Disattivato" name="FSAADisabled"/>
<combo_box.item label="2x" name="2x"/>
<combo_box.item label="4x" name="4x"/>
<combo_box.item label="8x" name="8x"/>
<combo_box.item label="16x" name="16x"/>
<combo_box.item label="Disabilita" name="FSAADisabled"/>
</combo_box>
<text name="antialiasing restart">
(richiede il riavvio)
</text>
<text name="MeshText">
Mesh
</text>
@ -76,47 +54,59 @@
<text name="FlexibleMeshDetailText">
Basso
</text>
<text name="antialiasing restart">
(richiede riavvio)
</text>
<text name="ShadersText">
Shader
Ombreggiatura
</text>
<check_box initial_value="true" label="Acqua trasparente" name="TransparentWater"/>
<check_box initial_value="true" label="Mappatura urti e brillantezza" name="BumpShiny"/>
<check_box initial_value="true" label="Luci locali" name="LocalLights"/>
<slider label="Dettagli terreno:" name="TerrainDetail"/>
<text name="TerrainDetailText">
Basso
</text>
<check_box initial_value="true" label="Hardware skinning avatar" name="AvatarVertexProgram"/>
<check_box initial_value="true" label="Stoffa avatar" name="AvatarCloth"/>
<text name="ReflectionsText">
Riflessi nellacqua:
</text>
<combo_box name="Reflections">
<combo_box.item label="Minimo" name="0"/>
<combo_box.item label="Terreno e alberi" name="1"/>
<combo_box.item label="Tutti gli oggetti statici" name="2"/>
<combo_box.item label="Tutti gli avatar e gli oggetti" name="3"/>
<combo_box.item label="Tutto" name="4"/>
</combo_box>
<check_box initial_value="true" label="Shader atmosfera" name="WindLightUseAtmosShaders"/>
<check_box label="Acqua trasparente" name="TransparentWater"/>
<slider label="Cielo:" name="SkyMeshDetail"/>
<text name="SkyMeshDetailText">
Basso
</text>
<check_box initial_value="true" label="Modello illuminazione avanzato" name="UseLightShaders"/>
<check_box initial_value="true" label="Occlusione ambientale" name="UseSSAO"/>
<check_box initial_value="true" label="Profondità di campo" name="UseDoF"/>
<check_box label="Occlusione ambientale" name="UseSSAO"/>
<check_box label="Profondità di campo" name="UseDoF"/>
<text name="RenderShadowDetailText">
Ombre:
</text>
<combo_box name="ShadowDetail">
<combo_box.item label="Nessuno" name="0"/>
<combo_box.item label="Nessuna" name="0"/>
<combo_box.item label="Sole/Luna" name="1"/>
<combo_box.item label="Sole/Luna + Proiettori" name="2"/>
</combo_box>
<button label="Ripristina impostazioni consigliate" name="Defaults"/>
<button label="OK" label_selected="OK" name="OK"/>
<check_box label="Riflessi Screen Space (SSR)" name="ScreenSpaceReflections" />
<text name="ReflectionDetailText">
Dettaglio riflessi:
</text>
<combo_box name="ReflectionDetail">
<combo_box.item label="Solo statico" name="0" />
<combo_box.item label="Statico e dinamico" name="1" />
<combo_box.item label="In tempo reale" name="2" />
</combo_box>
<text name="ReflectionProbeText">
Copertura riflessione:
</text>
<combo_box name="ReflectionLevel">
<combo_box.item label="Nessuna" name="0" />
<combo_box.item label="Solo manuale" name="1" />
<combo_box.item label="Manuale e terreno" name="2" />
<combo_box.item label="Scena completa" name="3" />
</combo_box>
<slider label="Esposizione:" name="RenderExposure" />
<check_box label="Specchi" name="Mirrors" />
<text name="MirrorResolutionText">
Risoluzione specchi:
</text>
<text name="HeroProbeUpdateText">
Update specchi:
</text>
<combo_box name="HeroProbeUpdateRate">
<combo_box.item label="Ogni frame" name="0" />
<combo_box.item label="Ogni 2 frame" name="1" />
<combo_box.item label="Ogni 3 frame" name="2" />
<combo_box.item label="Ogni 4 frame" name="3" />
</combo_box>
<button label="Ripristina impostazioni predefinite" name="Defaults"/>
<button label="Annulla" label_selected="Annulla" name="Cancel"/>
<check_box label="RenderAvatarMaxComplexity" name="RenderAvatarMaxComplexity"/>
<check_box label="RenderAvatarMaxNonImpostors" name="RenderAvatarMaxNonImpostors"/>
</floater>

View File

@ -12,9 +12,6 @@
<floater.string name="step_wait">
Attendi:
</floater.string>
<floater.string name="stop_txt">
Stop
</floater.string>
<floater.string name="preview_txt">
Anteprima
</floater.string>
@ -58,13 +55,9 @@
<text name="options_text">
(opzioni)
</text>
<radio_group name="animation_trigger_type">
<radio_item label="Avvia" name="start"/>
<radio_item label="Ferma" name="stop"/>
</radio_group>
<check_box label="finché le animazioni sono eseguite" name="wait_anim_check"/>
<check_box label="fino al rilascio del pulsante" name="wait_key_release_check" />
<check_box label="fino alla fine dell'animazione" name="wait_anim_check"/>
<check_box label="durata in secondi:" name="wait_time_check"/>
<line_editor name="wait_time_editor"/>
<text name="help_label">
Tutte le fasi avvengono contemporaneamente, a meno che non aggiungi fasi di attesa.
</text>

Some files were not shown because too many files have changed in this diff Show More