Merge branch 'master' of https://github.com/FirestormViewer/phoenix-firestorm
commit
246a60a75c
|
|
@ -6,6 +6,10 @@ on:
|
|||
description: 'Include tracy profiling builds'
|
||||
required: false
|
||||
default: 'false'
|
||||
override_signing:
|
||||
description: 'Manual builds are not signned by default. Force code signing for this run.'
|
||||
required: false
|
||||
default: 'false'
|
||||
push:
|
||||
branches:
|
||||
- "Firestorm*.*.*"
|
||||
|
|
@ -141,7 +145,18 @@ jobs:
|
|||
echo "Building for channel ${FS_RELEASE_CHAN}"
|
||||
viewer_channel=${FS_RELEASE_CHAN}
|
||||
shell: bash
|
||||
|
||||
- name: Check if release type is signable
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
if [[ "${FS_RELEASE_TYPE}" == "Release" || "${FS_RELEASE_TYPE}" == "Beta" ]]; then
|
||||
CODESIGNING_ENABLED=true
|
||||
else
|
||||
CODESIGNING_ENABLED=false
|
||||
fi
|
||||
echo "CODESIGNING_ENABLED=${CODESIGNING_ENABLED}" >> $GITHUB_ENV
|
||||
echo "Codesigning enabled: ${CODESIGNING_ENABLED}"
|
||||
shell: bash
|
||||
|
||||
- name: Get the code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
|
|
@ -261,7 +276,7 @@ jobs:
|
|||
done
|
||||
shell: bash
|
||||
|
||||
- name: Set expiration days based on FS_RELEASE_TYPE
|
||||
- name: Set expiration days and codesigning based on FS_RELEASE_TYPE
|
||||
run: |
|
||||
case "${{ env.FS_RELEASE_TYPE }}" in
|
||||
"Nightly" | "Manual" | "Profiling")
|
||||
|
|
@ -302,6 +317,78 @@ jobs:
|
|||
autobuild configure -c ReleaseFS -A${addrsize} -- --package --chan ${{env.FS_RELEASE_CHAN}} ${{env.EXTRA_ARGS}} ${{env.FS_GRID}}
|
||||
echo "BUGSPLAT_DB=$BUGSPLAT_DB" >> $GITHUB_ENV
|
||||
shell: bash
|
||||
- name: Generate metadata.json
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
echo '{
|
||||
"Endpoint": "${{ secrets.AZURE_ENDPOINT }}",
|
||||
"CodeSigningAccountName": "${{ secrets.AZURE_CODE_SIGNING_NAME }}",
|
||||
"CertificateProfileName": "${{ secrets.AZURE_CERT_PROFILE_NAME }}",
|
||||
"ExcludeCredentials": [
|
||||
"ManagedIdentityCredential"
|
||||
]
|
||||
}' > ${{github.workspace}}/metadata.json
|
||||
echo "CODESIGNING_METADATA_PATH=${{github.workspace}}/metadata.json" >> $env:GITHUB_ENV
|
||||
shell: pwsh
|
||||
- name: Validate Windows 10 SDK version and find signtool.exe IFF codesigning is enabled for these builds or overridden
|
||||
if: ${{ runner.os == 'Windows' && (env.CODESIGNING_ENABLED == 'true' || github.event.inputs.override_signing == 'true') }}
|
||||
id: validate-sdk
|
||||
run: |
|
||||
try {
|
||||
$Arch = ($env:RUNNER_ARCH).ToLower()
|
||||
$SearchBase = "${env:ProgramFiles(x86)}\Windows Kits\10\bin"
|
||||
|
||||
"Searching `"$SearchBase`" for signtool ($Arch)..."
|
||||
$Tool = Get-ChildItem $SearchBase -Recurse -Force -ErrorAction SilentlyContinue |
|
||||
Where-Object {$_.Name -eq 'signtool.exe' -and $_.Directory -like "*\$Arch"} |
|
||||
Sort-Object -Descending |
|
||||
Select-Object -First 1
|
||||
|
||||
if (!($Tool)) {throw [System.IO.FileNotFoundException]::new('File not found.', 'signtool.exe')}
|
||||
|
||||
'Adding signtool to PATH'
|
||||
$Tool.Directory.FullName | Out-File $env:GITHUB_PATH -Append
|
||||
"signtool-$Arch=$($Tool.FullName)" | Out-File $env:GITHUB_OUTPUT -Append
|
||||
$env:PATH = "$($Tool.Directory.FullName);$env:PATH"
|
||||
|
||||
signtool.exe /h
|
||||
} catch {
|
||||
Write-Output "::error::$($_.Exception)"
|
||||
Write-Output '::endgroup::'
|
||||
|
||||
exit 1
|
||||
}
|
||||
echo "SIGNTOOL_PATH=signtool.exe" >> $env:GITHUB_ENV
|
||||
shell: pwsh
|
||||
- name: Install nuget.exe
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
Invoke-WebRequest -Uri https://dist.nuget.org/win-x86-commandline/latest/nuget.exe -OutFile nuget.exe
|
||||
shell: pwsh
|
||||
|
||||
- name: Install Microsoft.Trusted.Signing.Client
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
.\nuget.exe install Microsoft.Trusted.Signing.Client -Version 1.0.53 -OutputDirectory .
|
||||
shell: pwsh
|
||||
|
||||
- name: Locate Azure.CodeSigning.Dlib.dll
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
$dllPath = (Get-ChildItem ".\Microsoft.Trusted.Signing.Client.1.0.53\bin\x64\Azure.CodeSigning.Dlib.dll" -Recurse -File | Select-Object -First 1).FullName
|
||||
if (-not $dllPath) {
|
||||
Write-Error "Azure.CodeSigning.Dlib.dll not found."
|
||||
exit 1
|
||||
}
|
||||
echo "CODESIGNING_DLIB_PATH=$dllPath" >> $env:GITHUB_ENV
|
||||
shell: pwsh
|
||||
- name: Prep env for Trusted code on Windows only
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
echo "AZURE_CLIENT_ID=${{ secrets.AZURE_CLIENT_ID }}" >> $GITHUB_ENV
|
||||
echo "AZURE_CLIENT_SECRET=${{ secrets.AZURE_CLIENT_SECRET }}" >> $GITHUB_ENV
|
||||
echo "AZURE_TENANT_ID=${{ secrets.AZURE_TENANT_ID }}" >> $GITHUB_ENV
|
||||
shell: bash
|
||||
- name: build
|
||||
id: build
|
||||
run: autobuild build -c ReleaseFS -A${addrsize} --no-configure
|
||||
|
|
|
|||
|
|
@ -6,14 +6,14 @@ on:
|
|||
build_run_number:
|
||||
description: 'GitHub Run Number (per build_viewer.yml workflow)'
|
||||
required: true
|
||||
policy:
|
||||
description: 'Policy to sign binaries'
|
||||
required: true
|
||||
type: choice
|
||||
default: "Test"
|
||||
options:
|
||||
- "Test"
|
||||
- "Release"
|
||||
# policy:
|
||||
# description: 'Policy to sign binaries'
|
||||
# required: true
|
||||
# type: choice
|
||||
# default: "Test"
|
||||
# options:
|
||||
# - "Test"
|
||||
# - "Release"
|
||||
# viewer_version:
|
||||
# description: 'viewer version not including build'
|
||||
# required: true
|
||||
|
|
@ -33,7 +33,7 @@ on:
|
|||
|
||||
jobs:
|
||||
find-setup-files:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: windows-latest
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
|
|
@ -69,7 +69,7 @@ jobs:
|
|||
sign-and-upload:
|
||||
name: Sign and Upload each Setup.exe
|
||||
needs: find-setup-files
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: windows-latest
|
||||
strategy:
|
||||
matrix:
|
||||
file: ${{ fromJson( needs.find-setup-files.outputs.setup_files) }}
|
||||
|
|
@ -83,6 +83,7 @@ jobs:
|
|||
curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.run_id }}/artifacts
|
||||
shell: bash
|
||||
|
||||
- name: Download Setup.exe Files Artifact
|
||||
uses: actions/download-artifact@v4
|
||||
|
|
@ -93,28 +94,49 @@ jobs:
|
|||
run: |
|
||||
mkdir -p to_sign
|
||||
cp "setup_exe_files/${{ matrix.file }}" to_sign/
|
||||
- name: Upload unsigned artifact
|
||||
shell: bash
|
||||
# - name: Upload unsigned artifact
|
||||
# id: upload-unsigned-artifact
|
||||
# uses: actions/upload-artifact@v4
|
||||
# with:
|
||||
# name: unsigned-artifact-${{ matrix.file }}
|
||||
# path: to_sign/${{ matrix.file }}
|
||||
|
||||
# - name: sign the file
|
||||
# uses: signpath/github-action-submit-signing-request@v1
|
||||
# env:
|
||||
# SIGNPATH_SIGNING_POLICY_SLUG: ${{ github.event.inputs.policy == 'Test' && vars.SIGNPATH_SIGNING_POLICY_SLUG_TEST || vars.SIGNPATH_SIGNING_POLICY_SLUG_RELEASE }}
|
||||
# with:
|
||||
# api-token: '${{ secrets.SIGNPATH_API_TOKEN }}'
|
||||
# organization-id: '${{ vars.SIGNPATH_ORGANIZATION_ID }}'
|
||||
# project-slug: '${{ vars.SIGNPATH_PROJECT_SLUG }}'
|
||||
# signing-policy-slug: '${{ env.SIGNPATH_SIGNING_POLICY_SLUG }}'
|
||||
# github-artifact-id: "${{steps.upload-unsigned-artifact.outputs.artifact-id}}"
|
||||
# wait-for-completion: true
|
||||
# output-artifact-directory: 'application-signed'
|
||||
- name: Azure Trusted Signing
|
||||
uses: azure/trusted-signing-action@v0.5.1
|
||||
with:
|
||||
azure-tenant-id: ${{ secrets.AZURE_TENANT_ID }}
|
||||
azure-client-id: ${{ secrets.AZURE_CLIENT_ID }}
|
||||
azure-client-secret: ${{ secrets.AZURE_CLIENT_SECRET }}
|
||||
endpoint: ${{ secrets.AZURE_ENDPOINT }}
|
||||
trusted-signing-account-name: ${{ secrets.AZURE_CODE_SIGNING_NAME }}
|
||||
certificate-profile-name: ${{ secrets.AZURE_CERT_PROFILE_NAME }}
|
||||
|
||||
# Sign all exes inside the folder
|
||||
files-folder: ${{ github.workspace }}\to_sign
|
||||
files-folder-filter: exe
|
||||
|
||||
# - name: Upload signed artifact
|
||||
# uses: actions/upload-artifact@v4
|
||||
# with:
|
||||
# name: signed-artifact-${{ matrix.file }}
|
||||
# path: ./application-signed
|
||||
# - name: Upload unsigned artifact
|
||||
- name: Upload signed artifact
|
||||
id: upload-unsigned-artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: unsigned-artifact-${{ matrix.file }}
|
||||
path: to_sign/${{ matrix.file }}
|
||||
|
||||
- name: sign the file
|
||||
uses: signpath/github-action-submit-signing-request@v1
|
||||
env:
|
||||
SIGNPATH_SIGNING_POLICY_SLUG: ${{ github.event.inputs.policy == 'Test' && vars.SIGNPATH_SIGNING_POLICY_SLUG_TEST || vars.SIGNPATH_SIGNING_POLICY_SLUG_RELEASE }}
|
||||
with:
|
||||
api-token: '${{ secrets.SIGNPATH_API_TOKEN }}'
|
||||
organization-id: '${{ vars.SIGNPATH_ORGANIZATION_ID }}'
|
||||
project-slug: '${{ vars.SIGNPATH_PROJECT_SLUG }}'
|
||||
signing-policy-slug: '${{ env.SIGNPATH_SIGNING_POLICY_SLUG }}'
|
||||
github-artifact-id: "${{steps.upload-unsigned-artifact.outputs.artifact-id}}"
|
||||
wait-for-completion: true
|
||||
output-artifact-directory: 'application-signed'
|
||||
|
||||
- name: Upload signed artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: signed-artifact-${{ matrix.file }}
|
||||
path: ./application-signed
|
||||
path: to_sign\${{ matrix.file }}
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
* @file
|
||||
* @brief
|
||||
*
|
||||
* $LicenseInfo:firstyear=2024&license=fsviewerlgpl$
|
||||
* $LicenseInfo:firstyear=2025&license=fsviewerlgpl$
|
||||
* Phoenix Firestorm Viewer Source Code
|
||||
* Copyright (C) 2024, The Phoenix Firestorm Project, Inc.
|
||||
* Copyright (C) 2025, The Phoenix Firestorm Project, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
|
|
|
|||
|
|
@ -4193,7 +4193,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>license_file</key>
|
||||
<string>docs/LICENSE-source.txt</string>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (c) 2024, The Phoenix Firestorm Project, Inc.</string>
|
||||
<string>Copyright (c) 2025, The Phoenix Firestorm Project, Inc.</string>
|
||||
<key>version_file</key>
|
||||
<string>newview/viewer_version.txt</string>
|
||||
<key>name</key>
|
||||
|
|
|
|||
|
|
@ -2655,7 +2655,7 @@ if (DARWIN)
|
|||
set(MACOSX_BUNDLE_BUNDLE_NAME "Firestorm")
|
||||
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}")
|
||||
set(MACOSX_BUNDLE_BUNDLE_VERSION "${VIEWER_SHORT_VERSION}${VIEWER_MACOSX_PHASE}${VIEWER_REVISION}")
|
||||
set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2010-2024 The Phoenix Firestorm Project, Inc.")
|
||||
set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2010-2025 The Phoenix Firestorm Project, Inc.")
|
||||
set(MACOSX_BUNDLE_NSMAIN_NIB_FILE "Firestorm.nib")
|
||||
set(MACOSX_BUNDLE_NSPRINCIPAL_CLASS "LLApplication")
|
||||
|
||||
|
|
|
|||
|
|
@ -3,4 +3,4 @@
|
|||
CFBundleName = "Firestorm";
|
||||
|
||||
CFBundleShortVersionString = "Firestorm version %%VERSION%%";
|
||||
CFBundleGetInfoString = "Firestorm version %%VERSION%%, Copyright 2010-2024 The Phoenix Firestorm Project, Inc.";
|
||||
CFBundleGetInfoString = "Firestorm version %%VERSION%%, Copyright 2010-2025 The Phoenix Firestorm Project, Inc.";
|
||||
|
|
|
|||
|
|
@ -9242,6 +9242,20 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<!-- <FS:minerjr> [FIRE-35083] Floater_stats.xml has in correct stat_view setting for materials -->
|
||||
<!-- Missing boolean flag for remembering the open/close state of the Materials stat_view of the floater_stats.xml file -->
|
||||
<key>OpenDebugStatMaterials</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Expand Materials performance stats display</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<!-- </FS:minerjr> [FIRE-35083] -->
|
||||
<key>OpenDebugStatTexture</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -59,25 +59,55 @@ class FSViewerManifest:
|
|||
def fs_channel_unique(self):
|
||||
return self.channel().replace("Firestorm", "").strip()
|
||||
|
||||
def fs_sign_win_binaries( self ):
|
||||
try:
|
||||
subprocess.check_call(["signtool.exe","sign","/n","Phoenix","/d","Firestorm","/du","http://www.phoenixviewer.com","/t","http://timestamp.verisign.com/scripts/timstamp.dll",self.args['configuration']+"\\firestorm-bin.exe"],
|
||||
stderr=subprocess.PIPE,stdout=subprocess.PIPE)
|
||||
subprocess.check_call(["signtool.exe","sign","/n","Phoenix","/d","Firestorm","/du","http://www.phoenixviewer.com","/t","http://timestamp.verisign.com/scripts/timstamp.dll",self.args['configuration']+"\\slplugin.exe"],
|
||||
stderr=subprocess.PIPE,stdout=subprocess.PIPE)
|
||||
subprocess.check_call(["signtool.exe","sign","/n","Phoenix","/d","Firestorm","/du","http://www.phoenixviewer.com","/t","http://timestamp.verisign.com/scripts/timstamp.dll",self.args['configuration']+"\\SLVoice.exe"],
|
||||
stderr=subprocess.PIPE,stdout=subprocess.PIPE)
|
||||
subprocess.check_call(["signtool.exe","sign","/n","Phoenix","/d","Firestorm","/du","http://www.phoenixviewer.com","/t","http://timestamp.verisign.com/scripts/timstamp.dll",self.args['configuration']+"\\"+self.final_exe()],
|
||||
stderr=subprocess.PIPE,stdout=subprocess.PIPE)
|
||||
except Exception as e:
|
||||
print("Couldn't sign final binary. Tried to sign %s" % self.args['configuration']+"\\"+self.final_exe())
|
||||
def fs_sign_win_binaries(self):
|
||||
signtool_path = os.getenv('SIGNTOOL_PATH')
|
||||
codesigning_dlib_path = os.getenv('CODESIGNING_DLIB_PATH')
|
||||
metadata_file = os.getenv("CODESIGNING_METADATA_PATH")
|
||||
# at some point we might want to sign other DLLs as well.
|
||||
executable_paths = [
|
||||
# self.args['configuration'] + "\\firestorm-bin.exe", # no need to sign this we are not packaging it.
|
||||
self.args['configuration'] + "\\slplugin.exe",
|
||||
self.args['configuration'] + "\\SLVoice.exe",
|
||||
self.args['configuration'] + "\\llwebrtc.dll",
|
||||
self.args['configuration'] + "\\llplugin\\dullahan_host.exe",
|
||||
self.args['configuration'] + "\\" + self.final_exe()
|
||||
]
|
||||
|
||||
if not signtool_path or not codesigning_dlib_path:
|
||||
print("Signing configuration is missing. Skipping signing process.")
|
||||
return
|
||||
|
||||
print("Signing executables.")
|
||||
for exe_path in executable_paths:
|
||||
try:
|
||||
subprocess.check_call([
|
||||
signtool_path, "sign", "/v", "/debug", "/fd", "SHA256",
|
||||
"/tr", "http://timestamp.acs.microsoft.com", "/td", "SHA256",
|
||||
"/dlib", codesigning_dlib_path, "/dmdf", metadata_file, exe_path
|
||||
], stderr=subprocess.PIPE, stdout=subprocess.PIPE)
|
||||
print(f"Signed {exe_path}")
|
||||
except Exception as e:
|
||||
print(f"Couldn't sign binary: {exe_path}. Error: {e}")
|
||||
|
||||
def fs_sign_win_installer(self, substitution_strings):
|
||||
signtool_path = os.getenv('SIGNTOOL_PATH')
|
||||
codesigning_dlib_path = os.getenv('CODESIGNING_DLIB_PATH')
|
||||
metadata_file = os.getenv("CODESIGNING_METADATA_PATH")
|
||||
installer_path = self.args['configuration'] + "\\" + substitution_strings['installer_file']
|
||||
|
||||
if not signtool_path or not codesigning_dlib_path:
|
||||
print("Signing configuration is missing. Skipping signing process.")
|
||||
return
|
||||
print("Signing installer.")
|
||||
|
||||
def fs_sign_win_installer( self, substitution_strings ):
|
||||
try:
|
||||
subprocess.check_call(["signtool.exe","sign","/n","Phoenix","/d","Firestorm","/du","http://www.phoenixviewer.com",self.args['configuration']+"\\"+substitution_strings['installer_file']],stderr=subprocess.PIPE,stdout=subprocess.PIPE)
|
||||
subprocess.check_call([
|
||||
signtool_path, "sign", "/v", "/debug", "/fd", "SHA256",
|
||||
"/tr", "http://timestamp.acs.microsoft.com", "/td", "SHA256",
|
||||
"/dlib", codesigning_dlib_path, "/dmdf", metadata_file, installer_path
|
||||
], stderr=subprocess.PIPE, stdout=subprocess.PIPE)
|
||||
except Exception as e:
|
||||
print("Working directory: %s" % os.getcwd())
|
||||
print("Couldn't sign windows installer. Tried to sign %s" % self.args['configuration']+"\\"+substitution_strings['installer_file'])
|
||||
print(f"Couldn't sign windows installer: {installer_path}. Error: {e}")
|
||||
|
||||
def fs_delete_linux_symbols( self ):
|
||||
debugDir = os.path.join( self.get_dst_prefix(), "bin", ".debug" )
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ Unicode true # Enable unicode support
|
|||
##!include "%%SOURCE%%\installers\windows\lang_pt-br.nsi"
|
||||
!include "%%SOURCE%%\installers\windows\lang_ru.nsi"
|
||||
##!include "%%SOURCE%%\installers\windows\lang_tr.nsi"
|
||||
##!include "%%SOURCE%%\installers\windows\lang_zh.nsi"
|
||||
!include "%%SOURCE%%\installers\windows\lang_zh.nsi"
|
||||
|
||||
# *TODO: Move these into the language files themselves
|
||||
##LangString LanguageCode ${LANG_DANISH} "da"
|
||||
|
|
@ -77,7 +77,7 @@ LangString LanguageCode ${LANG_POLISH} "pl"
|
|||
##LangString LanguageCode ${LANG_PORTUGUESEBR} "pt"
|
||||
LangString LanguageCode ${LANG_RUSSIAN} "ru"
|
||||
##LangString LanguageCode ${LANG_TURKISH} "tr"
|
||||
##LangString LanguageCode ${LANG_TRADCHINESE} "zh"
|
||||
LangString LanguageCode ${LANG_TRADCHINESE} "zh"
|
||||
|
||||
# This placeholder is replaced by viewer_manifest.py
|
||||
%%INST_VARS%%
|
||||
|
|
@ -240,8 +240,19 @@ Function CheckCPUFlagsAVX2
|
|||
; AVX2 not supported
|
||||
; Replace %DLURL% in the language string with the URL
|
||||
${WordReplace} "$(MissingAVX2)" "%DLURL%" "${DL_URL}-legacy-cpus" "+*" $3
|
||||
MessageBox MB_OK "$3"
|
||||
MessageBox MB_OK "$3"
|
||||
${OpenURL} "${DL_URL}-legacy-cpus"
|
||||
|
||||
MessageBox MB_YESNO $(AVX2OverrideConfirmation) IDNO NoInstall
|
||||
MessageBox MB_OKCANCEL $(AVX2OverrideNote) IDCANCEL NoInstall
|
||||
|
||||
; User chose to proceed
|
||||
Pop $3
|
||||
Pop $2
|
||||
Pop $1
|
||||
Return
|
||||
|
||||
NoInstall:
|
||||
Quit
|
||||
|
||||
OK_AVX2:
|
||||
|
|
@ -579,7 +590,7 @@ WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "DisplayVersion" "${VERSION_LONG}
|
|||
# <FS:Ansariel> Separate install sizes for 32 and 64 bit
|
||||
#WriteRegDWORD SHELL_CONTEXT "${MSUNINSTALL_KEY}" "EstimatedSize" "0x0001D500" # ~117 MB
|
||||
${If} ${IS64BIT} == "1"
|
||||
WriteRegDWORD SHELL_CONTEXT "${MSUNINSTALL_KEY}" "EstimatedSize" "0x00064000" # 400 MB
|
||||
WriteRegDWORD SHELL_CONTEXT "${MSUNINSTALL_KEY}" "EstimatedSize" "0x00098800" # 610 MB
|
||||
${Else}
|
||||
WriteRegDWORD SHELL_CONTEXT "${MSUNINSTALL_KEY}" "EstimatedSize" "0x00061800" # 390 MB
|
||||
${EndIf}
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -57,8 +57,12 @@ LangString CheckAdministratorUnInstMB ${LANG_GERMAN} 'Sie besitzen ungenügende
|
|||
|
||||
; checkcpuflags
|
||||
LangString MissingSSE2 ${LANG_GERMAN} "Dieser PC besitzt möglicherweise keinen Prozessor mit SSE2-Unterstützung, die für die Ausführung von Firestorm ${VERSION_LONG} benötigt wird. Trotzdem installieren?"
|
||||
|
||||
; Extended cpu checks (AVX2)
|
||||
LangString MissingAVX2 ${LANG_GERMAN} "Ihre CPU unterstützt keine AVX2-Anweisungen. Bitte laden Sie die Version für ältere CPUs von %DLURL%-legacy-cpus/ herunter."
|
||||
LangString AVX2Available ${LANG_GERMAN} "Ihre CPU unterstützt AVX2-Anweisungen. Sie können die für AVX2 optimierte Version für eine bessere Leistung unter %DLURL%/ herunterladen. Möchten Sie sie jetzt herunterladen?"
|
||||
LangString AVX2OverrideConfirmation ${LANG_GERMAN} "Falls Sie glauben, dass Ihr PC AVX2-Anweisungen unterstützt, können Sie die Installation dennoch durchführen. Möchten Sie fortfahren?"
|
||||
LangString AVX2OverrideNote ${LANG_GERMAN} "Durch das Übersteuern des Installers installieren Sie möglicherweise eine Version, die beim Starten direkt abstürzt. In diesem Fall installieren Sie bitte stattdessen die Standard-Version."
|
||||
|
||||
; closesecondlife function (install)
|
||||
LangString CloseSecondLifeInstDP ${LANG_GERMAN} "Warten auf die Beendigung von Firestorm ..."
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -161,7 +161,7 @@ BEGIN
|
|||
VALUE "FileDescription", "Firestorm"
|
||||
VALUE "FileVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}"
|
||||
VALUE "InternalName", "Firestorm"
|
||||
VALUE "LegalCopyright", "Copyright \251 2010-2024, The Phoenix Firestorm Project, Inc."
|
||||
VALUE "LegalCopyright", "Copyright \251 2010-2025, The Phoenix Firestorm Project, Inc."
|
||||
VALUE "OriginalFilename", "Firestorm.exe"
|
||||
VALUE "ProductName", "Firestorm"
|
||||
VALUE "ProductVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}"
|
||||
|
|
|
|||
|
|
@ -155,13 +155,18 @@
|
|||
stat="glboundmemstat"
|
||||
setting="DebugStatModeBoundMem"/>
|
||||
</stat_view>
|
||||
<!-- <FS:minerjr> [FIRE-35083] Floater_stats.xml has in correct stat_view setting for materials -->
|
||||
<!-- The material stat_view had the incorrect setting, which was causing and convert_from_llsd warning and a bugsplat in Debug mode -->
|
||||
<!-- It also prevented the material count of the floater_stats from remembering its open/close state -->
|
||||
<stat_view name="material"
|
||||
label="Material"
|
||||
setting="DebugStatModeMaterials">
|
||||
setting="OpenDebugStatMaterials">
|
||||
<stat_bar name="nummaterials"
|
||||
label="Count"
|
||||
stat="nummaterials"/>
|
||||
stat="nummaterials"
|
||||
setting="DebugStatModeMaterials"/>
|
||||
</stat_view>
|
||||
<!-- </FS:minerjr> [FIRE-35083] -->
|
||||
<stat_view name="network"
|
||||
label="Network"
|
||||
setting="OpenDebugStatNet">
|
||||
|
|
|
|||
|
|
@ -214,6 +214,7 @@
|
|||
<slider name="trackpad_sensitivity_slider" tool_tip="Règle la sensibilité du trackpad"/>
|
||||
<check_box name="stop_posing_on_close_checkbox" label="Arrêt pose si fermeture" tool_tip="Ne pas arrêter votre pose peut être utile si vous travaillez beaucoup et que vous ne voulez pas la perdre accidentellement."/>
|
||||
<check_box name="reset_base_rotation_on_edit_checkbox" label="Réinitialisation de la rotation" tool_tip="Lorsque vous modifiez une rotation pour la première fois, la remet à zéro. Cela signifie que votre travail peut enregistrer une pose (et non une différence - voir charger/enregistrer). Une coche verte apparaît à côté de chaque articulation dont l'exportation a été remise à zéro."/>
|
||||
<check_box name="also_save_bvh_checkbox" label="Ajouter BVH en enregistrant**" tool_tip="Lorsque vous enregistrez votre pose, écrivez également un fichier BVH, qui peut être téléchargé via 'Construire > Charger > Animation' pour poser vous-même ou d'autres personnes dans le monde. Pour ce faire, les articulations doivent remettre leur « base » à zéro, car le BVH nécessite que l'on travaille sur l'original."/>
|
||||
</panel>
|
||||
</tab_container>
|
||||
</panel>
|
||||
|
|
@ -226,7 +227,7 @@
|
|||
<button name="undo_change" tool_tip="Annuler la dernière rotation" />
|
||||
<button name="button_redo_change" tool_tip="Rétablir la dernière modification annulée" />
|
||||
<button name="refresh_avatars" tool_tip="Double-cliquez pour remettre toutes les parties du corps sélectionnées dans l'état où elles se trouvaient lorsque vous avez commencé à poser." />
|
||||
<button name="delta_mode_toggle" tool_tip="Si vous modifiez plusieurs articulations, chacune d'entre elles sera modifiée de la même manière, au lieu de toutes les modifier du même coup." />
|
||||
<button name="delta_mode_toggle" tool_tip="Si vous modifiez plusieurs articulations, chacune d'entre elles sera modifiée de la même manière, au lieu de toutes les modifier du même coup. Sert également à déverrouiller le Gimbal Lock." />
|
||||
<button label="Miroir" name="button_toggleMirrorRotation" tool_tip="Changer l'articulation opposée, comme dans un miroir." />
|
||||
<button label="Sym." name="button_toggleSympatheticRotation" tool_tip="Modifier l'articulation opposée, mais de la même manière." />
|
||||
</panel>
|
||||
|
|
@ -252,7 +253,7 @@
|
|||
<button name="toggleAdvancedPanel" tool_tip="Passer à la section des paramètres avancés"/>
|
||||
<button name="FlipPose_avatar" tool_tip="Inverser toute la pose vers la gauche/droite" />
|
||||
<button name="FlipJoint_avatar" tool_tip="Miroir des parties du corps sélectionnées gauche/droite" />
|
||||
<button label="Capter" name="button_RecaptureParts" tool_tip="Si les parties du corps sélectionnées sont désactivées, cette option permet de capturer à nouveau ce que ces parties du corps font actuellement. Ce bouton est désactivé si vous commencez à partir d`une pose T." />
|
||||
<button label="Capter" name="button_RecaptureParts" tool_tip="Si les parties du corps sélectionnées sont désactivées, cette option permet de capturer à nouveau ce que ces parties du corps font actuellement."/>
|
||||
<button label="Marche/arrêt" name="toggle_PosingSelectedBones" tool_tip="Active ou désactive le Poser pour les parties du corps sélectionnées. Lorsqu'elle est désactivée, cette partie du corps s'anime comme d'habitude (comme avec une AO ou avec une balle, etc.)." />
|
||||
<button label="Mes poses" name="toggleLoadSavePanel" tool_tip="Charger, enregistrer et gérer les poses que vous créez" />
|
||||
<button tool_tip="Gérer le catalogue des poses" name="open_poseDir_button" />
|
||||
|
|
@ -276,8 +277,8 @@
|
|||
<slider label="Échelle Y :" name="Advanced_Scale_Y" />
|
||||
<slider label="Échelle Z :" name="Advanced_Scale_Z" />
|
||||
<button label="Annuler le changement d'échelle" name="undo_scale_change" tool_tip="Annuler le dernier changement d'échelle" />
|
||||
<button label="Remise à l'échelle" name="redo_scale_change" tool_tip="Refaire le dernier changement d'échelle" />
|
||||
<button label="Réinitialisation de I'échelle" name="reset_scales" tool_tip="Double-cliquez pour rétablir l'échelle d'origine" />
|
||||
<button label="À l'échelle" name="redo_scale_change" tool_tip="Refaire le dernier changement d'échelle" />
|
||||
<button label="Réinit. échelle" name="reset_scales" tool_tip="Double-cliquez pour rétablir l'échelle d'origine" />
|
||||
</panel>
|
||||
</tab_container>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -16,6 +16,12 @@
|
|||
<button label="Aucun" label_selected="Aucun" name="None"/>
|
||||
<check_box label="Cop" name="check_copy"/>
|
||||
<check_box label="Lister tous les dossiers" name="check_show_empty"/>
|
||||
<check_box label="Objets groupés" name="check_only_coalesced"/>
|
||||
<combo_box tool_tip="Filtre les objets liés" name="inventory_filter_show_links_combo">
|
||||
<combo_box.item name="show_links" label="Afficher les liens"/>
|
||||
<combo_box.item name="show_links_only" label="Afficher seulement les liens"/>
|
||||
<combo_box.item name="hide_links" label="Masquer les liens"/>
|
||||
</combo_box>
|
||||
<check_box label="Créé par moi" name="check_created_by_me"/>
|
||||
<check_box label="Créé par d'autres" name="check_created_by_others"/>
|
||||
<check_box label="Depuis la connexion" name="check_since_logoff"/>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<toggleable_menu name="Settings">
|
||||
<menu_item_call label="Charger uniquement les rotations" name="rotations"/>
|
||||
<menu_item_call label="Charger uniquement les positions" name="positions"/>
|
||||
<menu_item_call label="Charger uniquement les échelles" name="scale"/>
|
||||
<menu_item_call label="Charger les rotations & les positions" name="rotations_positions"/>
|
||||
<menu_item_call label="Charger les rotations & les échelles" name="rotations_scales"/>
|
||||
<menu_item_call label="Charger les positions & les échelles" name="positions_scales"/>
|
||||
<menu_item_call label="Tout charger" name="load_all"/>
|
||||
<menu_item_call label="Charger la sélection" tool_tip="Charge uniquement les jointures qui sont désactivées et les activer." name="load_selective"/>
|
||||
<menu_item_call label="Charger la sélection - Uniquement les rotations " tool_tip="Charge uniquement les rotations des jointures qui sont désactivées, et les active." name="rotations_positions"/>
|
||||
<menu_item_call label="Charger uniquement les rotations" tool_tip="Charge uniquement les rotations. Bien pour les poses faites pour d'autres avatars/silhouettes." name="rotations"/>
|
||||
<menu_item_call label="Charger" tool_tip="Charge les rotations, les positions et les échelles" name="load_all"/>
|
||||
</toggleable_menu>
|
||||
|
|
|
|||
|
|
@ -35,6 +35,6 @@
|
|||
<menu_item_check name="inventory_filter_only_modify" label="Uniquement les éléments modifiables"/>
|
||||
<menu_item_check name="inventory_filter_only_copy" label="Uniquement les éléments copiables"/>
|
||||
<menu_item_check name="inventory_filter_only_transfer" label="Uniquement les éléments transférables"/>
|
||||
<menu_item_check name="inventory_filter_coalesced_objects_only" label="Uniquement les éléments regroupés"/>
|
||||
<menu_item_check name="inventory_filter_coalesced_objects_only" label="Uniquement les objets groupés"/>
|
||||
<menu_item_call label="Vider la corbeille" name="empty_trash"/>
|
||||
</toggleable_menu>
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@
|
|||
<combo_box.item value="filter_type_textures" label="Textures"/>
|
||||
<combo_box.item value="filter_type_snapshots" label="Photos"/>
|
||||
<combo_box.item value="filter_type_settings" label="Paramètres" />
|
||||
<combo_box.item value="filter_type_coalesced" label="Uniquement les objets groupés"/>
|
||||
<combo_box.item value="filter_type_custom" label="Personnalisé..."/>
|
||||
</combo_box>
|
||||
<menu_button name="options_visibility_btn" tool_tip="Afficher les paramètres de visibilité des résultats de recherche"/>
|
||||
|
|
@ -57,6 +58,9 @@
|
|||
<panel name="new_inventory_panel">
|
||||
<button name="new_inv_btn" tool_tip="Ajouter une Fenêtre d'inventaire"/>
|
||||
</panel>
|
||||
<panel name="show_filters_panel">
|
||||
<button name="show_filters_inv_btn" tool_tip="Afficher les filtres - Affiche le menu latéral des filtres lorsqu'il est sélectionné. Il est mis en surbrillance lorsqu'un filtre est activé."/>
|
||||
</panel>
|
||||
<panel name="view_mode_panel">
|
||||
<button name="view_mode_btn" tool_tip="Passer d'une vue à l'autre"/>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -15,8 +15,20 @@
|
|||
<text name="AvatarInspectorTooltipDelay_text">secondes</text>
|
||||
<slider label="Objets :" name="ObjectInspectorTooltipDelay_slider" tool_tip="Délai d'affichage d'une infobulle après avoir passé la souris au-dessus d'un objet. (Par défaut : 0.35s)"/>
|
||||
<text name="ObjectInspectorTooltipDelay_text">secondes</text>
|
||||
<text name="FSHudTextLabel">
|
||||
Options du texte flottant :
|
||||
</text>
|
||||
<slider label="Distance d'atténuation des textes flottants (en mètres) :" label_width="305" tool_tip="Définit la distance à partir de laquelle les textes flottants commencent à s'atténuer" name="FSHudTextFadeDistance"/>
|
||||
<slider label="Distance de disparition des textes flottants (en mètres) :" label_width="305" tool_tip="Définit la distance à partir de laquelle les textes flottants ne s'affichent plus" name="FSHudTextFadeRange"/>
|
||||
<check_box name="FSHudTextUseHoverHighlight" label="Survoler l'objet pour mettre en évidence le texte flottant :" tool_tip="Lorsqu'un objet est survolé, met en évidence le texte flottant (hovertext) en le déplaçant au premier plan et désactive son alpha."/>
|
||||
<text name="FSHudTextShowBackgroundLabel">
|
||||
Afficher arrière-plan texte flottant :
|
||||
</text>
|
||||
<combo_box name="FSHudTextShowBackgroundDropdown" tool_tip="Affiche un arrière-plan noir/blanc derrière le texte flottant (hovertext) pour le rendre plus lisible. L'opacité peut être modifiée dans Couleurs > Divers.">
|
||||
<combo_box.item label="Non" name="ScriptDialogOption_0"/>
|
||||
<combo_box.item label="Uniquement l'objet en surbrillance" name="ScriptDialogOption_1"/>
|
||||
<combo_box.item label="Tous les objets" name="ScriptDialogOption_2"/>
|
||||
</combo_box>
|
||||
</panel>
|
||||
<panel label="Interface 2D" name="ui-2d-overlay">
|
||||
<text name="UI Size:" width="240">Échelle de l'UI (peut poser problème) :</text>
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
<text name="username_tag_label">Nom d'utilisateur</text>
|
||||
<text name="bubble_chat">Étiquettes / Bulle de discussion :</text>
|
||||
<color_swatch name="background" tool_tip="Sélectionnez la couleur des étiquettes"/>
|
||||
<slider label="Transparence" name="bubble_chat_opacity" tool_tip="Sélectionnez la transparence des étiquettes"/>
|
||||
<slider label="Opacité" name="bubble_chat_opacity" tool_tip="Ajustez l'opacité des étiquettes"/>
|
||||
<slider label="Alignement vertical " name="FSNameTagZOffsetCorrection" tool_tip="Modifiez l'alignement vertical des tags des résidents. 0 par défaut"/>
|
||||
<check_box name="FSTagShowDistance" label="Afficher la distance à côté de l'étiquette" tool_tip="Afficher la distance de l'avatar à côté de l'étiquette"/>
|
||||
<check_box name="FSTagShowDistanceColors" label="Colorer les étiquettes selon la distance :"/>
|
||||
|
|
@ -73,8 +73,8 @@
|
|||
</panel>
|
||||
</panel>
|
||||
<panel label="Minicarte" name="tab-minimap">
|
||||
<slider label="Transparence de l'arrière-plan :" label_width="180" width="485" name="FSMiniMapOpacity"/>
|
||||
<text name="netmap_pickradius_textbox">Transparence & couleur du point :</text>
|
||||
<slider label="Opacité de l'arrière-plan :" label_width="180" width="485" name="FSMiniMapOpacity"/>
|
||||
<text name="netmap_pickradius_textbox">Opacité & couleur du point :</text>
|
||||
<text name="netmap_pickradius_color_textbox">Couleur du point :</text>
|
||||
<color_swatch name="MapPickRadiusColor" tool_tip="Contrôle la couleur du point sur la minicarte. La taille du point peut être ajustée avec le paramètre Taille du point."/>
|
||||
<text name="netmap_pickradius_opacity_textbox">Opacité:</text>
|
||||
|
|
@ -92,13 +92,14 @@
|
|||
<panel label="Divers" name="tab-misc">
|
||||
<text name="effects_color_textbox">Faisceau de sélection :</text>
|
||||
<text left="240" name="ScriptDialogFgLabel" width="300">Avant et arrière-plan des dialogues de scripts :</text>
|
||||
<text name="floater_opacity">Transparence des fenêtres :</text>
|
||||
<text name="floater_opacity">Opacité des fenêtres :</text>
|
||||
<slider label="Actives :" name="active"/>
|
||||
<slider label="Inactives :" name="inactive"/>
|
||||
<slider label="Caméra / Mouvement :" name="camera_movement"/>
|
||||
<text name="console_opacity">Transparence de la console :</text>
|
||||
<text name="console_opacity">Opacité de la console :</text>
|
||||
<color_swatch name="console_background" tool_tip="Sélectionnez la couleur de la console"/>
|
||||
<slider label="Transparence :" name="console_background_opacity" tool_tip="Sélectionnez la transparence de l'arrière-plan de la console"/>
|
||||
<slider label="Opacité :" name="console_background_opacity" tool_tip="Ajustez l'opacité du fond de la console"/>
|
||||
<slider label="Opacité du fond du texte flottant :" name="FSHudTextBackgroundOpacity" tool_tip="Ajustez l'opacité de l'arrière-plan du texte flottant"/>
|
||||
<text name="preferences_search_label">Surlignage des préférences recherchées :</text>
|
||||
<color_swatch name="preferences_search_color" tool_tip="Sélectionnez la couleur des préférences surlignées par les résultats de recherche"/>
|
||||
<text name="area_search_beacon_color_label">Couleur de la balise de recherche zonière : </text>
|
||||
|
|
@ -124,11 +125,11 @@
|
|||
<color_swatch name="notecard_editor_writable_selection_color" tool_tip="Couleur du texte sélectionné dans la notice"/>
|
||||
<check_box name="FSScriptDialogNoTransparency" label="Toujours afficher les dialogues de scripts sur un arrière-plan opaque"/>
|
||||
<check_box name="FSGroupNotifyNoTransparency" label="Toujours afficher les notices de groupe avec un arrière-plan opaque"/>
|
||||
<check_box name="override_pie_color_checkbox" label="Définir la couleur d'arrière-plan et la transparence des menus circulaires :"/>
|
||||
<check_box name="override_pie_color_checkbox" label="Ajuster la couleur d'arrière-plan et l'opacité des menus circulaires :"/>
|
||||
<panel name="tab-colorize">
|
||||
<color_swatch name="pie_bg_color_override" tool_tip="Sélectionnez la couleur d'arrière-plan des menus circulaires"/>
|
||||
<color_swatch name="pie_selected_color_override" tool_tip="Sélectionnez la couleur d'arrière-plan des menus circulaires"/>
|
||||
<slider label="Transparence :" label_width="80" name="pie_menu_opacity" tool_tip="Sélectionnez la transparence des menus circulaires"/>
|
||||
<slider label="Opacité :" label_width="80" name="pie_menu_opacity" tool_tip="Ajustez l'opacité des menus circulaires"/>
|
||||
<slider label="Dégradé :" label_width="80" name="pie_menu_fade_out" tool_tip="Sélectionnez le niveau de dégradé de la couleur primaire des menus circulaires"/>
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
|
|||
Loading…
Reference in New Issue