Merge branch 'master' of https://github.com/FirestormViewer/phoenix-firestorm into texture-changes-reverted
commit
3665dc24f4
|
|
@ -85,7 +85,7 @@ jobs:
|
|||
variants: ${{ matrix.configuration }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||
|
||||
|
|
@ -95,14 +95,14 @@ jobs:
|
|||
python-version: "3.11"
|
||||
|
||||
- name: Checkout build variables
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: secondlife/build-variables
|
||||
ref: master
|
||||
path: .build-variables
|
||||
|
||||
- name: Checkout master-message-template
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: secondlife/master-message-template
|
||||
path: .master-message-template
|
||||
|
|
@ -369,13 +369,13 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Download viewer exe
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v5
|
||||
with:
|
||||
name: Windows-app
|
||||
path: _artifacts
|
||||
- name: Download Windows Symbols
|
||||
if: env.BUGSPLAT_USER && env.BUGSPLAT_PASS
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v5
|
||||
with:
|
||||
name: Windows-symbols
|
||||
- name: Extract viewer pdb
|
||||
|
|
@ -405,7 +405,7 @@ jobs:
|
|||
steps:
|
||||
- name: Download Mac Symbols
|
||||
if: env.BUGSPLAT_USER && env.BUGSPLAT_PASS
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v5
|
||||
with:
|
||||
name: macOS-symbols
|
||||
- name: Post Mac symbols
|
||||
|
|
@ -425,11 +425,11 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
if: needs.setup.outputs.release_run
|
||||
steps:
|
||||
- uses: actions/download-artifact@v4
|
||||
- uses: actions/download-artifact@v5
|
||||
with:
|
||||
pattern: "*-installer"
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
- uses: actions/download-artifact@v5
|
||||
with:
|
||||
pattern: "*-metadata"
|
||||
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ jobs:
|
|||
echo "/usr/local/bin" >> $GITHUB_PATH
|
||||
echo "$(brew --prefix)/opt/gnu-sed/libexec/gnubin" >> $GITHUB_PATH
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
# Use apt-based Python when inside the Ubuntu 22.04 container
|
||||
- name: Install Python 3.11 (container case)
|
||||
if: matrix.container_image == 'ubuntu:22.04'
|
||||
|
|
@ -185,12 +185,12 @@ jobs:
|
|||
shell: bash
|
||||
|
||||
- name: Get the code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Checkout build vars (after the main code)
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
repository: FirestormViewer/fs-build-variables
|
||||
path: build-variables
|
||||
|
|
@ -515,7 +515,7 @@ jobs:
|
|||
if: always()
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
sparse-checkout: |
|
||||
fsutils/download_list.py
|
||||
|
|
@ -529,7 +529,7 @@ jobs:
|
|||
run: pip install discord-webhook
|
||||
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v5
|
||||
id: download
|
||||
with:
|
||||
path: to_deploy
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ jobs:
|
|||
contents: read
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
sparse-checkout: |
|
||||
fsutils/download_list.py
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ jobs:
|
|||
pre-commit:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: 3.x
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ jobs:
|
|||
shell: bash
|
||||
|
||||
- name: Download Setup.exe Files Artifact
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v5
|
||||
with:
|
||||
name: setup-exe-files
|
||||
path: setup_exe_files
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ jobs:
|
|||
steps:
|
||||
# Checkout the Repository
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0 # Necessary to fetch all history for tagging
|
||||
|
||||
|
|
|
|||
|
|
@ -112,8 +112,10 @@ indra/newview/pilot.xml
|
|||
# Firestorm additions
|
||||
indra/newview/exoflickrkeys.h
|
||||
indra/newview/fsdiscordkey.h
|
||||
indra/tools/vstool/obj/*/*.cache
|
||||
my_autobuild.xml
|
||||
.vscode
|
||||
.vs
|
||||
*.srctrlbm
|
||||
*.srctrldb
|
||||
*.srctrlprj
|
||||
|
|
|
|||
|
|
@ -43,9 +43,22 @@ A few packages must be installed on the build system. Some may already be instal
|
|||
sudo apt install libgl1-mesa-dev libglu1-mesa-dev libpulse-dev build-essential python3-pip git libssl-dev libxinerama-dev libxrandr-dev libfontconfig-dev libfreetype6-dev gcc-11 cmake
|
||||
```
|
||||
|
||||
### Optional: Set up a Python virtual environment
|
||||
|
||||
If you do not want to install the required Python packages into the default Python directory, you can optionally create a virtual environment.
|
||||
|
||||
- Create the Python virtual environment (only once):
|
||||
`python -m venv .venv`
|
||||
- Activate the virtual environment:
|
||||
`source .venv/bin/activate`
|
||||
- Activate the virtual environment each time you want to build.
|
||||
- Type all the subsequent commands in this virtual environment.
|
||||
- In case of issue or Python update, you can delete this .venv directory and create a new virtual environment again.
|
||||
|
||||
### Install Autobuild
|
||||
|
||||
Autobuild is a Linden Lab resource that does all the hard work.
|
||||
If you created a Python virtual environment, activate it first.
|
||||
You can install it using the same versions as our automated builds as follows:
|
||||
```
|
||||
sudo pip3 install --upgrade pip
|
||||
|
|
@ -156,27 +169,36 @@ This will set up to compile with all defaults and without non-default libraries.
|
|||
Available premade firestorm-specific build targets:
|
||||
|
||||
```
|
||||
ReleaseFS (includes KDU, FMOD)
|
||||
ReleaseFS_open (no KDU, no FMOD)
|
||||
RelWithDebInfoFS_open (no KDU, no FMOD)
|
||||
ReleaseFS (with KDU, with FMOD, no OpenSim)
|
||||
ReleaseFS_AVX (with KDU, with FMOD, no OpenSim, optimized for AVX-enabled CPUs)
|
||||
ReleaseFS_AVX2 (with KDU, with FMOD, no OpenSim, optimized for AVX2-enabled CPUs)
|
||||
ReleaseFS_open ( no KDU, no FMOD, no OpenSim)
|
||||
ReleaseOS ( no KDU, no FMOD, with OpenSim)
|
||||
RelWithDebInfoFS (with KDU, with FMOD, no OpenSim, with debug info)
|
||||
RelWithDebInfoFS_open ( no KDU, no FMOD, no OpenSim, with debug info)
|
||||
RelWithDebInfoOS ( no KDU, no FMOD, with OpenSim, with debug info)
|
||||
```
|
||||
|
||||
### Configuration Switches
|
||||
|
||||
There are a number of switches you can use to modify the configuration process. The name of each switch is followed by its type and then by the value you want to set.
|
||||
|
||||
- **LL_TESTS** (bool) controls if the tests are compiled and run. There are quite a lot of them so excluding them is recommended unless you have some reason to need one or more of them.
|
||||
- **clean** will cause autobuild to remove any previously compiled objects and fetched packages. It can be useful if you need to force a reload of all packages
|
||||
- **package** will result in a bzip2 archive of the completed viewer. Enabled by default, you would have to use **-DPACKAGE:BOOL=Off** to disable it
|
||||
- **chan** will set a unique channel (and the name) for the viewer, appending whatever is defined to "Firestorm-". By default, the channel is "private" followed by your computer's name.
|
||||
- **fmodstudio** will tell autobuiild to use the FmodStudio package when compiling.
|
||||
- **-A \<architecture\>** sets the target architecture, that is if you want to build a 32bit or 64bit viewer (32bit is default if omitted). You probably want to set this to `-A 64`.
|
||||
- **--avx** will enable AVX optimizations for AVX-enabled CPUs. Mutually exclusive with --avx2.
|
||||
- **--avx2** will enable AVX2 optimizations for AVX2-enabled CPUs. Mutually exclusive with --avx.
|
||||
- **--clean** will cause autobuild to remove any previously compiled objects and fetched packages. It can be useful if you need to force a reload of all packages
|
||||
- **--fmodstudio** will tell autobuiild to use the FmodStudio package when compiling.
|
||||
- **--kdu** will tell autobuiild to use the KDU (Kakadu) package when compiling.
|
||||
- **--package** makes sure all files are copied into viewers output directory. It will also result in a bzip2 archive of the completed viewer. Enabled by default, you would have to use **-DPACKAGE:BOOL=Off** to disable it
|
||||
- **--chan \<channel name\>** will set a unique channel (and the name) for the viewer, appending whatever is defined to "Firestorm-". By default, the channel is "private" followed by your computer's name.
|
||||
- **-LL_TESTS:BOOL=\<bool\>** controls if the tests are compiled and run. There are quite a lot of them so excluding them is recommended unless you have some reason to need one or more of them.
|
||||
|
||||
Most switches start with a double-dash (\--). And if you use any switches you must enclose them with a double-dash at the start and an optional double-dash at the end.
|
||||
|
||||
> [!TIP]
|
||||
> **OFF** and **NO** are the same as **FALSE**; anything else is considered to be **TRUE**
|
||||
|
||||
Examples:
|
||||
### Examples: ###
|
||||
|
||||
```
|
||||
autobuild configure -A 64 -c ReleaseFS_open -- -DLL_TESTS:BOOL=FALSE
|
||||
|
|
|
|||
|
|
@ -14,21 +14,33 @@ The steps listed below are expected to be run from a shell prompt. Simply copy a
|
|||
You will need to install the following tools:
|
||||
|
||||
### Xcode
|
||||
- Xcode, It's a free download from Apple, but the latest version (12.x) is too new, so you will need to get an older version.
|
||||
- To download a version that will work (11.7 in this case), go [here](https://developer.apple.com/download) and log in with an apple ID.
|
||||
- Either find the 11.7 download in the list or use this [direct link](https://download.developer.apple.com/Developer_Tools/Xcode_11.7/Xcode_11.7.xip) (will prompt you to log in if you skipped the above step.)
|
||||
XCode is a free download from Apple but you will need an Apple ID to login and access the download section. The current version used to compile Firestorm is 16.4.
|
||||
- Go [here](https://developer.apple.com/download) and log in with an apple ID.
|
||||
- Either find the 16.4 download in the list or use this [direct link](https://developer.apple.com/services-account/download?path=/Developer_Tools/Xcode_16.4/Xcode_16.4.xip) (will prompt you to log in if you skipped the above step.)
|
||||
- Open the downloaded file and copy the Xcode application to the Applications folder.
|
||||
- Open Xcode at least once to set up everything to compile the viewer later on.
|
||||
- Test by running `clang --version` from the terminal window.
|
||||
- It should report version 11 something (Apple clang version 11.0.3 (clang-1103.0.32.62) for example.)
|
||||
- If it reports version 12, something is messed up and you installed Xcode 12.
|
||||
- It should report version 17 something (Apple clang version 17.0.0 (clang-1700.0.13.5) for example).
|
||||
- If it reports an inferior version, something is messed up and you installed another version of XCode. It might still work, but the supported version is currently 16.4.
|
||||
|
||||
### CMake
|
||||
- Download [CMake](http://www.cmake.org/download) version 3.16.0 or higher
|
||||
- Download [CMake](http://www.cmake.org/download) version 4.1.1 or higher
|
||||
- Open the downloaded file and copy CMake to the Applications folder.
|
||||
- You will need to install the command line links manually. To do this, run from the terminal: `sudo /Applications/CMake.app/Contents/MacOS/CMake --install`
|
||||
- Again, test by running: `cmake --version` from the terminal window.
|
||||
|
||||
### Optional: Set up a Python virtual environment
|
||||
|
||||
If you do not want to install the required Python packages into the default Python directory, you can optionally create a virtual environment.
|
||||
|
||||
- Create the Python virtual environment (only once):
|
||||
`python -m venv .venv`
|
||||
- Activate the virtual environment:
|
||||
`source .venv/bin/activate`
|
||||
- Activate the virtual environment each time you want to build.
|
||||
- Type all the subsequent commands in this virtual environment.
|
||||
- In case of issue or Python update, you can delete this .venv directory and create a new virtual environment again.
|
||||
|
||||
### Pip
|
||||
The pip Python package installation tool is required for the next step. To install it, run from terminal:
|
||||
```
|
||||
|
|
@ -38,63 +50,34 @@ sudo python3 get-pip.py
|
|||
|
||||
### Autobuild
|
||||
The Linden Lab [Autobuild](https://github.com/secondlife/autobuild) tool.
|
||||
- Activate your Python virtual environment if you created one earlier
|
||||
- Use the following command to install it on your machine:
|
||||
```
|
||||
pip3 install --user -r requirements.txt
|
||||
```
|
||||
|
||||
If you created a Python virtual environment, autobuild will be located in .venv/bin/autobuild and already added to $PATH. But if you did not create a virtual environment, do the following:
|
||||
|
||||
- Add it to your PATH environment variable so it can be found by the shell. The macOS-approved way to do this is to issue the following command (This change will not take effect until the next time you open a Terminal window.):
|
||||
```
|
||||
echo '~/Library/Python/3.7/bin/' | sudo tee /etc/paths.d/99-autobuild
|
||||
echo '~/Library/Python/3.9/bin/' | sudo tee /etc/paths.d/99-autobuild
|
||||
```
|
||||
|
||||
- If you do not want to close and re-open your terminal, type the following to add it your PATH (otherwise if you did close it down, re-open it as shown above [here](#obtaining-a-shell-to-work-with)):
|
||||
```
|
||||
export PATH=$PATH:~/Library/Python/3.7/bin/
|
||||
export PATH=$PATH:~/Library/Python/3.9/bin/
|
||||
```
|
||||
|
||||
- Check Autobuild version to be "autobuild 3.9.3" or higher: `autobuild --version`
|
||||
- Once Autobuild is correctly installed, check Autobuild version to be "autobuild 3.9.6" or higher: `autobuild --version`
|
||||
|
||||
### Additional third party libraries
|
||||
If you want to use licensed FMOD Studio API or KDU build libraries (they are optional) you have to provide these yourself. If you're building Firestorm as part of the project team, ask for the libraries for fmodstudio and kdu. Put them into `/opt/firestorm`.
|
||||
If you want to use licensed FMOD Studio API or KDU (short for Kakadu) build libraries (they are optional) you have to provide these yourself. If you're building Firestorm as part of the project team, ask for the libraries for fmodstudio and kdu. Put them into `/opt/firestorm`. Some libraries like Kakadu or Havok require that you purchase a license so do not set the flags to include those packages if you do not have the according licenses.
|
||||
|
||||
If you're a community builder, you'll need to build these libraries yourself, then change your autobuild.xml file to point to your own versions, or create a different autobuild.xml with your customizations, and use this with autobuild instead of our default autobuild.xml. There are some examples of how to build FMOD Studio on the LL Wiki and opensource-dev mailing list.
|
||||
|
||||
We've created a non-KDU build target to make this easier. Everywhere you see "ReleaseFS" below, use "ReleaseFS_open" instead. This will perform the same build, using openjpeg instead of KDU and omitting FMOD Studio.
|
||||
|
||||
Available premade firestorm-specific build targets:
|
||||
|
||||
```
|
||||
ReleaseFS (includes KDU, FMOD)
|
||||
ReleaseFS_open (no KDU, no FMOD)
|
||||
RelWithDebInfo_open (no KDU, no FMOD)
|
||||
```
|
||||
|
||||
To build firestorm:
|
||||
|
||||
```
|
||||
autobuild build -c ReleaseFS
|
||||
```
|
||||
|
||||
Other examples:
|
||||
|
||||
```
|
||||
autobuild configure -c ReleaseFS # basic configuration step, don't build, just configure
|
||||
autobuild configure -c ReleaseFS -- --clean # clean the output area first, then configure
|
||||
autobuild configure -c ReleaseFS -- --chan Private-Yourname # configure with a custom channel
|
||||
|
||||
autobuild build -c ReleaseFS --no-configure # default quick rebuild
|
||||
autobuild build -c ReleaseFS --no-configure -- --clean # Clean rebuild
|
||||
|
||||
autobuild configure -c ReleaseFS_open -- # configure with no third-party libraries
|
||||
autobuild configure -c ReleaseFS_open -- --fmodstudio # configure with FMOD Studio but no KDU
|
||||
```
|
||||
|
||||
Any of the configure options can also be used (and do the same thing) with the build options. Typical LL autobuild configure options should also work, as long as they don't duplicate configuration we are already doing.
|
||||
|
||||
Logs: Look for logs in `build-darwin-x86_64/logs`.
|
||||
|
||||
Output: Look for output in `build-darwin-x86_64/newview/Release`.
|
||||
You will probably want to have FMOD enabled and no Kakadu, in that case, you can use the ReleaseFS_open target with the --fmodstudio switch.
|
||||
|
||||
## Set up your source code tree
|
||||
|
||||
|
|
@ -124,6 +107,44 @@ Again, if you do not wish to restart your terminal:
|
|||
export AUTOBUILD_VARIABLES_FILE=~/firestorm/fs-build-variables/variables
|
||||
```
|
||||
|
||||
## Firestorm build targets
|
||||
Available premade firestorm-specific build targets:
|
||||
|
||||
```
|
||||
ReleaseFS (with KDU, with FMOD, no OpenSim)
|
||||
ReleaseFS_open ( no KDU, no FMOD, no OpenSim)
|
||||
ReleaseOS ( no KDU, no FMOD, with OpenSim)
|
||||
RelWithDebInfoFS (with KDU, with FMOD, no OpenSim, with debug info)
|
||||
RelWithDebInfoFS_open ( no KDU, no FMOD, no OpenSim, with debug info)
|
||||
RelWithDebInfoOS ( no KDU, no FMOD, with OpenSim, with debug info)
|
||||
```
|
||||
|
||||
To build firestorm:
|
||||
|
||||
```
|
||||
autobuild build -c ReleaseFS
|
||||
```
|
||||
|
||||
Other examples:
|
||||
|
||||
```
|
||||
autobuild configure -c ReleaseFS # basic configuration step, don't build, just configure
|
||||
autobuild configure -c ReleaseFS -- --clean # clean the output area first, then configure
|
||||
autobuild configure -c ReleaseFS -- --chan Private-Yourname # configure with a custom channel
|
||||
|
||||
autobuild build -c ReleaseFS --no-configure # default quick rebuild
|
||||
autobuild build -c ReleaseFS --no-configure -- --clean # Clean rebuild
|
||||
|
||||
autobuild configure -c ReleaseFS_open -- # configure with no third-party libraries
|
||||
autobuild configure -c ReleaseFS_open -- --fmodstudio # configure with FMOD Studio but no KDU
|
||||
```
|
||||
|
||||
Any of the configure options can also be used (and do the same thing) with the build options. Typical LL autobuild configure options should also work, as long as they don't duplicate configuration we are already doing.
|
||||
|
||||
Logs: Look for logs in `build-darwin-x86_64/logs`.
|
||||
|
||||
Output: Look for output in `build-darwin-x86_64/newview/Release`.
|
||||
|
||||
## Prepare third party libraries
|
||||
|
||||
Most third party libraries needed to build the viewer will be automatically downloaded for you and installed into the build directory within your source tree during compilation. Some need to be manually prepared and are not normally required when using an open source configuration (ReleaseFS_open).
|
||||
|
|
@ -149,7 +170,7 @@ autobuild build
|
|||
autobuild package --results-file result.txt
|
||||
```
|
||||
|
||||
Near the top of the output you will see the package name written:
|
||||
Near the top of the output you will see the package name written (version might differ):
|
||||
|
||||
```
|
||||
wrote /Users/yourname/3p-fmodstudio/fmodstudio-2.01.05-darwin-202981448.tar.bz2
|
||||
|
|
@ -157,7 +178,7 @@ wrote /Users/yourname/3p-fmodstudio/fmodstudio-2.01.05-darwin-202981448.tar.bz2
|
|||
|
||||
Additionally, a file `result.txt` has been created containing the md5 hash value of the package file, which you will need in the next step.
|
||||
|
||||
- Next, update Firestorms autobuild.xml file to use your FMOD Studio.
|
||||
- Next, make a copy of Firestorms autobuild.xml named for example my_autobuild.xml to use your FMOD Studio.
|
||||
|
||||
```
|
||||
cd ~/firestorm/phoenix-firestorm
|
||||
|
|
@ -192,13 +213,18 @@ This will configure the viewer for compiling with all defaults and without third
|
|||
|
||||
There are a number of switches you can use to modify the configuration process. The name of each switch is followed by its type and then by the value you want to set.
|
||||
|
||||
- FMODSTUDIO (bool) controls if the FMOD Studio package is incorporated into the viewer. You must have performed the FMOD Studio installation steps in [FMOD Studio using autobuild](#fmod-studio-using-autobuild) for this to work. This is the switch the --fmodstudio build argument sets.
|
||||
- LL_TESTS (bool) controls if the tests are compiled and run. There are quite a lot of them so excluding them is recommended unless you have some reason to need one or more of them.
|
||||
- **-A \<architecture\>** sets the target architecture, that is if you want to build a 32bit or 64bit viewer (32bit is default if omitted). You probably want to set this to `-A 64`.
|
||||
- **--clean** will cause autobuild to remove any previously compiled objects and fetched packages. It can be useful if you need to force a reload of all packages
|
||||
- **--fmodstudio** controls if the FMOD Studio package is incorporated into the viewer. You must have performed the FMOD Studio installation steps in [FMOD Studio using autobuild](#fmod-studio-using-autobuild) for this to work.
|
||||
- **--kdu** will tell autobuiild to use the KDU (Kakadu) package when compiling.
|
||||
- **--package** makes sure all files are copied into viewers output directory. It will also generate a DMG installer package
|
||||
- **--chan \<channel name\>** will set a unique channel (and the name) for the viewer, appending whatever is defined to "Firestorm-". By default, the channel is "private" followed by your computer's name.
|
||||
- **-LL_TESTS:BOOL=\<bool\>** controls if the tests are compiled and run. There are quite a lot of them so excluding them is recommended unless you have some reason to need one or more of them.
|
||||
|
||||
> [!TIP]
|
||||
> OFF and NO are the same as FALSE; anything else is considered to be TRUE
|
||||
> **OFF** and **NO** are the same as **FALSE**; anything else is considered to be **TRUE**
|
||||
|
||||
Example:
|
||||
### Example: ###
|
||||
|
||||
```
|
||||
autobuild configure -A 64 -c ReleaseFS_open -- -DLL_TESTS:BOOL=FALSE -DFMODSTUDIO:BOOL=TRUE
|
||||
|
|
@ -234,6 +260,8 @@ open build-darwin-x86_64/newview/Release
|
|||
|
||||
From here you can run it directly or copy it to the Applications folder for ease of finding and running later.
|
||||
|
||||
If you used the --package switch, you will also find the DMG installer package in `build-darwin-x86_64/newview`.
|
||||
|
||||
## Updating the viewer
|
||||
|
||||
If you want to update your self-compiled viewer, you don't have to go through this entire page again. Follow these steps to pull down any new code and re-compile.
|
||||
|
|
@ -243,6 +271,7 @@ If you want to update your self-compiled viewer, you don't have to go through th
|
|||
- If you have picked to do a clean build, run the following in the terminal window, otherwise skip to the next step: `rm -r build-darwin-x86_64`
|
||||
- If you are using a custom autobuild.xml file, then run the following in the terminal window, otherwise skip this step: `export AUTOBUILD_CONFIG_FILE=my_autobuild.xml`
|
||||
- Now, to pull down any new code, run the following in the terminal window: `git pull`
|
||||
- If you are using a custom autobuild.xml file, compare my_autobuild.xml to autobuild.xml to see if anything has been updated and update your custom file accordingly.
|
||||
- After any new code is downloaded, it needs to be reconfigured. Run the following in the terminal window: `autobuild configure -A 64 -c ReleaseFS_open`
|
||||
- Finally, re-compile the viewer with the new changes. Again, in the terminal window, run: `autobuild build -A 64 -c ReleaseFS_open --no-configure`
|
||||
|
||||
|
|
|
|||
|
|
@ -28,14 +28,31 @@ All installations are done with default settings (unless told explicitly) - if y
|
|||
> [!TIP]
|
||||
> If you don't own a copy of a commercial edition of Visual Studio 2022 (e.g. Professional), you might consider installing the [Community version](https://visualstudio.microsoft.com/free-developer-offers)
|
||||
|
||||
### Tortoise Git
|
||||
### Command Prompt vs Powershell
|
||||
- Make sure that you use the Windows Command Prompt / Terminal (cmd.exe) and not Powershell or it won't detect the Visual Studio build tools properly.
|
||||
|
||||
- Download and install [TortoiseGit 2.9.0 or newer](https://tortoisegit.org) (64bit)
|
||||
### Git
|
||||
|
||||
- If you prefer having a GUI for Git, download and install [TortoiseGit 2.17.0 or newer](https://tortoisegit.org) (64bit)
|
||||
- Note: No option available to install as Administrator
|
||||
- Use default options (path, components etc.) for Tortoise Git itself
|
||||
- At some point, it will ask you to download and install Git for Windows
|
||||
- You can install with default options **EXCEPT** when it asks for "Configuring the line endings conversion": You **MUST** select "Checkout as-is, commit as-is" here!
|
||||
|
||||
- If you prefer command line tools, you can also use and install the official [Git for Windows](https://git-scm.com/downloads/win).
|
||||
- Uncheck "associate .sh files to be run with bash"
|
||||
- Choose a good text editor such as VS Code or Sublime Text when asked to
|
||||
- Select "Let Git decide the name of the initial branch"
|
||||
- Select "Git from the command line and also from 3rd party software"
|
||||
- Select "Use External SSH"
|
||||
- Select "Use the native Windows Secure Channel library"
|
||||
- Select "Checkout as-is, commit as-is" for line endings conversion.
|
||||
- Select "Use Windows' default console window"
|
||||
- Select "Fast-forward or merge"
|
||||
- Select "Git Credential Manager"
|
||||
- Check "Enable file system caching"
|
||||
- Once installed, ensure that the git directory (C:\Program Files\Git\cmd) is in your PATH.
|
||||
|
||||
### CMake
|
||||
|
||||
- Download and install at least [CMake 3.16.0](http://www.cmake.org/download)
|
||||
|
|
@ -56,9 +73,12 @@ All installations are done with default settings (unless told explicitly) - if y
|
|||
- Add additional packages:
|
||||
- Devel/patch
|
||||
- Use default options for everything else
|
||||
- Make sure that the following directory was added to your path and that it is placed before "%SystemRoot%\system32":
|
||||
- Make sure that the following directory was added to your path and that it is placed before "%SystemRoot%\system32" but after CMake path (in case you installed CMake in Cygwin):
|
||||
`C:\Cygwin64\bin`
|
||||
|
||||
> [!NOTE]
|
||||
> The Cygwin terminal is only needed for testing. All commands for actually building the viewer will be run from the Windows command shell.
|
||||
|
||||
### Python
|
||||
|
||||
- Download and install the most recent version of [Python 3](https://www.python.org/downloads/windows)
|
||||
|
|
@ -87,14 +107,25 @@ pip --version
|
|||
|
||||
If they all report sensible values and not "Command not found" errors, then you are in good shape.
|
||||
|
||||
> [!NOTE]
|
||||
> The Cygwin terminal is only needed for testing. All commands for actually building the viewer will be run from the Windows command shell.
|
||||
### Optional: Set up a Python virtual environment
|
||||
|
||||
If you do not want to install the required Python packages into the default Python directory, you can optionally create a virtual environment.
|
||||
|
||||
- Create the Python Virtual Environment (only once). Open Windows Command Prompt and navigate to the directory where you want to install the virtual environment. To create the virtual environment, enter:
|
||||
`python -m venv <env_name>` (`<env_name>` is a placeholder for the name you want to use for the virtual environment)
|
||||
- Activate the virtual environment by typing:
|
||||
`<env_name>\Scripts\activate.bat`
|
||||
- Activate the virtual environment each time you want to build.
|
||||
- Type all the subsequent commands in this virtual environment.
|
||||
- In case of issue or Python update, you can delete this directory for the virtual environemt and create a new one again.
|
||||
|
||||
### Set up Autobuild
|
||||
|
||||
- Install Autobuild
|
||||
You can install autobuild and its dependencies using the `requirements.txt` file that is part of the repo, this will build using the same versions that our official builds use.
|
||||
- Open Windows Command Prompt and enter: <code>pip install -r requirements.txt</code>
|
||||
- Open Windows Command Prompt
|
||||
- If you created a Python virtual environment earlier, activate it
|
||||
- Enter: <code>pip install -r requirements.txt</code>
|
||||
- Autobuild will be installed. **Earlier versions of Autobuild could be made to work by just putting the source files into your path correctly; this is no longer true - Autobuild _must_ be installed as described here.**
|
||||
- Open Windows Command Prompt and enter:
|
||||
`pip install git+https://github.com/secondlife/autobuild.git#egg=autobuild`
|
||||
|
|
@ -136,7 +167,7 @@ git clone https://github.com/FirestormViewer/phoenix-firestorm.git
|
|||
|
||||
## Prepare third party libraries
|
||||
|
||||
Most third party libraries needed to build the viewer will be automatically downloaded for you and installed into the build directory within your source tree during compilation. Some need to be manually prepared and are not normally required when using an open source configuration (ReleaseFS_open).
|
||||
Most third party libraries needed to build the viewer will be automatically downloaded for you and installed into the build directory within your source tree during compilation. Some need to be manually prepared and are not normally required when using an open source configuration (ReleaseFS_open). Some libraries like Kakadu or Havok requires you to purchase a license and you will need to figure out yourself how to build and use them.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> If you are manually building the third party libraries, you will have to build the correct version (32bit libraries for a 32bit viewer, 64bit versions for a 64bit viewer)!
|
||||
|
|
@ -219,9 +250,14 @@ This will configure Firestorm to be built with all defaults and without third pa
|
|||
Available premade firestorm-specific build targets:
|
||||
|
||||
```
|
||||
ReleaseFS (includes KDU, FMOD)
|
||||
ReleaseFS_open (no KDU, no FMOD)
|
||||
RelWithDebInfoFS_open (no KDU, no FMOD)
|
||||
ReleaseFS (with KDU, with FMOD, no OpenSim)
|
||||
ReleaseFS_AVX (with KDU, with FMOD, no OpenSim, optimized for AVX-enabled CPUs)
|
||||
ReleaseFS_AVX2 (with KDU, with FMOD, no OpenSim, optimized for AVX2-enabled CPUs)
|
||||
ReleaseFS_open ( no KDU, no FMOD, no OpenSim)
|
||||
ReleaseOS ( no KDU, no FMOD, with OpenSim)
|
||||
RelWithDebInfoFS (with KDU, with FMOD, no OpenSim, with debug info)
|
||||
RelWithDebInfoFS_open ( no KDU, no FMOD, no OpenSim, with debug info)
|
||||
RelWithDebInfoOS ( no KDU, no FMOD, with OpenSim, with debug info)
|
||||
```
|
||||
|
||||
> [!TIP]
|
||||
|
|
@ -232,16 +268,20 @@ RelWithDebInfoFS_open (no KDU, no FMOD)
|
|||
|
||||
There are a number of switches you can use to modify the configuration process. The name of each switch is followed by its type and then by the value you want to set.
|
||||
|
||||
- -A \<architecture\> sets the target architecture, that is if you want to build a 32bit or 64bit viewer (32bit is default if omitted).
|
||||
- --fmodstudio controls if the FMOD Studio package is incorporated into the viewer. You must have performed the FMOD Studio installation steps in [FMOD Studio using Autobuild](#fmod-studio-using-autobuild) for this to work.
|
||||
- --package makes sure all files are copied into viewers output directory. You won't be able to start your compiled viewer if you don't enable package or do 'compile' it in VS.
|
||||
- --chan \<channel name\> lets you define a custom channel name for the viewer
|
||||
- -LL_TESTS:BOOL=\<bool\> controls if the tests are compiled and run. There are quite a lot of them so excluding them is recommended unless you have some reason to need one or more of them.
|
||||
- **-A \<architecture\>** sets the target architecture, that is if you want to build a 32bit or 64bit viewer (32bit is default if omitted). You probably want to set this to `-A 64`.
|
||||
- **--avx** will enable AVX optimizations for AVX-enabled CPUs. Mutually exclusive with --avx2.
|
||||
- **--avx2** will enable AVX2 optimizations for AVX2-enabled CPUs. Mutually exclusive with --avx.
|
||||
- **--clean** will cause autobuild to remove any previously compiled objects and fetched packages. It can be useful if you need to force a reload of all packages.
|
||||
- **--fmodstudio** controls if the FMOD Studio package is incorporated into the viewer. You must have performed the FMOD Studio installation steps in [FMOD Studio using Autobuild](#fmod-studio-using-autobuild) for this to work. You will not have any sound if you do not include FMOD.
|
||||
- **--kdu** will tell autobuiild to use the KDU (Kakadu) package when compiling.
|
||||
- **--package** makes sure all files are copied into viewers output directory. You won't be able to start your compiled viewer if you don't enable package or do 'compile' it in VS. It will also run NSIS to create a setup package.
|
||||
- **--chan \<channel name\>** will set a unique channel (and the name) for the viewer, appending whatever is defined to "Firestorm-". By default, the channel is "private" followed by your computer's name.
|
||||
- **-LL_TESTS:BOOL=\<bool\>** controls if the tests are compiled and run. There are quite a lot of them so excluding them is recommended unless you have some reason to need one or more of them.
|
||||
|
||||
> [!TIP]
|
||||
> **OFF** and **NO** are the same as **FALSE**; anything else is considered to be **TRUE**
|
||||
|
||||
Examples:
|
||||
### Examples: ###
|
||||
|
||||
- To build a 64bit viewer with FMOD Studio and to create an installer package, run this command in the Windows command window:
|
||||
`autobuild configure -A 64 -c ReleaseFS_open -- --fmodstudio --package --chan MyViewer -DLL_TESTS:BOOL=FALSE`
|
||||
|
|
@ -255,6 +295,8 @@ There are two ways to build the viewer: Via Windows command line or from within
|
|||
|
||||
### Building from the Windows command line
|
||||
|
||||
Make sure that you are using the Windows Command Prompt / Terminal (cmd.exe) and not Powershell.
|
||||
|
||||
If you are building with FMOD Studio and have followed the previous FMOD Studio setup instructions AND you are now using a new terminal you will need to reset the environment variable with
|
||||
|
||||
`set AUTOBUILD_CONFIG_FILE=my_autobuild.xml`
|
||||
|
|
|
|||
|
|
@ -243,7 +243,7 @@ if (LINUX OR DARWIN)
|
|||
endif ()
|
||||
|
||||
if(LINUX)
|
||||
set(GCC_CXX_WARNINGS "${GCC_WARNINGS} -Wno-reorder -Wno-non-virtual-dtor -Wno-unused-variable -Wno-unused-but-set-variable -Wno-pragmas -Wno-deprecated")
|
||||
set(GCC_CXX_WARNINGS "${GCC_WARNINGS} -Wno-reorder -Wno-non-virtual-dtor -Wno-unused-variable -Wno-pragmas -Wno-deprecated")
|
||||
endif()
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0)
|
||||
|
|
|
|||
|
|
@ -1070,6 +1070,7 @@ std::optional<std::string> llstring_getoptenv(const std::string& key)
|
|||
long LLStringOps::sPacificTimeOffset = 0;
|
||||
long LLStringOps::sLocalTimeOffset = 0;
|
||||
bool LLStringOps::sPacificDaylightTime = 0;
|
||||
bool LLStringOps::sUsingPacificTime = false; // <FS:TJ/> [FIRE-34775] Use PST/PDT when logged into OpenSim
|
||||
std::map<std::string, std::string> LLStringOps::datetimeToCodes;
|
||||
|
||||
std::vector<std::string> LLStringOps::sWeekDayList;
|
||||
|
|
@ -1628,12 +1629,21 @@ bool LLStringUtil::formatDatetime(std::string& replacement, std::string token,
|
|||
}
|
||||
else
|
||||
{
|
||||
#if 0
|
||||
// <FS:TJ> [FIRE-34775] Use PST/PDT when logged into OpenSim
|
||||
#ifdef OPENSIM
|
||||
// EXT-1565 : Zai Lynch, James Linden : 15/Oct/09
|
||||
// [BSI] Feedback: Viewer clock mentions SLT, but would prefer it to show PST/PDT
|
||||
// "slt" = Second Life Time, which is deprecated.
|
||||
// If not utc or user local time, fallback to Pacific time
|
||||
replacement = LLStringOps::getPacificDaylightTime() ? "PDT" : "PST";
|
||||
if (LLStringOps::getUsingPacificTime())
|
||||
{
|
||||
replacement = LLStringOps::getPacificDaylightTime() ? "PDT" : "PST";
|
||||
}
|
||||
else
|
||||
{
|
||||
replacement = "SLT";
|
||||
}
|
||||
// </FS:TJ>
|
||||
#else
|
||||
// SL-20370 : Steeltoe Linden : 29/Sep/23
|
||||
// Change "PDT" to "SLT" on menu bar
|
||||
|
|
|
|||
|
|
@ -153,6 +153,7 @@ private:
|
|||
static long sPacificTimeOffset;
|
||||
static long sLocalTimeOffset;
|
||||
static bool sPacificDaylightTime;
|
||||
static bool sUsingPacificTime; // <FS:TJ/> [FIRE-34775] Use PST/PDT when logged into OpenSim
|
||||
|
||||
static std::map<std::string, std::string> datetimeToCodes;
|
||||
|
||||
|
|
@ -204,6 +205,9 @@ public:
|
|||
static S32 collate(const llwchar* a, const llwchar* b);
|
||||
|
||||
static void setupDatetimeInfo(bool pacific_daylight_time);
|
||||
// <FS:TJ> [FIRE-34775] Use PST/PDT when logged into OpenSim
|
||||
static void setupUsingPacificTime(bool use_pacific_time) { sUsingPacificTime = use_pacific_time; }
|
||||
// </FS:TJ>
|
||||
|
||||
static void setupWeekDaysNames(const std::string& data);
|
||||
static void setupWeekDaysShortNames(const std::string& data);
|
||||
|
|
@ -217,6 +221,9 @@ public:
|
|||
// Is the Pacific time zone (aka server time zone)
|
||||
// currently in daylight savings time?
|
||||
static bool getPacificDaylightTime(void) { return sPacificDaylightTime;}
|
||||
// <FS:TJ> [FIRE-34775] Use PST/PDT when logged into OpenSim
|
||||
static bool getUsingPacificTime() { return sUsingPacificTime; }
|
||||
// </FS:TJ>
|
||||
|
||||
static std::string getDatetimeCode (std::string key);
|
||||
|
||||
|
|
|
|||
|
|
@ -576,15 +576,6 @@ public:
|
|||
|
||||
}
|
||||
|
||||
if (!opj_setup_encoder(encoder, ¶meters, image))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
opj_set_info_handler(encoder, opj_info, this);
|
||||
opj_set_warning_handler(encoder, opj_warn, this);
|
||||
opj_set_error_handler(encoder, opj_error, this);
|
||||
|
||||
U32 width_tiles = (rawImageIn.getWidth() >> 6);
|
||||
U32 height_tiles = (rawImageIn.getHeight() >> 6);
|
||||
|
||||
|
|
@ -598,6 +589,23 @@ public:
|
|||
height_tiles = 1;
|
||||
}
|
||||
|
||||
if (width_tiles == 1 || height_tiles == 1)
|
||||
{
|
||||
// Images with either dimension less than 32 need less number of resolutions otherwise they error
|
||||
int min_dim = rawImageIn.getWidth() < rawImageIn.getHeight() ? rawImageIn.getWidth() : rawImageIn.getHeight();
|
||||
int max_res = 1 + (int)floor(log2(min_dim));
|
||||
parameters.numresolution = max_res;
|
||||
}
|
||||
|
||||
if (!opj_setup_encoder(encoder, ¶meters, image))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
opj_set_info_handler(encoder, opj_info, this);
|
||||
opj_set_warning_handler(encoder, opj_warn, this);
|
||||
opj_set_error_handler(encoder, opj_error, this);
|
||||
|
||||
U32 tile_count = width_tiles * height_tiles;
|
||||
U32 data_size_guess = tile_count * TILE_SIZE;
|
||||
|
||||
|
|
|
|||
|
|
@ -2368,7 +2368,7 @@ bool LLVolume::unpackVolumeFacesInternal(const LLSD& mdl)
|
|||
|
||||
const LLSD::Binary& pos = mdl[i]["Position"].asBinary();
|
||||
const LLSD::Binary& norm = mdl[i]["Normal"].asBinary();
|
||||
const LLSD::Binary& tangent = mdl[i]["Tangent"].asBinary();
|
||||
// const LLSD::Binary& tangent = mdl[i]["Tangent"].asBinary(); // <FS:Beq/> more set but unused
|
||||
const LLSD::Binary& tc = mdl[i]["TexCoord0"].asBinary();
|
||||
const LLSD::Binary& idx = mdl[i]["TriangleList"].asBinary();
|
||||
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@ LLCubeMapArray::LLCubeMapArray(LLCubeMapArray& lhs, U32 width, U32 count) : mTex
|
|||
GLint components = GL_RGB;
|
||||
if (mImage->getComponents() == 4)
|
||||
components = GL_RGBA;
|
||||
GLint format = GL_RGB;
|
||||
// GLint format = GL_RGB; // <FS:Beq/> unused
|
||||
|
||||
// Handle different resolutions by scaling the image
|
||||
LLPointer<LLImageRaw> src_image = new LLImageRaw(lhs.mWidth, lhs.mWidth, lhs.mImage->getComponents());
|
||||
|
|
|
|||
|
|
@ -316,11 +316,7 @@ void LLAccordionCtrl::ctrlShiftVertical(LLView* panel, S32 delta)
|
|||
|
||||
//---------------------------------------------------------------------------------
|
||||
|
||||
// <FS:ND> If adding a lot of controls rapidly, calling arrange will cost a lot of times, as it's running through n! controls.
|
||||
// In that case we can avvoid calling arrange over and over and just call it once when finished.
|
||||
//void LLAccordionCtrl::addCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab)
|
||||
void LLAccordionCtrl::addCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab, bool aArrange)
|
||||
// </FS:ND>
|
||||
void LLAccordionCtrl::addCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab)
|
||||
{
|
||||
if (!accordion_tab)
|
||||
return;
|
||||
|
|
@ -329,14 +325,7 @@ void LLAccordionCtrl::addCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab, bool
|
|||
mAccordionTabs.push_back(accordion_tab);
|
||||
|
||||
accordion_tab->setDropDownStateChangedCallback( boost::bind(&LLAccordionCtrl::onCollapseCtrlCloseOpen, this, (S16)(mAccordionTabs.size() - 1)) );
|
||||
|
||||
// <FS:ND> If adding a lot of controls rapidly, calling arrange will cost a lot of times, as it's running through n! controls.
|
||||
// In that case we can avvoid calling arrange over and over and just call it once when finished.
|
||||
|
||||
// arrange();
|
||||
if( aArrange )
|
||||
arrange();
|
||||
// </FS:ND>
|
||||
arrange();
|
||||
}
|
||||
|
||||
void LLAccordionCtrl::removeCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab)
|
||||
|
|
|
|||
|
|
@ -103,11 +103,7 @@ public:
|
|||
// Call reshape after changing splitter's size
|
||||
virtual void reshape(S32 width, S32 height, bool called_from_parent = true);
|
||||
|
||||
// <FS:ND> If adding a lot of controls rapidly, calling arrange will cost a lot of times, as it's running through n! controls.
|
||||
// In that case we can avvoid calling arrange over and over and just call it once when finished.
|
||||
// void addCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab);
|
||||
void addCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab, bool aArrange = true /*Standard is true as to not mess with old code all over the place*/ );
|
||||
// </FS:ND>
|
||||
void addCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab);
|
||||
void removeCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab);
|
||||
void arrange();
|
||||
|
||||
|
|
|
|||
|
|
@ -44,3 +44,11 @@ void LLFilterEditor::handleKeystroke()
|
|||
// Commit on every keystroke.
|
||||
onCommit();
|
||||
}
|
||||
|
||||
// <FS:TJ> Allow any UICtrl to override the transparency with a callback
|
||||
void LLFilterEditor::setTransparencyOverrideCallback(boost::function<F32(ETypeTransparency, F32)> cb)
|
||||
{
|
||||
// Simply setting it on the LLFilterEditor object doesn't work
|
||||
mSearchEditor->setTransparencyOverrideCallback(cb);
|
||||
}
|
||||
// </FS:TJ>
|
||||
|
|
|
|||
|
|
@ -45,6 +45,10 @@ public:
|
|||
{};
|
||||
virtual ~LLFilterEditor() {}
|
||||
|
||||
// <FS:TJ> Allow any UICtrl to override the transparency with a callback
|
||||
void setTransparencyOverrideCallback(boost::function<F32(ETypeTransparency, F32)> cb) override;
|
||||
// </FS:TJ>
|
||||
|
||||
protected:
|
||||
LLFilterEditor(const Params&);
|
||||
friend class LLUICtrlFactory;
|
||||
|
|
|
|||
|
|
@ -378,7 +378,7 @@ protected:
|
|||
virtual bool hasParent() override { return mParent != NULL; }
|
||||
|
||||
// <FS:ND/>
|
||||
virtual LLFolderViewModelItem* getParent() const { return mParent; }
|
||||
virtual LLFolderViewModelItem* getParent() const override { return mParent; }
|
||||
|
||||
S32 mSortVersion;
|
||||
bool mPassedFilter;
|
||||
|
|
|
|||
|
|
@ -1086,6 +1086,13 @@ F32 LLUICtrl::getCurrentTransparency()
|
|||
|
||||
}
|
||||
|
||||
// <FS:TJ> Allow any UICtrl to override the transparency with a callback
|
||||
if (mTransparencyOverrideCallback)
|
||||
{
|
||||
return mTransparencyOverrideCallback(mTransparencyType, alpha);
|
||||
}
|
||||
// </FS:TJ>
|
||||
|
||||
return alpha;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -238,6 +238,11 @@ public:
|
|||
void setTransparencyType(ETypeTransparency type);
|
||||
ETypeTransparency getTransparencyType() const {return mTransparencyType;}
|
||||
|
||||
// <FS:TJ> Allow any UICtrl to override the transparency with a callback
|
||||
boost::function<F32(ETypeTransparency, F32)> mTransparencyOverrideCallback;
|
||||
virtual void setTransparencyOverrideCallback(boost::function<F32(ETypeTransparency, F32)> cb) { mTransparencyOverrideCallback = cb; }
|
||||
// </FS:TJ>
|
||||
|
||||
bool focusNextItem(bool text_entry_only);
|
||||
bool focusPrevItem(bool text_entry_only);
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
7.2.1
|
||||
7.2.2
|
||||
|
|
|
|||
|
|
@ -18420,6 +18420,17 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>fsregioncornerbeacons</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Show beacons at region corners to help avoid region boundary disconnects</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>renderhighlights</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -23992,6 +24003,17 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSRestoreOpenIMs</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Restore open IM windows from the previous session on startup.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSUseBuiltInHistory</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -26949,5 +26971,51 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSIMOpacity</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Opacity of the IM floater</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>1.0</real>
|
||||
</map>
|
||||
<key>FSImActiveOpacityOverride</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When enabled, uses the Active Opacity value when IM window is focused</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSDisableNeighbourRegionConnections</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Do not connect to neighbouring regions, only to the current region (limits region crossing) - experimental</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSLargeOutfitsWarningInThisSession</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Internal; Suppresses the 'too many outfits' warning (does not persist across sessions)</string>
|
||||
<key>HideFromEditor</key>
|
||||
<integer>1</integer>
|
||||
<key>Persist</key>
|
||||
<integer>0</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
|
|||
|
|
@ -876,6 +876,18 @@
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSLastOpenIMs</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>List of IM session IDs that were open when the viewer was last closed</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>LLSD</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
</array>
|
||||
</map>
|
||||
<key>FSKeywordCaseSensitive</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -131,6 +131,9 @@ bool FSFloaterContacts::postBuild()
|
|||
mFriendsCountTb->setTextArg("COUNT", llformat("%d", mFriendsList->getItemCount()));
|
||||
mFriendFilter = mFriendsTab->getChild<LLFilterEditor>("friend_filter_input");
|
||||
mFriendFilter->setCommitCallback(boost::bind(&FSFloaterContacts::onFriendFilterEdit, this, _2));
|
||||
// <FS:TJ> [FIRE-35804] Allow the IM floater to have separate transparency
|
||||
mFriendFilter->setTransparencyOverrideCallback(boost::bind(&FSFloaterContacts::onGetFilterOpacityCallback, this, _1, _2));
|
||||
// </FS:TJ>
|
||||
|
||||
mGroupsTab = getChild<LLPanel>(GROUP_TAB_NAME);
|
||||
mGroupList = mGroupsTab->getChild<LLGroupList>("group_list");
|
||||
|
|
@ -163,6 +166,9 @@ bool FSFloaterContacts::postBuild()
|
|||
mGroupssCountTb = mGroupsTab->getChild<LLTextBox>("groupcount");
|
||||
mGroupFilter = mGroupsTab->getChild<LLFilterEditor>("group_filter_input");
|
||||
mGroupFilter->setCommitCallback(boost::bind(&FSFloaterContacts::onGroupFilterEdit, this, _2));
|
||||
// <FS:TJ> [FIRE-35804] Allow the IM floater to have separate transparency
|
||||
mGroupFilter->setTransparencyOverrideCallback(boost::bind(&FSFloaterContacts::onGetFilterOpacityCallback, this, _1, _2));
|
||||
// </FS:TJ>
|
||||
|
||||
mRlvBehaviorCallbackConnection = gRlvHandler.setBehaviourCallback(boost::bind(&FSFloaterContacts::updateRlvRestrictions, this, _1));
|
||||
|
||||
|
|
@ -1345,4 +1351,19 @@ void FSFloaterContacts::onGroupFilterEdit(const std::string& search_string)
|
|||
{
|
||||
mGroupList->setNameFilter(search_string);
|
||||
}
|
||||
|
||||
// <FS:TJ> [FIRE-35804] Allow the IM floater to have separate transparency
|
||||
// This is specifically for making the filter editors such as mFriendFilter and mGroupFilter always active opacity when the IM floater is focused
|
||||
// Otherwise if they aren't active, it will use either the IM opacity, or inactive opacity, whatever is smaller
|
||||
F32 FSFloaterContacts::onGetFilterOpacityCallback(ETypeTransparency type, F32 alpha)
|
||||
{
|
||||
static LLCachedControl<F32> im_opacity(gSavedSettings, "FSIMOpacity", 1.0f);
|
||||
if (type != TT_ACTIVE)
|
||||
{
|
||||
return llmin(im_opacity, alpha);
|
||||
}
|
||||
|
||||
return alpha;
|
||||
}
|
||||
// </FS:TJ>
|
||||
// EOF
|
||||
|
|
|
|||
|
|
@ -70,6 +70,10 @@ public:
|
|||
void onDisplayNameChanged();
|
||||
void resetFriendFilter();
|
||||
|
||||
// <FS:TJ> [FIRE-35804] Allow the IM floater to have separate transparency
|
||||
F32 onGetFilterOpacityCallback(ETypeTransparency type, F32 alpha);
|
||||
// </FS:TJ>
|
||||
|
||||
private:
|
||||
typedef std::vector<LLScrollListItem*> listitem_vec_t;
|
||||
|
||||
|
|
|
|||
|
|
@ -1010,6 +1010,9 @@ bool FSFloaterIM::postBuild()
|
|||
mInputEditor->setFont(LLViewerChat::getChatFont());
|
||||
mInputEditor->enableSingleLineMode(gSavedSettings.getBOOL("FSUseSingleLineChatEntry"));
|
||||
mInputEditor->setCommitCallback(boost::bind(&FSFloaterIM::sendMsgFromInputEditor, this, CHAT_TYPE_NORMAL));
|
||||
// <FS:TJ> [FIRE-35804] Allow the IM floater to have separate transparency
|
||||
mInputEditor->setTransparencyOverrideCallback(boost::bind(&FSFloaterIM::onGetChatEditorOpacityCallback, this, _1, _2));
|
||||
// </FS:TJ>
|
||||
|
||||
mEmojiRecentPanelToggleBtn = getChild<LLButton>("emoji_recent_panel_toggle_btn");
|
||||
mEmojiRecentPanelToggleBtn->setClickedCallback([this](LLUICtrl*, const LLSD&) { onEmojiRecentPanelToggleBtnClicked(); });
|
||||
|
|
@ -2650,3 +2653,18 @@ uuid_vec_t FSFloaterIM::getSessionParticipants() const
|
|||
|
||||
return mControlPanel->getParticipants();
|
||||
}
|
||||
|
||||
// <FS:TJ> [FIRE-35804] Allow the IM floater to have separate transparency
|
||||
// This is specifically for making the text editors such as chat_editor always active opacity when the IM floater is focused
|
||||
// Otherwise if they aren't active, it will use either the IM opacity, or inactive opacity, whatever is smaller
|
||||
F32 FSFloaterIM::onGetChatEditorOpacityCallback(ETypeTransparency type, F32 alpha)
|
||||
{
|
||||
static LLCachedControl<F32> im_opacity(gSavedSettings, "FSIMOpacity", 1.0f);
|
||||
if (type != TT_ACTIVE)
|
||||
{
|
||||
return llmin(im_opacity, alpha);
|
||||
}
|
||||
|
||||
return alpha;
|
||||
}
|
||||
// </FS:TJ>
|
||||
|
|
|
|||
|
|
@ -164,6 +164,10 @@ public:
|
|||
|
||||
uuid_vec_t getSessionParticipants() const;
|
||||
|
||||
// <FS:TJ> [FIRE-35804] Allow the IM floater to have separate transparency
|
||||
F32 onGetChatEditorOpacityCallback(ETypeTransparency type, F32 alpha);
|
||||
// </FS:TJ>
|
||||
|
||||
protected:
|
||||
/* virtual */
|
||||
void onClickCloseBtn(bool app_quitting = false);
|
||||
|
|
|
|||
|
|
@ -42,6 +42,11 @@
|
|||
#include "llurlregistry.h"
|
||||
#include "llvoiceclient.h"
|
||||
|
||||
// <FS:PP> Restore open IMs from previous session
|
||||
#include "llconversationlog.h"
|
||||
#include "llimview.h"
|
||||
// </FS:PP>
|
||||
|
||||
constexpr F32 VOICE_STATUS_UPDATE_INTERVAL = 1.0f;
|
||||
|
||||
//
|
||||
|
|
@ -173,6 +178,7 @@ void FSFloaterIMContainer::onClose(bool app_quitting)
|
|||
{
|
||||
if (app_quitting)
|
||||
{
|
||||
saveOpenIMs(); // <FS:PP> Save open IM sessions before closing
|
||||
for (S32 i = 0; i < mTabContainer->getTabCount(); ++i)
|
||||
{
|
||||
FSFloaterIM* floater = dynamic_cast<FSFloaterIM*>(mTabContainer->getPanelByIndex(i));
|
||||
|
|
@ -373,6 +379,22 @@ FSFloaterIMContainer* FSFloaterIMContainer::getInstance()
|
|||
return LLFloaterReg::getTypedInstance<FSFloaterIMContainer>("fs_im_container");
|
||||
}
|
||||
|
||||
// <FS:TJ> [FIRE-35804] Allow the IM floater to have separate transparency
|
||||
F32 FSFloaterIMContainer::getCurrentTransparency()
|
||||
{
|
||||
static LLCachedControl<F32> im_opacity(gSavedSettings, "FSIMOpacity", 1.0f);
|
||||
static LLCachedControl<bool> im_active_opacity_override(gSavedSettings, "FSImActiveOpacityOverride", false);
|
||||
|
||||
F32 floater_opacity = LLUICtrl::getCurrentTransparency();
|
||||
if (im_active_opacity_override && getTransparencyType() == TT_ACTIVE)
|
||||
{
|
||||
return floater_opacity;
|
||||
}
|
||||
|
||||
return llmin(im_opacity(), floater_opacity);
|
||||
}
|
||||
// </FS:TJ>
|
||||
|
||||
void FSFloaterIMContainer::setVisible(bool b)
|
||||
{
|
||||
LLMultiFloater::setVisible(b);
|
||||
|
|
@ -600,4 +622,74 @@ void FSFloaterIMContainer::startFlashingTab(LLFloater* floater, const std::strin
|
|||
}
|
||||
LLMultiFloater::setFloaterFlashing(floater, true, is_alt_flashing);
|
||||
}
|
||||
|
||||
// <FS:PP> Restore open IMs from previous session
|
||||
void FSFloaterIMContainer::saveOpenIMs()
|
||||
{
|
||||
if (!gSavedSettings.getBOOL("FSRestoreOpenIMs"))
|
||||
{
|
||||
gSavedPerAccountSettings.setLLSD("FSLastOpenIMs", LLSD::emptyArray());
|
||||
return;
|
||||
}
|
||||
|
||||
LLSD openIMs = LLSD::emptyArray();
|
||||
for (S32 i = 0; i < mTabContainer->getTabCount(); ++i)
|
||||
{
|
||||
FSFloaterIM* floater = dynamic_cast<FSFloaterIM*>(mTabContainer->getPanelByIndex(i));
|
||||
if (floater)
|
||||
{
|
||||
LLUUID session_id = floater->getKey();
|
||||
if (session_id.notNull())
|
||||
{
|
||||
LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(session_id);
|
||||
if (session && session->mSessionType == LLIMModel::LLIMSession::P2P_SESSION)
|
||||
{
|
||||
LLSD session_data = LLSD::emptyMap();
|
||||
session_data["other_participant_id"] = session->mOtherParticipantID;
|
||||
session_data["session_name"] = session->mName;
|
||||
openIMs.append(session_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gSavedPerAccountSettings.setLLSD("FSLastOpenIMs", openIMs);
|
||||
}
|
||||
|
||||
void FSFloaterIMContainer::restoreOpenIMs()
|
||||
{
|
||||
LLSD openIMs = gSavedPerAccountSettings.getLLSD("FSLastOpenIMs");
|
||||
if (!openIMs.isArray() || openIMs.size() == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (LLSD::array_const_iterator it = openIMs.beginArray(); it != openIMs.endArray(); ++it)
|
||||
{
|
||||
LLSD session_data = *it;
|
||||
if (session_data.isMap())
|
||||
{
|
||||
LLUUID other_participant_id = session_data["other_participant_id"].asUUID();
|
||||
std::string session_name = session_data["session_name"].asString();
|
||||
if (other_participant_id.notNull())
|
||||
{
|
||||
LLUUID new_session_id;
|
||||
new_session_id = LLIMMgr::getInstance()->addSession(session_name, IM_NOTHING_SPECIAL, other_participant_id);
|
||||
if (new_session_id.notNull())
|
||||
{
|
||||
FSFloaterIM* im_floater = FSFloaterIM::show(new_session_id);
|
||||
if (im_floater)
|
||||
{
|
||||
if (im_floater->getHost() != this)
|
||||
{
|
||||
addFloater(im_floater, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// </FS:PP>
|
||||
|
||||
// EOF
|
||||
|
|
|
|||
|
|
@ -41,17 +41,16 @@ public:
|
|||
FSFloaterIMContainer(const LLSD& seed);
|
||||
virtual ~FSFloaterIMContainer();
|
||||
|
||||
/*virtual*/ bool postBuild();
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
/*virtual*/ void onClose(bool app_quitting);
|
||||
bool postBuild() override;
|
||||
void onOpen(const LLSD& key) override;
|
||||
void onClose(bool app_quitting) override;
|
||||
void onCloseFloater(LLUUID& id);
|
||||
/*virtual*/ void draw();
|
||||
|
||||
/*virtual*/ void addFloater(LLFloater* floaterp,
|
||||
bool select_added_floater,
|
||||
LLTabContainer::eInsertionPoint insertion_point = LLTabContainer::END);
|
||||
void draw() override;
|
||||
void addFloater(LLFloater* floaterp,
|
||||
bool select_added_floater,
|
||||
LLTabContainer::eInsertionPoint insertion_point = LLTabContainer::END) override;
|
||||
// [SL:KB] - Patch: Chat-NearbyChatBar | Checked: 2011-12-11 (Catznip-3.2.0d) | Added: Catznip-3.2.0d
|
||||
/*virtual*/ void removeFloater(LLFloater* floaterp);
|
||||
void removeFloater(LLFloater* floaterp) override;
|
||||
// [/SL:KB]
|
||||
bool hasFloater(LLFloater* floaterp);
|
||||
|
||||
|
|
@ -60,26 +59,33 @@ public:
|
|||
static FSFloaterIMContainer* findInstance();
|
||||
static FSFloaterIMContainer* getInstance();
|
||||
|
||||
virtual void setVisible(bool b);
|
||||
/*virtual*/ void setMinimized(bool b);
|
||||
F32 getCurrentTransparency() override;
|
||||
|
||||
void onNewMessageReceived(const LLSD& msg); // public so nearbychat can call it directly. TODO: handle via callback. -AO
|
||||
void setVisible(bool b) override;
|
||||
void setMinimized(bool b) override;
|
||||
|
||||
virtual void sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id, bool has_offline_msg);
|
||||
virtual void sessionActivated(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id) {};
|
||||
virtual void sessionVoiceOrIMStarted(const LLUUID& session_id) {};
|
||||
virtual void sessionRemoved(const LLUUID& session_id);
|
||||
virtual void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id);
|
||||
void onNewMessageReceived(const LLSD& msg);
|
||||
|
||||
void sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id, bool has_offline_msg) override;
|
||||
void sessionActivated(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id) override {};
|
||||
void sessionVoiceOrIMStarted(const LLUUID& session_id) override {};
|
||||
void sessionRemoved(const LLUUID& session_id) override;
|
||||
void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id) override;
|
||||
|
||||
static void reloadEmptyFloaters();
|
||||
void initTabs();
|
||||
|
||||
void addFlashingSession(const LLUUID& session_id);
|
||||
|
||||
void tabOpen(LLFloater* opened_floater, bool from_click);
|
||||
void tabOpen(LLFloater* opened_floater, bool from_click) override;
|
||||
|
||||
void startFlashingTab(LLFloater* floater, const std::string& message);
|
||||
|
||||
// <FS:PP> Restore open IMs from previous session
|
||||
void saveOpenIMs();
|
||||
void restoreOpenIMs();
|
||||
// </FS:PP>
|
||||
|
||||
private:
|
||||
enum eVoiceState
|
||||
{
|
||||
|
|
|
|||
|
|
@ -148,6 +148,9 @@ bool FSFloaterNearbyChat::postBuild()
|
|||
mInputEditor->setFont(LLViewerChat::getChatFont());
|
||||
mInputEditor->setLabel(getString("chatbox_label"));
|
||||
mInputEditor->enableSingleLineMode(gSavedSettings.getBOOL("FSUseSingleLineChatEntry"));
|
||||
// <FS:TJ> [FIRE-35804] Allow the IM floater to have separate transparency
|
||||
mInputEditor->setTransparencyOverrideCallback(boost::bind(&FSFloaterNearbyChat::onGetChatBoxOpacityCallback, this, _1, _2));
|
||||
// </FS:TJ>
|
||||
|
||||
mChatLayoutPanel = getChild<LLLayoutPanel>("chat_layout_panel");
|
||||
mInputPanels = getChild<LLLayoutStack>("input_panels");
|
||||
|
|
@ -1107,3 +1110,18 @@ uuid_vec_t FSFloaterNearbyChat::getSessionParticipants() const
|
|||
|
||||
return avatarIds;
|
||||
}
|
||||
|
||||
// <FS:TJ> [FIRE-35804] Allow the IM floater to have separate transparency
|
||||
// This is specifically for making the text editors such as chat_editor always active opacity when the IM floater is focused
|
||||
// Otherwise if they aren't active, it will use either the IM opacity, or inactive opacity, whatever is smaller
|
||||
F32 FSFloaterNearbyChat::onGetChatBoxOpacityCallback(ETypeTransparency type, F32 alpha)
|
||||
{
|
||||
static LLCachedControl<F32> im_opacity(gSavedSettings, "FSIMOpacity", 1.0f);
|
||||
if (type != TT_ACTIVE)
|
||||
{
|
||||
return llmin(im_opacity, alpha);
|
||||
}
|
||||
|
||||
return alpha;
|
||||
}
|
||||
// </FS:TJ>
|
||||
|
|
|
|||
|
|
@ -104,6 +104,10 @@ public:
|
|||
|
||||
uuid_vec_t getSessionParticipants() const;
|
||||
|
||||
// <FS:TJ> [FIRE-35804] Allow the IM floater to have separate transparency
|
||||
F32 onGetChatBoxOpacityCallback(ETypeTransparency type, F32 alpha);
|
||||
// </FS:TJ>
|
||||
|
||||
protected:
|
||||
void onChatBoxKeystroke();
|
||||
void onChatBoxFocusLost();
|
||||
|
|
|
|||
|
|
@ -1122,10 +1122,10 @@ LLMaterialPtr FSPanelFace::createDefaultMaterial(LLMaterialPtr current_material)
|
|||
|
||||
void FSPanelFace::onVisibilityChange(bool new_visibility)
|
||||
{
|
||||
if (new_visibility)
|
||||
/* if (new_visibility)
|
||||
{
|
||||
gAgent.showLatestFeatureNotification("gltf");
|
||||
}
|
||||
} */
|
||||
LLPanel::onVisibilityChange(new_visibility);
|
||||
|
||||
// Since we allow both PBR and BP textures to be applied at the same time,
|
||||
|
|
|
|||
|
|
@ -719,6 +719,13 @@ void LLAgent::showLatestFeatureNotification(const std::string key)
|
|||
flag = 4;
|
||||
}
|
||||
|
||||
// <FS:PP> FIRE-35931 Guard against empty "new feature" popup
|
||||
if (flag == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
// </FS:PP>
|
||||
|
||||
if ((flags & flag) == 0)
|
||||
{
|
||||
// Need to open on top even if called from onOpen,
|
||||
|
|
|
|||
|
|
@ -5322,7 +5322,7 @@ bool wear_category(const LLSD& query_map, bool append)
|
|||
{
|
||||
if (LLViewerInventoryCategory* cat = gInventory.getCategory(folder_uuid))
|
||||
{
|
||||
if (bool is_library = gInventory.isObjectDescendentOf(folder_uuid, gInventory.getRootFolderID()))
|
||||
if (gInventory.isObjectDescendentOf(folder_uuid, gInventory.getRootFolderID())) // <FS:Beq/> set and unused
|
||||
{
|
||||
LLPointer<LLInventoryCategory> new_category = new LLInventoryCategory(folder_uuid, LLUUID::null, LLFolderType::FT_CLOTHING, "Quick Appearance");
|
||||
LLAppearanceMgr::getInstance()->wearInventoryCategory(new_category, true, append);
|
||||
|
|
|
|||
|
|
@ -166,8 +166,8 @@ void LLDrawPoolWater::renderPostDeferred(S32 pass)
|
|||
//bool has_normal_mips = gSavedSettings.getBOOL("RenderWaterMipNormal");
|
||||
bool has_normal_mips = mRenderWaterMipNormal;
|
||||
bool underwater = LLViewerCamera::getInstance()->cameraUnderWater();
|
||||
LLColor4 fog_color = LLColor4(pwater->getWaterFogColor(), 0.f);
|
||||
LLColor3 fog_color_linear = linearColor3(fog_color);
|
||||
// LLColor4 fog_color = LLColor4(pwater->getWaterFogColor(), 0.f); // <FS:Beq/> set but unused
|
||||
// LLColor3 fog_color_linear = linearColor3(fog_color); // <FS:Beq/> set but unused
|
||||
|
||||
if (sun_up)
|
||||
{
|
||||
|
|
@ -244,11 +244,12 @@ void LLDrawPoolWater::renderPostDeferred(S32 pass)
|
|||
F32 fog_density = pwater->getModifiedWaterFogDensity(underwater);
|
||||
|
||||
shader->bindTexture(LLShaderMgr::WATER_SCREENTEX, &gPipeline.mWaterDis);
|
||||
|
||||
if (mShaderLevel == 1)
|
||||
{
|
||||
fog_color.mV[VALPHA] = (F32)(log(fog_density) / log(2));
|
||||
}
|
||||
// <FS:Beq> set but unused "fog_color"
|
||||
// if (mShaderLevel == 1)
|
||||
// {
|
||||
// fog_color.mV[VALPHA] = (F32)(log(fog_density) / log(2));
|
||||
// }
|
||||
// </FS:Beq>
|
||||
|
||||
F32 water_height = environment.getWaterHeight();
|
||||
F32 camera_height = LLViewerCamera::getInstance()->getOrigin().mV[2];
|
||||
|
|
|
|||
|
|
@ -597,7 +597,7 @@ void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color)
|
|||
// on faces with GLTF textures we use a spectal vertex buffer with other transforms
|
||||
if (const LLTextureEntry* te = getTextureEntry())
|
||||
{
|
||||
if (LLGLTFMaterial* gltf_mat = te->getGLTFRenderMaterial())
|
||||
if (te->getGLTFRenderMaterial())
|
||||
{
|
||||
vertex_buffer = mVertexBufferGLTF.get();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -754,6 +754,10 @@ void LLFloaterCamera::updateItemsSelection()
|
|||
getChild<LLPanelCameraItem>("group_view")->setValue(argument);
|
||||
argument["selected"] = (preset == CAMERA_PRESET_FRONT_VIEW) && !sFreeCamera;
|
||||
getChild<LLPanelCameraItem>("front_view")->setValue(argument);
|
||||
// <FS:PP> Third Person Perspective camera
|
||||
argument["selected"] = (preset == CAMERA_PRESET_TPP_VIEW) && !sFreeCamera;
|
||||
getChild<LLPanelCameraItem>("tpp_view")->setValue(argument);
|
||||
// </FS:PP>
|
||||
argument["selected"] = gAgentCamera.getCameraMode() == CAMERA_MODE_MOUSELOOK;
|
||||
getChild<LLPanelCameraItem>("mouselook_view")->setValue(argument);
|
||||
argument["selected"] = mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA;
|
||||
|
|
|
|||
|
|
@ -299,7 +299,7 @@ void LLFloaterGLTFAssetEditor::loadFromSelection()
|
|||
setTitle(node->mName);
|
||||
}
|
||||
|
||||
LLUIColor item_color = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE);
|
||||
// LLUIColor item_color = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE); // <FS:Beq/> set but unused
|
||||
for (S32 i = 0; i < mAsset->mScenes.size(); i++)
|
||||
{
|
||||
LL::GLTF::Scene& scene = mAsset->mScenes[i];
|
||||
|
|
|
|||
|
|
@ -459,7 +459,7 @@ void LLFloaterImagePreview::onBtnOK()
|
|||
void LLFloaterImagePreview::draw()
|
||||
{
|
||||
LLFloater::draw();
|
||||
LLRect r = getRect();
|
||||
// LLRect r = getRect(); <FS:Beq/> set but unused
|
||||
|
||||
if (mRawImagep.notNull())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1978,7 +1978,7 @@ void LLFloaterPreference::changeExternalEditorPath(const std::vector<std::string
|
|||
if (NULL != bundleInfoDict)
|
||||
{
|
||||
CFStringRef executable_cfstr = (CFStringRef)CFDictionaryGetValue(bundleInfoDict, CFSTR("CFBundleExecutable")); // get the name of the actual executable (e.g. TextEdit or firefox-bin)
|
||||
int max_file_length = 256; // (max file name length is 255 in OSX)
|
||||
const int max_file_length = 256; // <FS:Beq/> another new complaint from clang
|
||||
char executable_buf[max_file_length];
|
||||
if (CFStringGetCString(executable_cfstr, executable_buf, max_file_length, kCFStringEncodingMacRoman)) // convert CFStringRef to char*
|
||||
{
|
||||
|
|
|
|||
|
|
@ -53,6 +53,15 @@ LLHUDEffectResetSkeleton::~LLHUDEffectResetSkeleton()
|
|||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// packData()
|
||||
//-----------------------------------------------------------------------------
|
||||
void LLHUDEffectResetSkeleton::render()
|
||||
{
|
||||
// HUDEffectResetSkeleton is a fake effect meant to reset skeleton only.
|
||||
// Just wait for an update() call to do its work and then die.
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// packData()
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -38,20 +38,21 @@ class LLHUDEffectResetSkeleton final : public LLHUDEffect
|
|||
public:
|
||||
friend class LLHUDObject;
|
||||
|
||||
/*virtual*/ void markDead();
|
||||
/*virtual*/ void setSourceObject(LLViewerObject* objectp);
|
||||
/*virtual*/ void markDead() override;
|
||||
/*virtual*/ void setSourceObject(LLViewerObject* objectp) override;
|
||||
|
||||
void setTargetObject(LLViewerObject *objp);
|
||||
void setTargetObject(LLViewerObject *objp) override;
|
||||
void setResetAnimations(bool enable){ mResetAnimations = enable; };
|
||||
|
||||
protected:
|
||||
LLHUDEffectResetSkeleton(const U8 type);
|
||||
~LLHUDEffectResetSkeleton();
|
||||
|
||||
/*virtual*/ void packData(LLMessageSystem *mesgsys);
|
||||
/*virtual*/ void unpackData(LLMessageSystem *mesgsys, S32 blocknum);
|
||||
void render() override;
|
||||
void packData(LLMessageSystem *mesgsys) override;
|
||||
void unpackData(LLMessageSystem *mesgsys, S32 blocknum) override;
|
||||
|
||||
void update();
|
||||
void update() override;
|
||||
private:
|
||||
bool mResetAnimations;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -2417,6 +2417,7 @@ EMeshProcessingResult LLMeshRepoThread::headerReceived(const LLVolumeParams& mes
|
|||
}
|
||||
if (request_skin)
|
||||
{
|
||||
LLMutexLock lock(mMutex);
|
||||
mSkinRequests.push_back(UUIDBasedRequest(mesh_id));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -220,11 +220,7 @@ void LLOutfitsList::updateAddedCategory(LLUUID cat_id)
|
|||
|
||||
// *TODO: LLUICtrlFactory::defaultBuilder does not use "display_children" from xml. Should be investigated.
|
||||
tab->setDisplayChildren(false);
|
||||
|
||||
// <FS:ND> Calling this when there's a lot of outfits causes horrible perfomance and disconnects, due to arrange eating so many cpu cycles.
|
||||
//mAccordion->addCollapsibleCtrl(tab);
|
||||
mAccordion->addCollapsibleCtrl(tab, false);
|
||||
// </FS:ND>
|
||||
mAccordion->addCollapsibleCtrl(tab);
|
||||
|
||||
// Start observing the new outfit category.
|
||||
LLWearableItemsList* list = tab->getChild<LLWearableItemsList>("wearable_items_list");
|
||||
|
|
@ -1120,8 +1116,21 @@ void LLOutfitListBase::refreshList(const LLUUID& category_id)
|
|||
}
|
||||
|
||||
// <FS:ND> FIRE-6958/VWR-2862; Handle large amounts of outfits, write a least a warning into the logs.
|
||||
if (mRefreshListState.Added.size() > 128)
|
||||
LL_WARNS() << "Large amount of outfits found: " << mRefreshListState.Added.size() << " this may cause hangs and disconnects" << LL_ENDL;
|
||||
S32 currentOutfitsAmount = (S32)mRefreshListState.Added.size();
|
||||
constexpr S32 maxSuggestedOutfits = 200;
|
||||
if (currentOutfitsAmount > maxSuggestedOutfits)
|
||||
{
|
||||
LL_WARNS() << "Large amount of outfits found: " << currentOutfitsAmount << " this may cause hangs and disconnects" << LL_ENDL;
|
||||
static LLCachedControl<bool> fsLargeOutfitsWarningInThisSession(gSavedSettings, "FSLargeOutfitsWarningInThisSession");
|
||||
if (!fsLargeOutfitsWarningInThisSession)
|
||||
{
|
||||
gSavedSettings.setBOOL("FSLargeOutfitsWarningInThisSession", true);
|
||||
LLSD args;
|
||||
args["AMOUNT"] = currentOutfitsAmount;
|
||||
args["MAX"] = maxSuggestedOutfits;
|
||||
LLNotificationsUtil::add("FSLargeOutfitsWarningInThisSession", args);
|
||||
}
|
||||
}
|
||||
// </FS:ND>
|
||||
|
||||
// <FS:Ansariel> FIRE-12939: Add outfit count to outfits list
|
||||
|
|
@ -1157,7 +1166,18 @@ void LLOutfitListBase::onIdleRefreshList()
|
|||
return;
|
||||
}
|
||||
|
||||
const F64 MAX_TIME = 0.05f;
|
||||
// <FS:PP> Scale MAX_TIME with FPS to avoid overloading the viewer with function calls at low frame rates
|
||||
// const F64 MAX_TIME = 0.05f;
|
||||
F64 MAX_TIME = 0.05f;
|
||||
constexpr F64 min_time = 0.001f;
|
||||
constexpr F64 threshold_fps = 30.0;
|
||||
const auto current_fps = LLTrace::get_frame_recording().getPeriodMedianPerSec(LLStatViewer::FPS, 1);
|
||||
if (current_fps < threshold_fps)
|
||||
{
|
||||
MAX_TIME = min_time + (current_fps / threshold_fps) * (MAX_TIME - min_time);
|
||||
}
|
||||
// </FS:PP>
|
||||
|
||||
F64 curent_time = LLTimer::getTotalSeconds();
|
||||
const F64 end_time = curent_time + MAX_TIME;
|
||||
|
||||
|
|
@ -1174,9 +1194,6 @@ void LLOutfitListBase::onIdleRefreshList()
|
|||
mRefreshListState.Added.clear();
|
||||
mRefreshListState.AddedIterator = mRefreshListState.Added.end();
|
||||
|
||||
// <FS:ND> We called mAccordion->addCollapsibleCtrl with false as second paramter and did not let it arrange itself each time. Do this here after all is said and done.
|
||||
arrange();
|
||||
|
||||
// Handle removed tabs.
|
||||
while (mRefreshListState.RemovedIterator < mRefreshListState.Removed.end())
|
||||
{
|
||||
|
|
@ -1200,8 +1217,8 @@ void LLOutfitListBase::onIdleRefreshList()
|
|||
|
||||
// Links aren't supposed to be allowed here, check only cats
|
||||
if (cat)
|
||||
{
|
||||
std::string name = cat->getName();
|
||||
{
|
||||
std::string name = cat->getName();
|
||||
updateChangedCategoryName(cat, name);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1100,7 +1100,7 @@ void LLPanelEnvironmentInfo::onEnvironmentChanged(LLEnvironment::EnvSelection_t
|
|||
else if ((env == LLEnvironment::ENV_PARCEL)
|
||||
&& (getParcelId() == LLViewerParcelMgr::instance().getAgentParcelId()))
|
||||
{
|
||||
if (LLParcel* parcel = getParcel())
|
||||
if (getParcel()) // <FS:Beq/> more set-but-unused
|
||||
{
|
||||
// first for parcel own settings, second is for case when parcel uses region settings
|
||||
if (mCurEnvVersion < new_version
|
||||
|
|
|
|||
|
|
@ -365,6 +365,12 @@ void LLSidepanelAppearance::toggleMyOutfitsPanel(bool visible, const std::string
|
|||
mFilterEditor->setVisible(visible);
|
||||
mCurrOutfitPanel->setVisible(visible);
|
||||
|
||||
// <FS:PP> FIRE-35947 Ensure the top menu buttons (gear/sort/trash) are only visible in the outfits panel
|
||||
getChildView("options_gear_btn_panel")->setVisible(visible);
|
||||
getChildView("options_sort_btn_panel")->setVisible(visible);
|
||||
getChildView("trash_btn_panel")->setVisible(visible);
|
||||
// </FS:PP>
|
||||
|
||||
if (visible)
|
||||
{
|
||||
mPanelOutfitsInventory->onOpen(LLSD());
|
||||
|
|
|
|||
|
|
@ -3385,6 +3385,14 @@ bool idle_startup()
|
|||
}
|
||||
// </FS:PP>
|
||||
|
||||
// <FS:PP> Restore open IMs from previous session
|
||||
if (gSavedSettings.getBOOL("FSRestoreOpenIMs"))
|
||||
{
|
||||
FSFloaterIMContainer* floater_imcontainer = FSFloaterIMContainer::getInstance();
|
||||
floater_imcontainer->restoreOpenIMs();
|
||||
}
|
||||
// </FS:PP>
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -4875,6 +4883,9 @@ bool process_login_success_response(U32 &first_sim_size_x, U32 &first_sim_size_y
|
|||
|
||||
//setup map of datetime strings to codes and slt & local time offset from utc
|
||||
LLStringOps::setupDatetimeInfo(pacific_daylight_time);
|
||||
// <FS:TJ> [FIRE-34775] Use PST/PDT when logged into OpenSim
|
||||
LLStringOps::setupUsingPacificTime(!LLGridManager::getInstance()->isInSecondLife());
|
||||
// </FS:TJ>
|
||||
}
|
||||
|
||||
// set up the voice configuration. Ultimately, we should pass this up as part of each voice
|
||||
|
|
|
|||
|
|
@ -1030,7 +1030,7 @@ void LLSurfacePatch::updateGL()
|
|||
F32 grids_per_patch_edge = (F32)getSurface()->getGridsPerPatchEdge();
|
||||
|
||||
LLViewerRegion *regionp = getSurface()->getRegion();
|
||||
LLVector3d origin_region = getOriginGlobal() - getSurface()->getOriginGlobal();
|
||||
// LLVector3d origin_region = getOriginGlobal() - getSurface()->getOriginGlobal(); // <FS:Beq/> set but not used
|
||||
|
||||
LLVLComposition* comp = regionp->getComposition();
|
||||
|
||||
|
|
|
|||
|
|
@ -160,9 +160,9 @@ bool LLViewerCamera::updateCameraLocation(const LLVector3 ¢er, const LLVecto
|
|||
// update pixel meter ratio using default fov, not modified one
|
||||
mPixelMeterRatio = (F32)(getViewHeightInPixels()/ (2.f*tanf(mCameraFOVDefault*0.5f)));
|
||||
// update screen pixel area
|
||||
mScreenPixelArea =(S32)((F32)getViewHeightInPixels() * ((F32)getViewHeightInPixels() * getAspect()));
|
||||
|
||||
return true;
|
||||
mScreenPixelArea =(S32)((F32)getViewHeightInPixels() * ((F32)getViewHeightInPixels() * getAspect()));
|
||||
}
|
||||
|
||||
const LLMatrix4 &LLViewerCamera::getProjection() const
|
||||
|
|
|
|||
|
|
@ -8284,7 +8284,7 @@ class LLAvatarEnableResetSkeleton : public view_listener_t
|
|||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
if (LLVOAvatar* avatar = find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()))
|
||||
if (find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject())) // <FS:Beq/> set but unused.
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
|
@ -11584,6 +11584,13 @@ class LLViewToggleBeacon : public view_listener_t
|
|||
LLPipeline::toggleRenderSoundBeacons();
|
||||
gSavedSettings.setBOOL( "soundsbeacon", LLPipeline::getRenderSoundBeacons() );
|
||||
}
|
||||
// <FS:PP> FIRE-33085 Region corner markers
|
||||
else if (beacon == "fsregioncornerbeacons")
|
||||
{
|
||||
LLPipeline::toggleRenderRegionCornerBeacons();
|
||||
gSavedSettings.setBOOL( "fsregioncornerbeacons", LLPipeline::getRenderRegionCornerBeacons() );
|
||||
}
|
||||
// </FS:PP>
|
||||
else if (beacon == "particlesbeacon")
|
||||
{
|
||||
LLPipeline::toggleRenderParticleBeacons();
|
||||
|
|
@ -11661,6 +11668,13 @@ class LLViewCheckBeaconEnabled : public view_listener_t
|
|||
new_value = gSavedSettings.getBOOL( "soundsbeacon");
|
||||
LLPipeline::setRenderSoundBeacons(new_value);
|
||||
}
|
||||
// <FS:PP> FIRE-33085 Region corner markers
|
||||
else if (beacon == "fsregioncornerbeacons")
|
||||
{
|
||||
new_value = gSavedSettings.getBOOL( "fsregioncornerbeacons");
|
||||
LLPipeline::setRenderRegionCornerBeacons(new_value);
|
||||
}
|
||||
// </FS:PP>
|
||||
else if (beacon == "particlesbeacon")
|
||||
{
|
||||
new_value = gSavedSettings.getBOOL( "particlesbeacon");
|
||||
|
|
|
|||
|
|
@ -8507,7 +8507,10 @@ void process_script_teleport_request(LLMessageSystem* msg, void**)
|
|||
<< LL_ENDL;
|
||||
|
||||
instance->trackURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]);
|
||||
if (flags & BEACON_SHOW_MAP)
|
||||
// <FS:PP> FIRE-35747 Do not ignore @showworldmap=n for llMapDestination() [RLVa v2.4.2, 2025-09-11]
|
||||
// if (flags & BEACON_SHOW_MAP)
|
||||
if (flags & BEACON_SHOW_MAP && !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWWORLDMAP))
|
||||
// </FS:PP>
|
||||
{
|
||||
bool old_auto_focus = instance->getAutoFocus();
|
||||
instance->setAutoFocus(flags & BEACON_FOCUS_MAP);
|
||||
|
|
|
|||
|
|
@ -491,6 +491,7 @@ public:
|
|||
static const std::string beacon_scripted = LLTrans::getString("BeaconScripted");
|
||||
static const std::string beacon_scripted_touch = LLTrans::getString("BeaconScriptedTouch");
|
||||
static const std::string beacon_sound = LLTrans::getString("BeaconSound");
|
||||
static const std::string beacon_region_corners = LLTrans::getString("BeaconRegionCorners"); // <FS:PP> FIRE-33085 Region corner markers
|
||||
static const std::string beacon_media = LLTrans::getString("BeaconMedia");
|
||||
static const std::string beacon_sun = LLTrans::getString("BeaconSun");
|
||||
static const std::string beacon_moon = LLTrans::getString("BeaconMoon");
|
||||
|
|
@ -920,6 +921,14 @@ public:
|
|||
ypos += y_inc;
|
||||
}
|
||||
|
||||
// <FS:PP> FIRE-33085 Region corner markers
|
||||
if (LLPipeline::getRenderRegionCornerBeacons())
|
||||
{
|
||||
addText(xpos, ypos, beacon_region_corners);
|
||||
ypos += y_inc;
|
||||
}
|
||||
// </FS:PP>
|
||||
|
||||
if (LLPipeline::getRenderScriptedBeacons())
|
||||
{
|
||||
addText(xpos, ypos, beacon_scripted);
|
||||
|
|
|
|||
|
|
@ -5942,7 +5942,7 @@ void LLVOAvatar::updateVisibility()
|
|||
|
||||
if (sDebugInvisible)
|
||||
{
|
||||
if (LLNameValue* firstname = getNVPair("FirstName"))
|
||||
if (getNVPair("FirstName"))// <FS:Beq/> Fix more Mac whining.
|
||||
{
|
||||
LL_DEBUGS("Avatar") << avString() << " updating visibility" << LL_ENDL;
|
||||
}
|
||||
|
|
@ -12052,7 +12052,7 @@ void LLVOAvatar::getAssociatedVolumes(std::vector<LLVOVolume*>& volumes)
|
|||
for (const auto& iter : mAttachmentPoints)
|
||||
{
|
||||
LLViewerJointAttachment* attachment = iter.second;
|
||||
LLViewerJointAttachment::attachedobjs_vec_t::iterator attach_end = attachment->mAttachedObjects.end();
|
||||
// LLViewerJointAttachment::attachedobjs_vec_t::iterator attach_end = attachment->mAttachedObjects.end(); // <FS:Beq/> set but not used
|
||||
|
||||
for (LLViewerObject* attached_object : attachment->mAttachedObjects)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -610,6 +610,14 @@ void LLWebRTCVoiceClient::updateNeighboringRegions()
|
|||
// add current region.
|
||||
mNeighboringRegions.insert(gAgent.getRegion()->getRegionID());
|
||||
|
||||
// <FS:PP> Do not connect to neighbouring regions
|
||||
static LLCachedControl<bool> fsDisableNeighbourRegionConnections(gSavedSettings, "FSDisableNeighbourRegionConnections");
|
||||
if (fsDisableNeighbourRegionConnections)
|
||||
{
|
||||
return;
|
||||
}
|
||||
// </FS:PP>
|
||||
|
||||
// base off of speaker position as it'll move more slowly than camera position.
|
||||
// Once we have hysteresis, we may be able to track off of speaker and camera position at 50m
|
||||
// TODO: Add hysteresis so we don't flip-flop connections to neighbors
|
||||
|
|
|
|||
|
|
@ -575,9 +575,9 @@ void FSPanelCOFWearableOutfitListItem::updateItemWeight(U32 item_weight)
|
|||
}
|
||||
|
||||
//virtual
|
||||
void FSPanelCOFWearableOutfitListItem::updateItem(const std::string& name, EItemState item_state)
|
||||
void FSPanelCOFWearableOutfitListItem::updateItem(const std::string& name, bool favorite, EItemState item_state)
|
||||
{
|
||||
LLPanelWearableOutfitItem::updateItem(name, item_state);
|
||||
LLPanelWearableOutfitItem::updateItem(name, favorite, item_state);
|
||||
mWeightCtrl->setVisible(true);
|
||||
reshapeWidgets();
|
||||
}
|
||||
|
|
@ -1204,6 +1204,15 @@ void LLWearableItemsList::ContextMenu::updateItemsVisibility(LLContextMenu* menu
|
|||
bool rlvCanRemove = !RlvActions::isRlvEnabled();
|
||||
// [/RLVa:KB]
|
||||
|
||||
// <FS:Trish> Fix for "Delete from outfit" context menu option showing in favorites window.
|
||||
bool is_outfit_menu = false;
|
||||
LLUUID outfit_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
|
||||
if (!ids.empty())
|
||||
{
|
||||
is_outfit_menu = gInventory.isObjectDescendentOf(ids.front(), outfit_folder_id);
|
||||
}
|
||||
// </FS:Trish>
|
||||
|
||||
for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it)
|
||||
{
|
||||
LLUUID id = *it;
|
||||
|
|
@ -1315,8 +1324,8 @@ void LLWearableItemsList::ContextMenu::updateItemsVisibility(LLContextMenu* menu
|
|||
setMenuItemVisible(menu, "show_original", !standalone);
|
||||
setMenuItemEnabled(menu, "show_original", n_items == 1 && n_links == n_items);
|
||||
// <AS:Chanayane> Delete from outfit context menu entry
|
||||
setMenuItemVisible(menu, "delete_from_outfit", n_links > 0);
|
||||
setMenuItemEnabled(menu, "delete_from_outfit", n_links > 0);
|
||||
setMenuItemVisible(menu, "delete_from_outfit", n_links > 0 && is_outfit_menu);
|
||||
setMenuItemEnabled(menu, "delete_from_outfit", n_links > 0 && is_outfit_menu);
|
||||
// </AS:Chanayane>
|
||||
setMenuItemVisible(menu, "favorites_add", can_favorite);
|
||||
setMenuItemVisible(menu, "favorites_remove", can_unfavorite);
|
||||
|
|
|
|||
|
|
@ -256,7 +256,7 @@ public:
|
|||
|
||||
void updateItemWeight(U32 item_weight);
|
||||
|
||||
/*virtual*/ void updateItem(const std::string& name, EItemState item_state = IS_DEFAULT);
|
||||
/*virtual*/ void updateItem(const std::string& name, bool favorite, EItemState item_state = IS_DEFAULT);
|
||||
|
||||
/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);
|
||||
|
||||
|
|
|
|||
|
|
@ -1594,6 +1594,26 @@ void process_enable_simulator(LLMessageSystem *msg, void **user_data)
|
|||
msg->getIPAddrFast(_PREHASH_SimulatorInfo, _PREHASH_IP, ip_u32);
|
||||
msg->getIPPortFast(_PREHASH_SimulatorInfo, _PREHASH_Port, port);
|
||||
|
||||
// <FS:PP> Only connect if neighbour connections are not disabled, or if this is the current region being established (login/teleport target)
|
||||
static LLCachedControl<bool> fsDisableNeighbourRegionConnections(gSavedSettings, "FSDisableNeighbourRegionConnections");
|
||||
if (fsDisableNeighbourRegionConnections)
|
||||
{
|
||||
LLViewerRegion* current_region = gAgent.getRegion();
|
||||
if (current_region)
|
||||
{
|
||||
F32 regionSize = current_region->getWidth();
|
||||
LLVector3 avPos = gAgent.getPositionAgent();
|
||||
if (avPos.mV[VX] >= 0 && avPos.mV[VX] <= regionSize && avPos.mV[VY] >= 0 && avPos.mV[VY] <= regionSize)
|
||||
{
|
||||
if (current_region->getHandle() != handle)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// </FS:PP>
|
||||
|
||||
// which simulator should we modify?
|
||||
LLHost sim(ip_u32, port);
|
||||
|
||||
|
|
|
|||
|
|
@ -328,6 +328,7 @@ bool LLPipeline::sRenderScriptedBeacons = false;
|
|||
bool LLPipeline::sRenderScriptedTouchBeacons = true;
|
||||
bool LLPipeline::sRenderParticleBeacons = false;
|
||||
bool LLPipeline::sRenderSoundBeacons = false;
|
||||
bool LLPipeline::sRenderRegionCornerBeacons = false; // <FS:PP> FIRE-33085 Region corner markers
|
||||
bool LLPipeline::sRenderBeacons = false;
|
||||
bool LLPipeline::sRenderHighlight = true;
|
||||
LLRender::eTexIndex LLPipeline::sRenderHighlightTextureChannel = LLRender::DIFFUSE_MAP;
|
||||
|
|
@ -470,6 +471,7 @@ void LLPipeline::init()
|
|||
sRenderScriptedTouchBeacons = gSavedSettings.getBOOL("scripttouchbeacon");
|
||||
sRenderParticleBeacons = gSavedSettings.getBOOL("particlesbeacon");
|
||||
sRenderSoundBeacons = gSavedSettings.getBOOL("soundsbeacon");
|
||||
sRenderRegionCornerBeacons = gSavedSettings.getBOOL("fsregioncornerbeacons"); // <FS:PP> FIRE-33085 Region corner markers
|
||||
sRenderBeacons = gSavedSettings.getBOOL("renderbeacons");
|
||||
sRenderHighlight = gSavedSettings.getBOOL("renderhighlights");
|
||||
|
||||
|
|
@ -663,6 +665,9 @@ void LLPipeline::init()
|
|||
connectRefreshCachedSettingsSafe("FSFocusPointFollowsPointer");
|
||||
connectRefreshCachedSettingsSafe("FSFocusPointLocked");
|
||||
// </FS:Beq>
|
||||
// <FS:PP> FIRE-33085 Region corner markers
|
||||
connectRefreshCachedSettingsSafe("fsregioncornerbeacons");
|
||||
// </FS:PP>
|
||||
|
||||
LLPointer<LLControlVariable> cntrl_ptr = gSavedSettings.getControl("CollectFontVertexBuffers");
|
||||
if (cntrl_ptr.notNull())
|
||||
|
|
@ -1168,6 +1173,9 @@ void LLPipeline::refreshCachedSettings()
|
|||
LLPipeline::sRenderAttachedLights = gSavedSettings.getBOOL("RenderAttachedLights");
|
||||
LLPipeline::sRenderAttachedParticles = gSavedSettings.getBOOL("RenderAttachedParticles");
|
||||
// </FS:Ansariel>
|
||||
// <FS:PP> FIRE-33085 Region corner markers
|
||||
LLPipeline::sRenderRegionCornerBeacons = gSavedSettings.getBOOL("fsregioncornerbeacons");
|
||||
// </FS:PP>
|
||||
|
||||
LLPipeline::sUseOcclusion =
|
||||
(!gUseWireframe
|
||||
|
|
@ -3917,6 +3925,37 @@ void LLPipeline::postSort(LLCamera &camera)
|
|||
// now deal with highlights for all those seeable sound sources
|
||||
forAllVisibleDrawables(renderSoundHighlights);
|
||||
}
|
||||
|
||||
// <FS:PP> FIRE-33085 Region corner markers
|
||||
if (sRenderRegionCornerBeacons)
|
||||
{
|
||||
LLViewerRegion* region = gAgent.getRegion();
|
||||
if (region)
|
||||
{
|
||||
LLVector3 origin = region->getOriginAgent();
|
||||
F32 width = region->getWidth();
|
||||
|
||||
LLVector3 corner1 = origin; // Southwest
|
||||
LLVector3 corner2 = origin + LLVector3(width, 0, 0); // Southeast
|
||||
LLVector3 corner3 = origin + LLVector3(0, width, 0); // Northwest
|
||||
LLVector3 corner4 = origin + LLVector3(width, width, 0); // Northeast
|
||||
|
||||
corner1.mV[VZ] = region->getLandHeightRegion(LLVector3(0, 0, 0));
|
||||
corner2.mV[VZ] = region->getLandHeightRegion(LLVector3(width, 0, 0));
|
||||
corner3.mV[VZ] = region->getLandHeightRegion(LLVector3(0, width, 0));
|
||||
corner4.mV[VZ] = region->getLandHeightRegion(LLVector3(width, width, 0));
|
||||
|
||||
LLColor4 corner_color(1.0f, 1.0f, 0.0f, 0.8f);
|
||||
LLColor4 text_color(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
|
||||
gObjectList.addDebugBeacon(corner1, "SW", corner_color, text_color, DebugBeaconLineWidth);
|
||||
gObjectList.addDebugBeacon(corner2, "SE", corner_color, text_color, DebugBeaconLineWidth);
|
||||
gObjectList.addDebugBeacon(corner3, "NW", corner_color, text_color, DebugBeaconLineWidth);
|
||||
gObjectList.addDebugBeacon(corner4, "NE", corner_color, text_color, DebugBeaconLineWidth);
|
||||
}
|
||||
}
|
||||
// </FS:PP>
|
||||
|
||||
}
|
||||
}
|
||||
LL_PUSH_CALLSTACKS();
|
||||
|
|
@ -6709,6 +6748,23 @@ bool LLPipeline::getRenderHighlights()
|
|||
return sRenderHighlight;
|
||||
}
|
||||
|
||||
// <FS:PP> FIRE-33085 Region corner markers
|
||||
void LLPipeline::setRenderRegionCornerBeacons(bool val)
|
||||
{
|
||||
sRenderRegionCornerBeacons = val;
|
||||
}
|
||||
|
||||
void LLPipeline::toggleRenderRegionCornerBeacons()
|
||||
{
|
||||
sRenderRegionCornerBeacons = !sRenderRegionCornerBeacons;
|
||||
}
|
||||
|
||||
bool LLPipeline::getRenderRegionCornerBeacons()
|
||||
{
|
||||
return sRenderRegionCornerBeacons;
|
||||
}
|
||||
// </FS:PP>
|
||||
|
||||
// static
|
||||
void LLPipeline::setRenderHighlightTextureChannel(LLRender::eTexIndex channel)
|
||||
{
|
||||
|
|
@ -8821,12 +8877,12 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, LLRenderTarget* light_
|
|||
shader.uniform1f(LLShaderMgr::DEFERRED_BLUR_SIZE, RenderShadowBlurSize);
|
||||
|
||||
// <FS:WW> Compute scale factor to match AO appearance between view and snapshot.
|
||||
F32 screen_to_target_scale_factor = (F32)gViewerWindow->getWindowHeightRaw() / deferred_target->getHeight();
|
||||
//shader.uniform1f(LLShaderMgr::DEFERRED_SSAO_RADIUS, RenderSSAOScale);
|
||||
shader.uniform1f(LLShaderMgr::DEFERRED_SSAO_RADIUS, RenderSSAOScale / screen_to_target_scale_factor);
|
||||
//shader.uniform1f(LLShaderMgr::DEFERRED_SSAO_MAX_RADIUS, (GLfloat)RenderSSAOMaxScale);
|
||||
shader.uniform1f(LLShaderMgr::DEFERRED_SSAO_MAX_RADIUS, RenderSSAOMaxScale / screen_to_target_scale_factor);
|
||||
// </FS:WW>
|
||||
F32 screen_to_target_scale_factor = (F32)gViewerWindow->getWindowHeightRaw() / deferred_target->getHeight();
|
||||
//shader.uniform1f(LLShaderMgr::DEFERRED_SSAO_RADIUS, RenderSSAOScale);
|
||||
shader.uniform1f(LLShaderMgr::DEFERRED_SSAO_RADIUS, RenderSSAOScale / screen_to_target_scale_factor);
|
||||
//shader.uniform1f(LLShaderMgr::DEFERRED_SSAO_MAX_RADIUS, (GLfloat)RenderSSAOMaxScale);
|
||||
shader.uniform1f(LLShaderMgr::DEFERRED_SSAO_MAX_RADIUS, RenderSSAOMaxScale / screen_to_target_scale_factor);
|
||||
// </FS:WW>
|
||||
|
||||
F32 ssao_factor = RenderSSAOFactor;
|
||||
shader.uniform1f(LLShaderMgr::DEFERRED_SSAO_FACTOR, ssao_factor);
|
||||
|
|
|
|||
|
|
@ -436,6 +436,12 @@ public:
|
|||
static void toggleRenderSoundBeacons();
|
||||
static bool getRenderSoundBeacons();
|
||||
|
||||
// <FS:PP> FIRE-33085 Region corner markers
|
||||
static void setRenderRegionCornerBeacons(bool val);
|
||||
static void toggleRenderRegionCornerBeacons();
|
||||
static bool getRenderRegionCornerBeacons();
|
||||
// </FS:PP>
|
||||
|
||||
static void setRenderMOAPBeacons(bool val);
|
||||
static void toggleRenderMOAPBeacons();
|
||||
static bool getRenderMOAPBeacons();
|
||||
|
|
@ -1023,6 +1029,7 @@ protected:
|
|||
static bool sRenderScriptedBeacons;
|
||||
static bool sRenderParticleBeacons;
|
||||
static bool sRenderSoundBeacons;
|
||||
static bool sRenderRegionCornerBeacons; // <FS:PP> FIRE-33085 Region corner markers
|
||||
public:
|
||||
static bool sRenderBeacons;
|
||||
static bool sRenderHighlight;
|
||||
|
|
|
|||
|
|
@ -635,7 +635,7 @@ void RlvGiveToRLVTaskOffer::doneIdle()
|
|||
|
||||
void RlvGiveToRLVTaskOffer::onDestinationCreated(const LLUUID& idDestFolder, const std::string& strName)
|
||||
{
|
||||
if (const LLViewerInventoryCategory* pTarget = (idDestFolder.notNull()) ? gInventory.getCategory(idDestFolder) : nullptr)
|
||||
if (idDestFolder.notNull())
|
||||
{
|
||||
moveAndRename(m_Folders.front(), idDestFolder, strName, new LLBoostFuncInventoryCallback(boost::bind(&RlvGiveToRLVTaskOffer::onOfferCompleted, this, _1)));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,6 +37,10 @@
|
|||
<panel_camera_item name="rear_view" tool_tip="Rückansicht">
|
||||
<panel_camera_item.text name="rear_view_text">
|
||||
</panel_camera_item.text>
|
||||
<panel_camera_item name="tpp_view" tool_tip="TPP-Ansicht">
|
||||
<panel_camera_item.text name="tpp_view_text">
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
</panel_camera_item>
|
||||
<panel_camera_item name="object_view" tool_tip="Objekt-Ansicht">
|
||||
<panel_camera_item.text name="object_view_text">
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
title="Camera Controls"
|
||||
chrome="true"
|
||||
save_rect="true"
|
||||
width="340">
|
||||
width="360">
|
||||
<floater.string
|
||||
name="rotate_tooltip">
|
||||
Rotate Camera Around Focus
|
||||
|
|
@ -167,7 +167,7 @@
|
|||
left_pad="2"
|
||||
name="buttons_panel"
|
||||
top_delta="18"
|
||||
width="120">
|
||||
width="140">
|
||||
<panel_camera_item
|
||||
name="front_view"
|
||||
tool_tip="Front View"
|
||||
|
|
@ -206,6 +206,19 @@
|
|||
<panel_camera_item.selected_picture
|
||||
image_name="Cam_Preset_Back_On" />
|
||||
</panel_camera_item>
|
||||
<panel_camera_item
|
||||
name="tpp_view"
|
||||
tool_tip="TPP View"
|
||||
width="18"
|
||||
left_pad="2">
|
||||
<panel_camera_item.mousedown_callback
|
||||
function="CameraPresets.ChangeView"
|
||||
parameter="TPP View" />
|
||||
<panel_camera_item.picture
|
||||
image_name="Cam_Preset_TPP_Off" />
|
||||
<panel_camera_item.selected_picture
|
||||
image_name="Cam_Preset_TPP_On" />
|
||||
</panel_camera_item>
|
||||
<panel_camera_item
|
||||
name="object_view"
|
||||
tool_tip="Object View"
|
||||
|
|
@ -252,7 +265,7 @@
|
|||
mouse_opaque="true"
|
||||
name="preset_combo"
|
||||
top_pad="7"
|
||||
width="116">
|
||||
width="136">
|
||||
<combo_list
|
||||
mouse_wheel_opaque="true"/>
|
||||
<combo_box.item
|
||||
|
|
@ -279,10 +292,10 @@
|
|||
height="23"
|
||||
label="Position..."
|
||||
layout="topleft"
|
||||
left_delta="-119"
|
||||
left_delta="-139"
|
||||
name="camera_position_btn"
|
||||
top_pad="5"
|
||||
width="70">
|
||||
width="80">
|
||||
<button.commit_callback
|
||||
function="Floater.Show"
|
||||
parameter="prefs_view_advanced"/>
|
||||
|
|
@ -295,7 +308,7 @@
|
|||
left_pad="3"
|
||||
name="save_btn"
|
||||
top_delta="0"
|
||||
width="70">
|
||||
width="80">
|
||||
<button.commit_callback
|
||||
function="CameraPresets.Save"/>
|
||||
</button>
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
<panel_camera_item name="front_view" tool_tip="前面ビューにします。"/>
|
||||
<panel_camera_item name="group_view" tool_tip="サイドビューにします。"/>
|
||||
<panel_camera_item name="rear_view" tool_tip="後方ビューにします。"/>
|
||||
<panel_camera_item name="tpp_view" tool_tip="三人称ビューにします。"/>
|
||||
<panel_camera_item name="object_view" tool_tip="オブジェクトビューにします。"/>
|
||||
<panel_camera_item name="mouselook_view" tool_tip="マウスルックビューにします。"/>
|
||||
<panel_camera_item name="reset_view" tool_tip="視野をリセットします。"/>
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
<panel_camera_item name="front_view" tool_tip="Widok od przodu"/>
|
||||
<panel_camera_item name="group_view" tool_tip="Widok ponad ramieniem"/>
|
||||
<panel_camera_item name="rear_view" tool_tip="Widok od tyłu"/>
|
||||
<panel_camera_item name="tpp_view" tool_tip="Widok trzecioosobowy"/>
|
||||
<panel_camera_item name="object_view" tool_tip="Pokazywanie obiektu"/>
|
||||
<panel_camera_item name="mouselook_view" tool_tip="Widok pierwszoosobowy"/>
|
||||
<panel_camera_item name="reset_view" tool_tip="Resetuj widok"/>
|
||||
|
|
|
|||
|
|
@ -25,24 +25,13 @@
|
|||
</panel>
|
||||
</panel>
|
||||
<panel name="buttons_panel">
|
||||
<panel_camera_item name="front_view" tool_tip="正面視圖">
|
||||
<panel_camera_item.text name="front_view_text"></panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<panel_camera_item name="group_view" tool_tip="側面視圖">
|
||||
<panel_camera_item.text name="side_view_text"></panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<panel_camera_item name="rear_view" tool_tip="背面視圖">
|
||||
<panel_camera_item.text name="rear_view_text"></panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<panel_camera_item name="object_view" tool_tip="物件視圖">
|
||||
<panel_camera_item.text name="object_view_text"></panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<panel_camera_item name="mouselook_view" tool_tip="滑鼠觀察">
|
||||
<panel_camera_item.text name="mouselook_view_text"></panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<panel_camera_item name="reset_view" tool_tip="重設視圖">
|
||||
<panel_camera_item.text name="reset_view_text"></panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<panel_camera_item name="front_view" tool_tip="前視圖" />
|
||||
<panel_camera_item name="group_view" tool_tip="側視圖" />
|
||||
<panel_camera_item name="rear_view" tool_tip="後視圖" />
|
||||
<panel_camera_item name="tpp_view" tool_tip="第三人稱視角" />
|
||||
<panel_camera_item name="object_view" tool_tip="物件視圖" />
|
||||
<panel_camera_item name="mouselook_view" tool_tip="滑鼠觀察" />
|
||||
<panel_camera_item name="reset_view" tool_tip="重設視圖" />
|
||||
</panel>
|
||||
<combo_box name="preset_combo">
|
||||
<combo_box.item label="使用預設" name="Use preset" />
|
||||
|
|
|
|||
|
|
@ -125,6 +125,7 @@
|
|||
<inventory_panel label="庫存" name="All Items"/>
|
||||
<recent_inventory_panel label="最近" name="Recent Items" />
|
||||
<worn_inventory_panel label="裝扮" name="Worn Items" />
|
||||
<favorites_inventory_panel label="收藏" name="Favorites"/>
|
||||
</tab_container>
|
||||
</panel>
|
||||
<panel name="bottom_panel">
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 4.1 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 4.1 KiB |
|
|
@ -118,6 +118,11 @@ with the same filename but different name
|
|||
<texture name="Cam_Preset_Side_Off" file_name="bottomtray/Cam_Preset_Side_Off.png" preload="false" />
|
||||
<texture name="Cam_Preset_Side_On" file_name="bottomtray/Cam_Preset_Side_On.png" preload="false" />
|
||||
|
||||
<!-- FS:PP: Camera Third Person View -->
|
||||
<texture name="Cam_Preset_TPP_Off" file_name="bottomtray/Cam_Preset_TPP_Off.png" preload="false" />
|
||||
<texture name="Cam_Preset_TPP_On" file_name="bottomtray/Cam_Preset_TPP_On.png" preload="false" />
|
||||
<!-- END FS:PP: Camera Third Person View -->
|
||||
|
||||
<texture name="Cam_Rotate_In" file_name="bottomtray/Cam_Rotate_In.png" preload="false" />
|
||||
<texture name="Cam_Rotate_Out" file_name="bottomtray/Cam_Rotate_Out.png" preload="false" />
|
||||
<texture name="Cam_Rotate_Center" file_name="bottomtray/Cam_Rotate_Center.png" preload="false" />
|
||||
|
|
|
|||
|
|
@ -43,6 +43,10 @@
|
|||
<panel_camera_item.text name="rear_view_text">
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<panel_camera_item name="tpp_view" tool_tip="TPP-Ansicht">
|
||||
<panel_camera_item.text name="tpp_view_text">
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<panel_camera_item name="object_view" tool_tip="Objekt-Ansicht">
|
||||
<panel_camera_item.text name="object_view_text">
|
||||
</panel_camera_item.text>
|
||||
|
|
|
|||
|
|
@ -41,6 +41,10 @@
|
|||
<panel_camera_item.text name="rear_view_text">
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<panel_camera_item name="tpp_view" tool_tip="TPP-Ansicht">
|
||||
<panel_camera_item.text name="tpp_view_text">
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
</panel>
|
||||
<panel name="buttons">
|
||||
<panel_camera_item name="object_view" tool_tip="Objekt-Ansicht">
|
||||
|
|
|
|||
|
|
@ -36,6 +36,11 @@
|
|||
Rückansicht
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<panel_camera_item name="tpp_view">
|
||||
<panel_camera_item.text name="rear_view_text">
|
||||
TPP-Ansicht
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
</panel>
|
||||
<panel name="camera_modes_list">
|
||||
<panel_camera_item name="object_view">
|
||||
|
|
|
|||
|
|
@ -5896,6 +5896,10 @@ https://wiki.firestormviewer.org/antivirus_whitelisting
|
|||
Bestehende Pose „[POSE_NAME]“ überschreiben?
|
||||
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Okay"/>
|
||||
</notification>
|
||||
<notification name="FSLargeOutfitsWarningInThisSession">
|
||||
Eine große Anzahl an Outfits wurde erkannt: [AMOUNT]. Dies kann zu einem Blockieren des Viewers oder zu Verbindungsabbrüchen führen. Ziehen Sie eine Reduzierung der Outfits für eine bessere Performance in Betracht (unter [MAX]).
|
||||
<usetemplate ignoretext="Warnung bei zu vielen Outfits" name="okignore" yestext="OK" />
|
||||
</notification>
|
||||
<notification name="PrimfeedLoginRequestFailed">
|
||||
Login-Anfrage wurde von Primfeed abgelehnt.
|
||||
</notification>
|
||||
|
|
|
|||
|
|
@ -180,6 +180,7 @@
|
|||
</text>
|
||||
<spinner tool_tip="-1 für kompletten Gruppennamen, 0 für deaktiviert" name="FSShowGroupNameLength"/>
|
||||
<check_box name="FSOpenIMContainerOnOfflineMessage" label="Gespräche öffnen, wenn eine Offline-Nachricht empfangen wurde"/>
|
||||
<check_box name="FSRestoreOpenIMs" label="Beim Starten offene Instant Messages der letzten Sitzung wiederherstellen"/>
|
||||
<check_box label="IMs per E-Mail zuschicken, wenn ich offline bin ([EMAIL])" name="send_im_to_email"/>
|
||||
<text name="email_settings">
|
||||
[https://accounts.secondlife.com/change_email?lang=de-DE Einstellungen für E-Mail-Benachrichtigungs für Offline-IMs öffnen]
|
||||
|
|
|
|||
|
|
@ -206,6 +206,8 @@
|
|||
<slider label="Aktiv:" name="active"/>
|
||||
<slider label="Inaktiv:" name="inactive"/>
|
||||
<slider label="Kamera / Bewegung:" name="camera_movement"/>
|
||||
<slider label="Gespräche:" name="conversations"/>
|
||||
<check_box name="override_im_active_opacity_checkbox" label="Aktive Deckkraft verwenden, wenn das Gespräche-Fenster den Fokus besitzt"/>
|
||||
<text name="console_opacity">
|
||||
Konsolen-Deckkraft:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater
|
||||
legacy_header_height="18"
|
||||
height="332"
|
||||
height="363"
|
||||
layout="topleft"
|
||||
name="beacons"
|
||||
help_topic="beacons"
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
width="240">
|
||||
<panel
|
||||
follows="left|top|right|bottom"
|
||||
height="327"
|
||||
height="358"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="beacons_panel"
|
||||
|
|
@ -40,7 +40,25 @@
|
|||
parameter="lights"/>
|
||||
</check_box>
|
||||
<check_box
|
||||
control_name="fsregioncornerbeacons"
|
||||
top_pad="2"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
label="Region corners"
|
||||
name="fsregioncornerbeacons">
|
||||
<check_box.commit_callback
|
||||
function="Beacons.UICheck" />
|
||||
</check_box>
|
||||
<view_border
|
||||
bevel_style="in"
|
||||
height="0"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="cost_text_border"
|
||||
top_pad="5"
|
||||
width="220"/>
|
||||
<check_box
|
||||
top_pad="7"
|
||||
control_name="renderbeacons"
|
||||
height="16"
|
||||
width="100"
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@
|
|||
save_visibility="true"
|
||||
show_title="false"
|
||||
single_instance="true"
|
||||
width="150"
|
||||
min_width="135">
|
||||
width="170"
|
||||
min_width="155">
|
||||
<floater.string name="rotate_tooltip">
|
||||
Rotate Camera Around Focus
|
||||
</floater.string>
|
||||
|
|
@ -43,7 +43,7 @@
|
|||
layout="topleft"
|
||||
left="2"
|
||||
name="buttons_panel"
|
||||
width="120"
|
||||
width="140"
|
||||
top_pad="-5">
|
||||
<panel_camera_item
|
||||
name="front_view"
|
||||
|
|
@ -78,6 +78,17 @@
|
|||
<panel_camera_item.picture image_name="Cam_Preset_Back_Off" />
|
||||
<panel_camera_item.selected_picture image_name="Cam_Preset_Back_On" />
|
||||
</panel_camera_item>
|
||||
<panel_camera_item
|
||||
name="tpp_view"
|
||||
tool_tip="TPP View"
|
||||
width="18"
|
||||
left_pad="2">
|
||||
<panel_camera_item.mousedown_callback
|
||||
function="CameraPresets.ChangeView"
|
||||
parameter="TPP View" />
|
||||
<panel_camera_item.picture image_name="Cam_Preset_TPP_Off" />
|
||||
<panel_camera_item.selected_picture image_name="Cam_Preset_TPP_On" />
|
||||
</panel_camera_item>
|
||||
<panel_camera_item
|
||||
name="object_view"
|
||||
tool_tip="Object View"
|
||||
|
|
@ -114,7 +125,7 @@
|
|||
</panel>
|
||||
<panel
|
||||
border="false"
|
||||
width="140"
|
||||
width="160"
|
||||
class="camera_zoom_panel"
|
||||
height="60"
|
||||
layout="topleft"
|
||||
|
|
@ -278,7 +289,7 @@
|
|||
layout="topleft"
|
||||
left_delta="5"
|
||||
name="camera_position_btn"
|
||||
width="113">
|
||||
width="133">
|
||||
<button.commit_callback
|
||||
function="Floater.Show"
|
||||
parameter="prefs_view_advanced" />
|
||||
|
|
@ -302,7 +313,7 @@
|
|||
mouse_opaque="true"
|
||||
name="preset_combo"
|
||||
top_pad="0"
|
||||
width="113">
|
||||
width="133">
|
||||
<combo_list mouse_wheel_opaque="true" />
|
||||
<combo_box.item
|
||||
label="Use preset"
|
||||
|
|
|
|||
|
|
@ -20,8 +20,8 @@
|
|||
save_visibility="true"
|
||||
save_dock_state="false"
|
||||
single_instance="true"
|
||||
width="155"
|
||||
min_width="155">
|
||||
width="165"
|
||||
min_width="165">
|
||||
<floater.string
|
||||
name="rotate_tooltip">
|
||||
Rotate Camera Around Focus
|
||||
|
|
@ -60,7 +60,7 @@ free_mode_title
|
|||
name="zoom"
|
||||
follows="all"
|
||||
top="25"
|
||||
width="150">
|
||||
width="160">
|
||||
|
||||
<layout_stack
|
||||
top="0"
|
||||
|
|
@ -70,7 +70,7 @@ free_mode_title
|
|||
mouse_opaque="true"
|
||||
name="camera_view_layout_stack"
|
||||
orientation="horizontal"
|
||||
width="150"
|
||||
width="160"
|
||||
follows="all">
|
||||
|
||||
<layout_panel
|
||||
|
|
@ -219,7 +219,7 @@ free_mode_title
|
|||
top="0"
|
||||
follows="top|left"
|
||||
name="buttons_view"
|
||||
width="56">
|
||||
width="76">
|
||||
<panel_camera_item
|
||||
name="front_view"
|
||||
tool_tip="Front view"
|
||||
|
|
@ -324,6 +324,41 @@ free_mode_title
|
|||
""
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<panel_camera_item
|
||||
name="tpp_view"
|
||||
tool_tip="TPP view"
|
||||
width="18"
|
||||
height="18"
|
||||
layout="topleft"
|
||||
left_delta="20"
|
||||
top_delta="0">
|
||||
<panel_camera_item.mousedown_callback
|
||||
function="CameraPresets.ChangeView"
|
||||
parameter="TPP View" />
|
||||
<panel_camera_item.icon_over
|
||||
top="18"
|
||||
height="18"
|
||||
width="18" />
|
||||
<panel_camera_item.icon_selected
|
||||
top="18"
|
||||
height="18"
|
||||
width="18" />
|
||||
<panel_camera_item.picture
|
||||
top="18"
|
||||
height="18"
|
||||
width="18"
|
||||
image_name="Cam_Preset_TPP_Off" />
|
||||
<panel_camera_item.selected_picture
|
||||
top="18"
|
||||
height="18"
|
||||
width="18"
|
||||
image_name="Cam_Preset_TPP_On" />
|
||||
<panel_camera_item.text
|
||||
width="0"
|
||||
name="tpp_view_text">
|
||||
""
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
</panel>
|
||||
|
||||
<panel
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@
|
|||
follows="all"
|
||||
height="102"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
left="6"
|
||||
name="preset_views_list"
|
||||
top_pad="0"
|
||||
right="-1"
|
||||
|
|
@ -99,7 +99,7 @@
|
|||
<panel_camera_item
|
||||
name="group_view"
|
||||
height="20"
|
||||
top_pad="6">
|
||||
top_pad="1">
|
||||
<panel_camera_item.mousedown_callback
|
||||
function="CameraPresets.ChangeView"
|
||||
parameter="Side View"/>
|
||||
|
|
@ -115,9 +115,8 @@
|
|||
</panel_camera_item>
|
||||
<panel_camera_item
|
||||
name="rear_view"
|
||||
layout="topleft"
|
||||
height="20"
|
||||
top_pad="6">
|
||||
top_pad="1">
|
||||
<panel_camera_item.mousedown_callback
|
||||
function="CameraPresets.ChangeView"
|
||||
parameter="Rear View"/>
|
||||
|
|
@ -131,12 +130,30 @@
|
|||
Rear View
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<panel_camera_item
|
||||
name="tpp_view"
|
||||
layout="topleft"
|
||||
height="20"
|
||||
top_pad="1">
|
||||
<panel_camera_item.mousedown_callback
|
||||
function="CameraPresets.ChangeView"
|
||||
parameter="TPP View"/>
|
||||
<panel_camera_item.picture
|
||||
image_name="Cam_Preset_TPP_Off"/>
|
||||
<panel_camera_item.selected_picture
|
||||
image_name="Cam_Preset_TPP_On"/>
|
||||
<panel_camera_item.text
|
||||
name="tpp_view_text"
|
||||
top="22">
|
||||
TPP View
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<combo_box
|
||||
height="23"
|
||||
height="20"
|
||||
left="0"
|
||||
mouse_opaque="true"
|
||||
name="preset_combo"
|
||||
top_pad="1"
|
||||
top_pad="-4"
|
||||
width="122">
|
||||
<combo_list
|
||||
mouse_wheel_opaque="true"/>
|
||||
|
|
@ -146,8 +163,8 @@
|
|||
value="default" />
|
||||
</combo_box>
|
||||
<button
|
||||
height="16"
|
||||
width="16"
|
||||
height="13"
|
||||
width="13"
|
||||
layout="topleft"
|
||||
mouse_opaque="true"
|
||||
name="gear_btn"
|
||||
|
|
@ -163,7 +180,7 @@
|
|||
</button>
|
||||
<button
|
||||
follows="top|left"
|
||||
height="23"
|
||||
height="20"
|
||||
label="Position..."
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@
|
|||
initial_value="-2"
|
||||
left_pad="0"
|
||||
layout="topleft"
|
||||
max_val="0"
|
||||
max_val="4"
|
||||
min_val="-8"
|
||||
name="zoom slider"
|
||||
show_text="false"
|
||||
|
|
|
|||
|
|
@ -400,7 +400,7 @@
|
|||
name="Image uploads">
|
||||
<menu_item_call.on_click
|
||||
function="Inventory.FileUploadLocation"
|
||||
parameter="texture" />
|
||||
parameter="def_texture" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Sound uploads"
|
||||
|
|
@ -408,7 +408,7 @@
|
|||
name="Sound uploads">
|
||||
<menu_item_call.on_click
|
||||
function="Inventory.FileUploadLocation"
|
||||
parameter="sound" />
|
||||
parameter="def_sound" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Animation uploads"
|
||||
|
|
@ -416,7 +416,7 @@
|
|||
name="Animation uploads">
|
||||
<menu_item_call.on_click
|
||||
function="Inventory.FileUploadLocation"
|
||||
parameter="animation" />
|
||||
parameter="def_animation" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Model uploads"
|
||||
|
|
@ -424,7 +424,7 @@
|
|||
name="Model uploads">
|
||||
<menu_item_call.on_click
|
||||
function="Inventory.FileUploadLocation"
|
||||
parameter="model" />
|
||||
parameter="def_model" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="PBR material uploads"
|
||||
|
|
@ -432,7 +432,7 @@
|
|||
name="PBR uploads">
|
||||
<menu_item_call.on_click
|
||||
function="Inventory.FileUploadLocation"
|
||||
parameter="pbr_material" />
|
||||
parameter="def_pbr_material" />
|
||||
</menu_item_call>
|
||||
</menu>
|
||||
<menu
|
||||
|
|
|
|||
|
|
@ -937,7 +937,7 @@
|
|||
<menu_item_check
|
||||
label="Show On-screen Chat Console"
|
||||
name="Show On-screen Console"
|
||||
shortcut="shift|`">
|
||||
shortcut="alt|shift|`">
|
||||
<menu_item_check.on_check
|
||||
function="Comm.CheckShowOnscreenConsole" />
|
||||
<menu_item_check.on_click
|
||||
|
|
|
|||
|
|
@ -14764,6 +14764,18 @@ https://wiki.firestormviewer.org/antivirus_whitelisting
|
|||
yestext="Okay"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="FSLargeOutfitsWarningInThisSession"
|
||||
type="alertmodal">
|
||||
<unique/>
|
||||
A large number of outfits were detected: [AMOUNT]. This may cause viewer hangs or disconnects. Consider reducing the number of outfits for better performance (below [MAX]).
|
||||
<usetemplate
|
||||
ignoretext="Outfit count warning"
|
||||
name="okignore"
|
||||
yestext="OK" />
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="PrimfeedLoginRequestFailed"
|
||||
|
|
|
|||
|
|
@ -1144,6 +1144,16 @@
|
|||
name="FSOpenIMContainerOnOfflineMessage"
|
||||
control_name="FSOpenIMContainerOnOfflineMessage"
|
||||
label="Open Conversations when an offline message has been received"/>
|
||||
<check_box
|
||||
layout="topleft"
|
||||
follows="left|top"
|
||||
top_pad="-2"
|
||||
left="20"
|
||||
width="400"
|
||||
height="18"
|
||||
name="FSRestoreOpenIMs"
|
||||
control_name="FSRestoreOpenIMs"
|
||||
label="Restore conversations with residents from previous session"/>
|
||||
<check_box
|
||||
enabled="false"
|
||||
layout="topleft"
|
||||
|
|
|
|||
|
|
@ -1857,6 +1857,34 @@
|
|||
show_text="true"
|
||||
top_pad="2"
|
||||
width="415" />
|
||||
<slider
|
||||
can_edit_text="false"
|
||||
control_name="FSIMOpacity"
|
||||
decimal_digits="2"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="0.01"
|
||||
initial_value="1.0"
|
||||
layout="topleft"
|
||||
label_width="115"
|
||||
label="Conversations:"
|
||||
left="50"
|
||||
max_val="1.00"
|
||||
min_val="0.00"
|
||||
name="conversations"
|
||||
show_text="true"
|
||||
top_pad="2"
|
||||
width="415" />
|
||||
<check_box
|
||||
control_name="FSImActiveOpacityOverride"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
left="49"
|
||||
height="12"
|
||||
name="override_im_active_opacity_checkbox"
|
||||
top_pad="5"
|
||||
width="450"
|
||||
label="Use Active Opacity value when the Conversations window is focused" />
|
||||
<text
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
|
|
|
|||
|
|
@ -590,13 +590,22 @@
|
|||
layout="topleft"
|
||||
label_width="170"
|
||||
label="Avatar Rotation Turn Speed:"
|
||||
top_pad="2"
|
||||
top_pad="5"
|
||||
max_val="100.0"
|
||||
min_val="0.0"
|
||||
name="av_turn_spd"
|
||||
tool_tip="Alters the rate at which your avatar responds to turning. 0-100 as estimated percentage of max turn rate. 0 is default. High values will be snappy/jerky"
|
||||
show_text="true"
|
||||
width="320" />
|
||||
<check_box
|
||||
top_pad="5"
|
||||
follows="left|top"
|
||||
height="20"
|
||||
label="Disable connecting to neighbouring regions (important: read tooltip)"
|
||||
name="FSDisableNeighbourRegionConnections"
|
||||
width="270"
|
||||
control_name="FSDisableNeighbourRegionConnections"
|
||||
tool_tip="Shows/loads only the region you are in, which can improve performance and network stability, but region crossings on foot or in vehicles will be less reliable and manual teleporting may be needed." />
|
||||
<text
|
||||
follows="left|top"
|
||||
type="string"
|
||||
|
|
@ -605,7 +614,7 @@
|
|||
layout="topleft"
|
||||
name="Region_Crossing_Movement_Label"
|
||||
width="210"
|
||||
top_pad="10">
|
||||
top_pad="5">
|
||||
Region crossing movement prediction:
|
||||
</text>
|
||||
<radio_group
|
||||
|
|
|
|||
|
|
@ -2703,6 +2703,7 @@ Try enclosing path to the editor with double quotes.
|
|||
<string name="BeaconScripted">Viewing scripted object beacons (red)</string>
|
||||
<string name="BeaconScriptedTouch">Viewing scripted object with touch function beacons (red)</string>
|
||||
<string name="BeaconSound">Viewing sound beacons (yellow)</string>
|
||||
<string name="BeaconRegionCorners">Viewing region corners (yellow)</string>
|
||||
<string name="BeaconMedia">Viewing media beacons (white)</string>
|
||||
<string name="BeaconSun">Viewing sun direction beacon (orange)</string>
|
||||
<string name="BeaconMoon">Viewing moon direction beacon (purple)</string>
|
||||
|
|
|
|||
|
|
@ -384,7 +384,7 @@
|
|||
<text name="Teleport Routing: ">
|
||||
テレポート経路:
|
||||
</text>
|
||||
<combo_box name="landing type" tool_tip="テレポート経路‐あなたの土地へのテレポート経路を選択してください。">
|
||||
<combo_box name="landing type" tool_tip="テレポート経路-あなたの土地へのテレポート経路を選択してください。">
|
||||
<combo_box.item label="不可" name="Blocked"/>
|
||||
<combo_box.item label="ランディング地点のみ" name="LandingPoint"/>
|
||||
<combo_box.item label="どこでも可能" name="Anywhere"/>
|
||||
|
|
|
|||
|
|
@ -5,10 +5,11 @@
|
|||
表示:
|
||||
</text>
|
||||
<check_box label="シーン内の光源のバウンディングボックス" name="lights_bounding_boxes"/>
|
||||
<check_box label="リージョンのコーナー" name="fsregioncornerbeacons"/>
|
||||
<check_box label="ビーコン" name="beacons"/>
|
||||
<check_box label="ハイライト" name="highlights"/>
|
||||
<check_box label="ビーコン情報をビューアウィンドウに載せる" name="FSRenderBeaconText"/>
|
||||
<text name="beacon_width_label" tool_tip="ビーコンの幅">
|
||||
<text name="beacon_width_label" tool_tip="ビーコンの幅を設定します。">
|
||||
幅:
|
||||
</text>
|
||||
<text name="label_objects">
|
||||
|
|
|
|||
|
|
@ -19,9 +19,10 @@
|
|||
<panel_camera_item name="front_view" tool_tip="前面ビューにします。"/>
|
||||
<panel_camera_item name="group_view" tool_tip="サイドビューにします。"/>
|
||||
<panel_camera_item name="rear_view" tool_tip="後方ビューにします。"/>
|
||||
<panel_camera_item name="tpp_view" tool_tip="三人称ビューにします。"/>
|
||||
<panel_camera_item name="object_view" tool_tip="オブジェクトビューにします。"/>
|
||||
<panel_camera_item name="mouselook_view" tool_tip="マウスルックビューにします。"/>
|
||||
<panel_camera_item name="reset_view" tool_tip="視野をリセットします。"/>
|
||||
<panel_camera_item name="reset_view" tool_tip="ビューをリセットします。"/>
|
||||
</panel>
|
||||
<panel name="zoom">
|
||||
<layout_stack name="camera_view_layout_stack">
|
||||
|
|
|
|||
|
|
@ -39,31 +39,14 @@
|
|||
</layout_stack>
|
||||
</panel>
|
||||
<panel name="buttons_view">
|
||||
<panel_camera_item name="front_view" tool_tip="前方ビュー">
|
||||
<panel_camera_item.text name="front_view_text">
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<panel_camera_item name="group_view" tool_tip="側方ビュー">
|
||||
<panel_camera_item.text name="group_view_text">
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<panel_camera_item name="rear_view" tool_tip="後方ビュー">
|
||||
<panel_camera_item.text name="rear_view_text">
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<panel_camera_item name="front_view" tool_tip="前方ビューにします。"/>
|
||||
<panel_camera_item name="group_view" tool_tip="サイドビューにします。"/>
|
||||
<panel_camera_item name="rear_view" tool_tip="後方ビューにします。"/>
|
||||
<panel_camera_item name="tpp_view" tool_tip="三人称ビューにします。"/>
|
||||
</panel>
|
||||
<panel name="buttons">
|
||||
<panel_camera_item name="object_view" tool_tip="オブジェクトビュー">
|
||||
<panel_camera_item.text name="object_view_text">
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<panel_camera_item name="mouselook_view" tool_tip="マウスルックビュー">
|
||||
<panel_camera_item.text name="mouselook_view_text">
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<panel_camera_item name="reset_view" tool_tip="ビューをリセットします。">
|
||||
<panel_camera_item.text name="reset_view_text">
|
||||
</panel_camera_item.text>
|
||||
</panel_camera_item>
|
||||
<panel_camera_item name="object_view" tool_tip="オブジェクトビューにします。"/>
|
||||
<panel_camera_item name="mouselook_view" tool_tip="マウスルックビューにします。"/>
|
||||
<panel_camera_item name="reset_view" tool_tip="ビューをリセットします。"/>
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -4,16 +4,16 @@
|
|||
[OBJECT]をハードディスクにバックアップ…
|
||||
</floater.string>
|
||||
<floater.string name="title_working">
|
||||
[OBJECT]のバックアップ‐情報を集めています…
|
||||
[OBJECT]のバックアップ-情報を集めています…
|
||||
</floater.string>
|
||||
<floater.string name="title_inventory">
|
||||
[OBJECT]のバックアップ‐インベントリを取得しています…
|
||||
[OBJECT]のバックアップ-インベントリを取得しています…
|
||||
</floater.string>
|
||||
<floater.string name="title_assets">
|
||||
[OBJECT]のバックアップ‐アセットを取得しています…
|
||||
[OBJECT]のバックアップ-アセットを取得しています…
|
||||
</floater.string>
|
||||
<floater.string name="title_textures">
|
||||
[OBJECT]のバックアップ‐テクスチャを取得しています…
|
||||
[OBJECT]のバックアップ-テクスチャを取得しています…
|
||||
</floater.string>
|
||||
<layout_stack name="resizing_stack">
|
||||
<layout_panel name="control_panel">
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@
|
|||
新しいグループを作成…
|
||||
</floater.string>
|
||||
<floater.string name="title_loading">
|
||||
グループのプロフィール‐読み込んでいます…
|
||||
グループのプロフィール-読み込んでいます…
|
||||
</floater.string>
|
||||
<floater.string name="title">
|
||||
グループのプロフィール‐[NAME]
|
||||
グループのプロフィール-[NAME]
|
||||
</floater.string>
|
||||
</floater>
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
<name_list.columns name="amount" label="金額" />
|
||||
</name_list>
|
||||
<text name="summary">
|
||||
支払ったL$ [PAID]‐受け取ったL$ [RECEIVED]
|
||||
支払ったL$ [PAID]-受け取ったL$ [RECEIVED]
|
||||
</text>
|
||||
<check_box label="閉じている時も記録" name="FSAlwaysTrackPayments" tool_tip="入金記録のウィンドウが閉じている場合でも、常に入金を記録するようにします。" />
|
||||
<button name="Clear" label="クリア" />
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="performance" title="グラフィックの最適化">
|
||||
<floater.string name="frame_stats">
|
||||
フレーム:[TOT_FRAME_TIME]㎳‐背景:[SCENERY_FRAME_PCT]% アバター:[AV_FRAME_PCT]% UI[UI_FRAME_PCT]% HUD:[HUDS_FRAME_PCT]% スワップ:[SWAP_FRAME_PCT]% タスク:[IDLE_FRAME_PCT]%
|
||||
フレーム:[TOT_FRAME_TIME]㎳-背景:[SCENERY_FRAME_PCT]% アバター:[AV_FRAME_PCT]% UI[UI_FRAME_PCT]% HUD:[HUDS_FRAME_PCT]% スワップ:[SWAP_FRAME_PCT]% タスク:[IDLE_FRAME_PCT]%
|
||||
</floater.string>
|
||||
<floater.string name="limit_fps">
|
||||
ユーザによる制限@[FPSCAP]FPS
|
||||
|
|
@ -54,7 +54,7 @@
|
|||
<text name="targetfps_desc">
|
||||
目標フレームレート(fps)
|
||||
</text>
|
||||
<spinner name="target_fps" tool_tip="目標FPS‐希望するFPSのレベルです。ビューアはグラフィック設定を調整することでこれを達成しようとします。"/>
|
||||
<spinner name="target_fps" tool_tip="目標FPS-希望するFPSのレベルです。ビューアはグラフィック設定を調整することでこれを達成しようとします。"/>
|
||||
<button label="開始" label_selected="停止" name="AutoTuneFPS" tool_tip="ビューアは目標FPSを満たすように設定を調整しようとします。"/>
|
||||
<check_box label="継続的に" name="AutoTuneContinuous" tool_tip="ビューアは、フローターが閉じられても停止するまで、目標FPSを満たすように設定を継続的に調整します。無効にすると、「自動調整」ボタンをクリックすると、現在の設定に合わせて調整され停止します。"/>
|
||||
<button name="PrefSaveButton" tool_tip="将来使用するために、現在の設定をデフォルトとして保存します。"/>
|
||||
|
|
|
|||
|
|
@ -200,6 +200,7 @@
|
|||
入/出:
|
||||
</text>
|
||||
<slider name="av_position_inout" tool_tip="選択したアバターを内側または外側に移動します。"/>
|
||||
<check_box name="unlock_pelvis_for_bvh_save_checkbox" label="BVHで骨盤をロック解除" tool_tip="このポーズをBVHに保存すると、骨盤は「ロック」されません。つまり、ワールド内の他のアニメーションでアバター全体を「動かす」ことができます。このポーズを他のポーズの「上」で再生したい場合は、この機能を使用してください。"/>
|
||||
<!-- to make this panel behaves like the others in code-behind, it has an invisible list -->
|
||||
<scroll_list name="entireAv_joint_scroll">
|
||||
<scroll_list.columns label="身体部位" name="joint"/>
|
||||
|
|
@ -257,11 +258,11 @@
|
|||
</text>
|
||||
<slider name="trackpad_sensitivity_slider" tool_tip="トラックボールの感度を調整します。"/>
|
||||
<check_box name="stop_posing_on_close_checkbox" label="閉じたらポーズを止める" tool_tip="ポーズを止めないことは、多くの作業を行っていて、誤ってポーズを失いたくない場合に役に立ちます。"/>
|
||||
<check_box name="reset_base_rotation_on_edit_checkbox" label="編集時にベース回転をリセット" tool_tip="回転を初めて編集するときは、ゼロにリセットします。これにより、作業でポーズを保存できます。(差分ではなく、読み込み/保存を参照)ゼロにエクスポートした各ジョイントの横に緑色のチェックマークが表示されます。"/>
|
||||
<check_box name="also_save_bvh_checkbox" label="保存時にBVHを書き込む**" tool_tip="ポーズを保存するときに、BVHファイルも作成します。このファイルは、「ビルド」>「アップロード」>「アニメーション」からアップロードして、自分自身または他のユーザーにインワールドのポーズを与えることができます。BVHにはオリジナルの作業が必要なので、ジョイントの「ベース」をゼロにリセットする必要があります。"/>
|
||||
<check_box name="also_save_bvh_checkbox" label="保存時にBVHを書き込む" tool_tip="ポーズを保存するときに、BVHファイルも作成します。このファイルは、「ビルド」>「アップロード」>「アニメーション」からアップロードして、自分自身または他のユーザーにインワールドのポーズを与えることができます。BVHにはオリジナルの作業が必要なので、ジョイントの「ベース」をゼロにリセットする必要があります。"/>
|
||||
<check_box name="confirm_overwrite_on_save_checkbox" label="上書きを確認" tool_tip="ポーズを保存するときに、ファイルがすでに存在する場合は、上書きすることを確認するために、もう一度保存ボタンをクリックする必要があります。"/>
|
||||
<check_box name="natural_direction_checkbox" label="自然な配置を使用する" tool_tip="デフォルトでは、スケルトンの関節の回転は不自然です。これにより、ポーズが複雑になります。チェックすると、関節がより自然に回転します。"/>
|
||||
<check_box name="show_joint_markers_checkbox" label="ジョイント部にマーカーを表示" tool_tip="視覚的なポージングにジョイント部の選択を支援するための小さなインジケーターを表示します。"/>
|
||||
<check_box name="dof_edit_mode_checkbox" label="編集モードでDoFを有効化" tool_tip="マニピュレータを使用すると、通常は被写界深度が自動的に無効になります。これにより、ポーズやプリムを編集するときに被写界深度がオンのままになります。"/>
|
||||
</panel>
|
||||
</tab_container>
|
||||
<button name="toggleVisualManipulators" tool_tip="視覚マニピュレータのオン/オフを切り替えます。"/>
|
||||
|
|
@ -306,6 +307,7 @@
|
|||
<button name="button_redo_change" tool_tip="最後に元に戻した変更をやり直します。"/>
|
||||
<button name="poser_joint_reset" tool_tip="ダブルクリックすると、選択したすべての身体部位が最初にポーズを開始したときの状態に戻ります。"/>
|
||||
<button name="delta_mode_toggle" tool_tip="複数のジョイントを変更する場合、すべてのジョイントが同じ回転になるのではなく、それぞれが同じ量だけ変更されます。ジンバルロックを解除するためにも使用されます。"/>
|
||||
<button name="toggle_LockWorldRotation" tool_tip="選択した手足の回転をワールド内でロックします。ワールド内でロックされた手足は、親側の手足が動いてもワールド内で同じ回転を維持します。例えば、目をロックして頭を回しても、目は(ほぼ)同じ方向を向き続けます。"/>
|
||||
<button label="ミラー" name="button_toggleMirrorRotation" tool_tip="鏡のように反対側の関節を変えます。"/>
|
||||
<button label="対称" name="button_toggleSympatheticRotation" tool_tip="反対側のジョイントも同様に変更します。"/>
|
||||
<!-- leftとleft_padは削除しないこと -->
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
24bitのTarga(.tga)形式で画像を保存してください。
|
||||
</text>
|
||||
<text name="uploaded_size_text">
|
||||
アップロードしたサイズ:[X_RES]×[Y_RES],[ALPHA]
|
||||
アップロードしたサイズ:[X_RES]✕[Y_RES],[ALPHA]
|
||||
</text>
|
||||
<check_box label="可逆圧縮" name="lossless_check"/>
|
||||
<check_box name="temp_check" label="一時的(無料)" tool_tip="アセットを一時的なものに設定します。つまり、アセットは無料ですが、その代わり、アセットが存在しなくなるまでの短期間のみ有効となります。"/>
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue