Merge branch 'master' of https://github.com/FirestormViewer/phoenix-firestorm
commit
8fd20a1af6
|
|
@ -31,7 +31,7 @@ jobs:
|
|||
build_matrix:
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-12,ubuntu-22.04,windows-2022]
|
||||
os: [macos-14,ubuntu-22.04,windows-2022]
|
||||
grid: [sl,os]
|
||||
variant: [regular, avx]
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
|
|
|||
|
|
@ -1074,6 +1074,14 @@ void LLDir::setSkinFolder(const std::string &skin_folder, const std::string& the
|
|||
// time it's called, reset mSearchSkinDirs.
|
||||
mSearchSkinDirs.clear();
|
||||
|
||||
// <FS:Ansariel> If working directory is different from executable directory, add executable subdirs as searchable folders
|
||||
if (LLStringUtil::compareInsensitive(mExecutableDir, mWorkingDir) != 0)
|
||||
{
|
||||
addSearchSkinDir(add(mExecutableDir, "skins"));
|
||||
addSearchSkinDir(add(mExecutableDir, "skins", "default"));
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
// base skin which is used as fallback for all skinned files
|
||||
// e.g. c:\program files\secondlife\skins\default
|
||||
mDefaultSkinDir = getSkinBaseDir();
|
||||
|
|
@ -1109,14 +1117,6 @@ void LLDir::setSkinFolder(const std::string &skin_folder, const std::string& the
|
|||
addSearchSkinDir(mUserDefaultSkinDir);
|
||||
// then user-defined skins.
|
||||
addSearchSkinDir(mUserSkinDir);
|
||||
|
||||
// <FS:Ansariel> If working directory is different from executable directory, add executable subdirs as searchable folders
|
||||
if (mExecutableDir != mWorkingDir)
|
||||
{
|
||||
addSearchSkinDir(add(mExecutableDir, "skins"));
|
||||
addSearchSkinDir(add(mExecutableDir, "skins", "default"));
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
|
||||
void LLDir::addSearchSkinDir(const std::string& skindir)
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ void LLImageFilter::executeFilter(LLPointer<LLImageRaw> raw_image)
|
|||
{
|
||||
mImage = raw_image;
|
||||
|
||||
LLImageDataLock lock(mImage);
|
||||
LLImageDataSharedLock lock(mImage); // <FS:Beq> FIRE-34564 Bugsplat SHARED vs EXCLUSIVE lock conflict
|
||||
|
||||
//std::cout << "Filter : size = " << mFilterData.size() << std::endl;
|
||||
for (S32 i = 0; i < mFilterData.size(); ++i)
|
||||
|
|
|
|||
|
|
@ -2253,6 +2253,7 @@ if (WINDOWS)
|
|||
"--fmodstudio=${USE_FMODSTUDIO}"
|
||||
"--openal=${USE_OPENAL}"
|
||||
"--tracy=${USE_TRACY}"
|
||||
"--avx2=${USE_AVX2_OPTIMIZATION}"
|
||||
--build=${CMAKE_CURRENT_BINARY_DIR}
|
||||
--buildtype=$<CONFIG>
|
||||
"--channel=${VIEWER_CHANNEL}"
|
||||
|
|
@ -2316,6 +2317,7 @@ if (WINDOWS)
|
|||
"--fmodstudio=${USE_FMODSTUDIO}"
|
||||
"--openal=${USE_OPENAL}"
|
||||
"--tracy=${USE_TRACY}"
|
||||
"--avx2=${USE_AVX2_OPTIMIZATION}"
|
||||
--build=${CMAKE_CURRENT_BINARY_DIR}
|
||||
--buildtype=$<CONFIG>
|
||||
"--channel=${VIEWER_CHANNEL}"
|
||||
|
|
@ -2502,6 +2504,7 @@ if (LINUX)
|
|||
"--fmodstudio=${USE_FMODSTUDIO}"
|
||||
"--openal=${USE_OPENAL}"
|
||||
"--tracy=${USE_TRACY}"
|
||||
"--avx2=${USE_AVX2_OPTIMIZATION}"
|
||||
--build=${CMAKE_CURRENT_BINARY_DIR}
|
||||
--buildtype=${CMAKE_BUILD_TYPE}
|
||||
"--channel=${VIEWER_CHANNEL}"
|
||||
|
|
@ -2529,6 +2532,7 @@ if (LINUX)
|
|||
"--fmodstudio=${USE_FMODSTUDIO}"
|
||||
"--openal=${USE_OPENAL}"
|
||||
"--tracy=${USE_TRACY}"
|
||||
"--avx2=${USE_AVX2_OPTIMIZATION}"
|
||||
--build=${CMAKE_CURRENT_BINARY_DIR}
|
||||
--buildtype=${CMAKE_BUILD_TYPE}
|
||||
"--channel=${VIEWER_CHANNEL}"
|
||||
|
|
@ -2624,6 +2628,7 @@ if (DARWIN)
|
|||
"--fmodstudio=${USE_FMODSTUDIO}"
|
||||
"--openal=${USE_OPENAL}"
|
||||
"--tracy=${USE_TRACY}"
|
||||
"--avx2=${USE_AVX2_OPTIMIZATION}"
|
||||
--build=${CMAKE_CURRENT_BINARY_DIR}
|
||||
--buildtype=$<CONFIG>
|
||||
--bundleid=${MACOSX_BUNDLE_GUI_IDENTIFIER}
|
||||
|
|
@ -2661,6 +2666,7 @@ if (DARWIN)
|
|||
"--fmodstudio=${USE_FMODSTUDIO}"
|
||||
"--openal=${USE_OPENAL}"
|
||||
"--tracy=${USE_TRACY}"
|
||||
"--avx2=${USE_AVX2_OPTIMIZATION}"
|
||||
--build=${CMAKE_CURRENT_BINARY_DIR}
|
||||
--buildtype=${CMAKE_BUILD_TYPE}
|
||||
"--channel=${VIEWER_CHANNEL}"
|
||||
|
|
|
|||
|
|
@ -4,18 +4,25 @@ import tarfile
|
|||
|
||||
class FSViewerManifest:
|
||||
def fs_installer_basename(self):
|
||||
if self.fs_is_avx2():
|
||||
opt_string = "AVX2"
|
||||
else:
|
||||
opt_string = "LEGACY"
|
||||
substitution_strings = {
|
||||
'version' : '.'.join(self.args['version']),
|
||||
'version_short' : '.'.join(self.args['version'][:-1]),
|
||||
'version_dashes' : '-'.join(self.args['version']),
|
||||
'app_name':self.app_name(),
|
||||
'optimized': opt_string,
|
||||
'app_name_oneword':self.app_name_oneword()
|
||||
}
|
||||
|
||||
return "Phoenix-%(app_name)s-%(version_dashes)s" % substitution_strings
|
||||
return "Phoenix-%(app_name)s_%(optimized)s-%(version_dashes)s" % substitution_strings
|
||||
|
||||
def fs_is_opensim(self):
|
||||
return self.args['viewer_flavor'] == 'oss' #Havok would be hvk
|
||||
def fs_is_avx2(self):
|
||||
return self.args['avx2'] == 'ON'
|
||||
|
||||
def fs_splice_grid_substitution_strings( self, subst_strings ):
|
||||
ret = subst_strings
|
||||
|
|
|
|||
|
|
@ -191,6 +191,7 @@ FSPanelLogin::FSPanelLogin(const LLRect &rect,
|
|||
setBackgroundOpaque(true);
|
||||
|
||||
mPasswordModified = false;
|
||||
mShowPassword = false;
|
||||
|
||||
sInstance = this;
|
||||
|
||||
|
|
@ -316,6 +317,10 @@ FSPanelLogin::FSPanelLogin(const LLRect &rect,
|
|||
username_combo->setFocusLostCallback(boost::bind(&FSPanelLogin::onSelectUser, this));
|
||||
mPreviousUsername = username_combo->getValue().asString();
|
||||
|
||||
childSetAction("password_show_btn", onShowHidePasswordClick, this);
|
||||
childSetAction("password_hide_btn", onShowHidePasswordClick, this);
|
||||
syncShowHidePasswordButton();
|
||||
|
||||
mInitialized = true;
|
||||
}
|
||||
|
||||
|
|
@ -1058,6 +1063,37 @@ void FSPanelLogin::onClickForgotPassword(void*)
|
|||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void FSPanelLogin::onShowHidePasswordClick(void*)
|
||||
{
|
||||
if (sInstance)
|
||||
{ // mShowPassword is not saved between sessions, it's just for short-term use
|
||||
sInstance->mShowPassword = !sInstance->mShowPassword;
|
||||
LL_INFOS("AppInit") << "Showing password text now " << (sInstance->mShowPassword ? "on" : "off") << LL_ENDL;
|
||||
|
||||
sInstance->syncShowHidePasswordButton();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void FSPanelLogin::syncShowHidePasswordButton()
|
||||
{ // Show or hide the two 'eye' buttons for password visibility
|
||||
LLButton* show_password_btn = sInstance->findChild<LLButton>("password_show_btn");
|
||||
if (show_password_btn)
|
||||
{
|
||||
show_password_btn->setVisible(!mShowPassword);
|
||||
}
|
||||
LLButton* hide_password_btn = sInstance->findChild<LLButton>("password_hide_btn");
|
||||
if (hide_password_btn)
|
||||
{
|
||||
hide_password_btn->setVisible(mShowPassword);
|
||||
}
|
||||
|
||||
// Update the edit field to replace password text with dots ... or not. Will redraw
|
||||
sInstance->getChild<LLLineEditor>("password_edit")->setDrawAsterixes(!mShowPassword);
|
||||
}
|
||||
|
||||
|
||||
//static
|
||||
void FSPanelLogin::onClickHelp(void*)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -98,6 +98,7 @@ private:
|
|||
void onSelectServer();
|
||||
void onLocationSLURL();
|
||||
void onUsernameTextChanged();
|
||||
void syncShowHidePasswordButton(); // Update which button is shown based on mShowPassword
|
||||
|
||||
static void onClickConnect(void*);
|
||||
static void onClickNewAccount(void*);
|
||||
|
|
@ -110,6 +111,7 @@ private:
|
|||
static void onRemoveCallback(const LLSD& notification, const LLSD& response);
|
||||
static void onClickGridMgrHelp(void*);
|
||||
static void onClickGridBuilder(void*);
|
||||
static void onShowHidePasswordClick(void*);
|
||||
static std::string credentialName();
|
||||
|
||||
private:
|
||||
|
|
@ -121,6 +123,8 @@ private:
|
|||
void* mCallbackData;
|
||||
|
||||
bool mPasswordModified;
|
||||
bool mShowPassword; // Show password in normal text vs. hidden by dots
|
||||
|
||||
bool mShowFavorites;
|
||||
|
||||
static FSPanelLogin* sInstance;
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ SetCompressor /solid lzma # Compress whole installer as one block
|
|||
SetDatablockOptimize off # Only saves us 0.1%, not worth it
|
||||
XPStyle on # Add an XP manifest to the installer
|
||||
RequestExecutionLevel admin # For when we write to Program Files
|
||||
Unicode true # Enable unicode support
|
||||
Unicode true # Enable unicode support
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Project flags
|
||||
|
|
@ -178,9 +178,88 @@ Var FRIENDLY_APP_NAME # <FS:Ansariel> FIRE-30446: Set FriendlyAppName for prot
|
|||
Function dirPre
|
||||
StrCmp $SKIP_DIALOGS "true" 0 +2
|
||||
Abort
|
||||
|
||||
FunctionEnd
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Open link in a new browser window
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
Function openLinkNewWindow
|
||||
Push $3
|
||||
Exch
|
||||
Push $2
|
||||
Exch
|
||||
Push $1
|
||||
Exch
|
||||
Push $0
|
||||
Exch
|
||||
|
||||
ReadRegStr $0 HKCR "http\shell\open\command" ""
|
||||
# Get browser path
|
||||
DetailPrint $0
|
||||
StrCpy $2 '"'
|
||||
StrCpy $1 $0 1
|
||||
StrCmp $1 $2 +2 # if path is not enclosed in " look for space as final char
|
||||
StrCpy $2 ' '
|
||||
StrCpy $3 1
|
||||
loop:
|
||||
StrCpy $1 $0 1 $3
|
||||
DetailPrint $1
|
||||
StrCmp $1 $2 found
|
||||
StrCmp $1 "" found
|
||||
IntOp $3 $3 + 1
|
||||
Goto loop
|
||||
|
||||
found:
|
||||
StrCpy $1 $0 $3
|
||||
StrCmp $2 " " +2
|
||||
StrCpy $1 '$1"'
|
||||
|
||||
Pop $0
|
||||
Exec '$1 $0'
|
||||
Pop $0
|
||||
Pop $1
|
||||
Pop $2
|
||||
Pop $3
|
||||
FunctionEnd
|
||||
|
||||
!macro _OpenURL URL
|
||||
Push "${URL}"
|
||||
Call openLinkNewWindow
|
||||
!macroend
|
||||
|
||||
!define OpenURL '!insertmacro "_OpenURL"'
|
||||
|
||||
; Add the AVX2 check functions
|
||||
Function CheckCPUFlagsAVX2
|
||||
Push $1
|
||||
System::Call 'kernel32::IsProcessorFeaturePresent(i 40) i .r1' ; 40 is PF_AVX2_INSTRUCTIONS_AVAILABLE
|
||||
IntCmp $1 1 OK_AVX2
|
||||
; AVX2 not supported
|
||||
MessageBox MB_OK $(MissingAVX2)
|
||||
${OpenURL} 'https://www.firestormviewer.org/early-access-beta-downloads-legacy-cpus'
|
||||
Quit
|
||||
|
||||
OK_AVX2:
|
||||
Pop $1
|
||||
Return
|
||||
FunctionEnd
|
||||
|
||||
Function CheckCPUFlagsAVX2_Prompt
|
||||
Push $1
|
||||
System::Call 'kernel32::IsProcessorFeaturePresent(i 40) i .r1' ; 40 is PF_AVX2_INSTRUCTIONS_AVAILABLE
|
||||
IntCmp $1 1 OK_AVX2
|
||||
Pop $1
|
||||
Return
|
||||
OK_AVX2:
|
||||
MessageBox MB_YESNO $(AVX2Available) IDYES DownloadAVX2 IDNO ContinueInstall
|
||||
DownloadAVX2:
|
||||
${OpenURL} 'https://www.firestormviewer.org/early-access-beta-downloads/'
|
||||
Quit
|
||||
ContinueInstall:
|
||||
Pop $1
|
||||
Return
|
||||
FunctionEnd
|
||||
|
||||
# <FS:Ansariel> Optional start menu entry
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Post-directory page callback
|
||||
|
|
@ -224,6 +303,16 @@ ${If} $0 != ""
|
|||
${EndIf}
|
||||
|
||||
Call CheckCPUFlags # Make sure we have SSE2 support
|
||||
|
||||
# Two checks here, if we are an AVX2 build we want to abort if no AVX2 support on this CPU.
|
||||
# If we are not an AVX2 build but the CPU can support it then we want to prompt them to download the AVX2 version
|
||||
# but also allow them to override.
|
||||
${If} ${ISAVX2} == 1
|
||||
Call CheckCPUFlagsAVX2
|
||||
${Else}
|
||||
Call CheckCPUFlagsAVX2_Prompt
|
||||
${EndIf}
|
||||
|
||||
Call CheckWindowsVersion # Don't install On unsupported systems
|
||||
Push $0
|
||||
${GetParameters} $COMMANDLINE # Get our command line
|
||||
|
|
|
|||
|
|
@ -57,6 +57,8 @@ 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?"
|
||||
LangString MissingAVX2 ${LANG_GERMAN} "Ihre CPU unterstützt keine AVX2-Anweisungen. Bitte laden Sie die Version für ältere CPUs von https://www.firestormviewer.org/early-access-beta-downloads-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 https://www.firestormviewer.org/early-access-beta-downloads/ herunterladen. Möchten Sie sie jetzt herunterladen?"
|
||||
|
||||
; 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.
|
|
@ -309,10 +309,20 @@ void LLHUDObject::renderAllForTimer()
|
|||
{
|
||||
sHUDObjects.erase(cur_it);
|
||||
}
|
||||
else if (hud_objp->isVisible())
|
||||
// <FS:Beq> FIRE-33239 - particles do not sie when UI is disabled
|
||||
// else if (hud_objp->isVisible())
|
||||
// {
|
||||
// hud_objp->renderForTimer();
|
||||
// }
|
||||
else
|
||||
{
|
||||
hud_objp->renderForTimer();
|
||||
LLHUDEffect* effect = dynamic_cast<LLHUDEffect*>(hud_objp);
|
||||
if (effect || hud_objp->isVisible())
|
||||
{
|
||||
hud_objp->renderForTimer();
|
||||
}
|
||||
}
|
||||
// </FS:Beq>
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1646,6 +1646,13 @@ void render_ui(F32 zoom_factor, int subfield)
|
|||
LLHUDObject::renderAll();
|
||||
render_ui_2d();
|
||||
}
|
||||
// <FS:Beq> FIRE-33239 - particles do not sie when UI is disabled
|
||||
if (!render_ui)
|
||||
{
|
||||
// Make sure particle effects disappear
|
||||
LLHUDObject::renderAllForTimer();
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
gViewerWindow->setup2DRender();
|
||||
gViewerWindow->updateDebugText();
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ LLViewerPart::LLViewerPart() :
|
|||
mPartSourcep = NULL;
|
||||
mParent = NULL;
|
||||
mChild = NULL;
|
||||
LLViewerPartSim::incParticleCount2( 1 ); // <FS:Beq/> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
++LLViewerPartSim::sParticleCount2 ;
|
||||
}
|
||||
|
||||
LLViewerPart::~LLViewerPart()
|
||||
|
|
@ -107,7 +107,7 @@ LLViewerPart::~LLViewerPart()
|
|||
|
||||
mPartSourcep = NULL;
|
||||
|
||||
LLViewerPartSim::decParticleCount2( 1 ); // <FS:Beq/> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
--LLViewerPartSim::sParticleCount2 ;
|
||||
}
|
||||
|
||||
void LLViewerPart::init(LLPointer<LLViewerPartSource> sourcep, LLViewerTexture *imagep, LLVPCallback cb)
|
||||
|
|
@ -205,7 +205,7 @@ LLViewerPartGroup::~LLViewerPartGroup()
|
|||
}
|
||||
mParticles.clear();
|
||||
|
||||
LLViewerPartSim::decParticleCount(count); // <FS:Beq/> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
LLViewerPartSim::sParticleCount -= count; // <FS:Beq/> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
}
|
||||
|
||||
void LLViewerPartGroup::cleanup()
|
||||
|
|
@ -268,7 +268,7 @@ bool LLViewerPartGroup::addPart(LLViewerPart* part, F32 desired_size)
|
|||
|
||||
mParticles.push_back(part);
|
||||
part->mSkipOffset=mSkippedTime;
|
||||
LLViewerPartSim::incParticleCount(1); // <FS:Beq/> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
++LLViewerPartSim::sParticleCount; // <FS:Beq/> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -279,15 +279,14 @@ void LLViewerPartGroup::updateParticles(const F32 lastdt)
|
|||
|
||||
LLVector3 gravity(0.f, 0.f, GRAVITY);
|
||||
|
||||
// <FS:Beq> FIRE-34600 off by one particle count triggering bugsplat (LL_ERR)
|
||||
S32 end = (S32) mParticles.size();
|
||||
LLViewerPartSim::checkParticleCount(static_cast<U32>(mParticles.size()));
|
||||
std::atomic_signal_fence(std::memory_order_seq_cst);
|
||||
// </FS:Beq>
|
||||
|
||||
LLViewerCamera* camera = LLViewerCamera::getInstance();
|
||||
LLViewerRegion *regionp = getRegion();
|
||||
//S32 end = (S32) mParticles.size();// <FS:Beq> FIRE-34600 off by one particle count triggering bugsplat (LL_ERR)
|
||||
// <FS:Beq> FIRE-34600 - Bugsplat AVX2 particle count mismatch
|
||||
// S32 end = (S32) mParticles.size();
|
||||
bool changed = false;
|
||||
// </FS:Beq>
|
||||
for (S32 i = 0 ; i < (S32)mParticles.size();)
|
||||
{
|
||||
LLVector3 a(0.f, 0.f, 0.f);
|
||||
|
|
@ -403,9 +402,15 @@ void LLViewerPartGroup::updateParticles(const F32 lastdt)
|
|||
// Kill dead particles (either flagged dead, or too old)
|
||||
if ((part->mLastUpdateTime > part->mMaxAge) || (LLViewerPart::LL_PART_DEAD_MASK == part->mFlags))
|
||||
{
|
||||
mParticles[i] = mParticles.back() ;
|
||||
mParticles.pop_back() ;
|
||||
// <FS:Beq> FIRE-34600 - Bugsplat AVX2 particle count mismatch
|
||||
// mParticles[i] = mParticles.back() ;
|
||||
// mParticles.pop_back() ;
|
||||
// delete part ;
|
||||
vector_replace_with_last(mParticles, mParticles.begin() + i);
|
||||
--LLViewerPartSim::sParticleCount;
|
||||
delete part ;
|
||||
changed = true;
|
||||
// </FS:Beq>
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -413,9 +418,18 @@ void LLViewerPartGroup::updateParticles(const F32 lastdt)
|
|||
if (!posInGroup(part->mPosAgent, desired_size))
|
||||
{
|
||||
// Transfer particles between groups
|
||||
LLViewerPartSim::getInstance()->put(part) ;
|
||||
mParticles[i] = mParticles.back() ;
|
||||
mParticles.pop_back() ;
|
||||
// <FS:Beq> FIRE-34600 - Bugsplat AVX2 particle count mismatch
|
||||
// LLViewerPartSim::getInstance()->put(part) ;
|
||||
// mParticles[i] = mParticles.back() ;
|
||||
// mParticles.pop_back() ;
|
||||
vector_replace_with_last(mParticles, mParticles.begin() + i);
|
||||
LLViewerPartSim::getInstance()->put(part) ;
|
||||
// Note: put() uses addpart when succesful, this increase sParticleCount by 1
|
||||
// even though it has stayed the same. If it is not succesful then we need to decrease by 1
|
||||
// so a decrement here works for both cases.
|
||||
--LLViewerPartSim::sParticleCount;
|
||||
changed = true;
|
||||
// </FS:Beq>
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -424,16 +438,25 @@ void LLViewerPartGroup::updateParticles(const F32 lastdt)
|
|||
}
|
||||
}
|
||||
|
||||
S32 removed = end - (S32)mParticles.size();
|
||||
if (removed > 0)
|
||||
// <FS:Beq> FIRE-34600 - Bugsplat AVX2 particle count mismatch
|
||||
// S32 removed = end - (S32)mParticles.size();
|
||||
// if (removed > 0)
|
||||
// {
|
||||
// // we removed one or more particles, so flag this group for update
|
||||
// if (mVOPartGroupp.notNull())
|
||||
// {
|
||||
// gPipeline.markRebuild(mVOPartGroupp->mDrawable, LLDrawable::REBUILD_ALL);
|
||||
// }
|
||||
// LLViewerPartSim::decPartCount(removed);
|
||||
// }
|
||||
if (changed)
|
||||
{
|
||||
// we removed one or more particles, so flag this group for update
|
||||
if (mVOPartGroupp.notNull())
|
||||
{
|
||||
gPipeline.markRebuild(mVOPartGroupp->mDrawable, LLDrawable::REBUILD_ALL);
|
||||
}
|
||||
LLViewerPartSim::decParticleCount(removed); // <FS:Beq/> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
// Kill the viewer object if this particle group is empty
|
||||
if (mParticles.empty())
|
||||
|
|
@ -480,21 +503,42 @@ void LLViewerPartSim::checkParticleCount(U32 size)
|
|||
{
|
||||
// <FS:Beq> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
// if(LLViewerPartSim::sParticleCount2 != LLViewerPartSim::sParticleCount)
|
||||
S32 count = LLViewerPartSim::getParticleCount();
|
||||
S32 count2 = LLViewerPartSim::getParticleCount2();
|
||||
if( count != count2 )
|
||||
// <FS:Beq/>
|
||||
// {
|
||||
// LL_ERRS() << "sParticleCount: " << LLViewerPartSim::sParticleCount << " ; sParticleCount2: " << LLViewerPartSim::sParticleCount2 << LL_ENDL ;
|
||||
// }
|
||||
//
|
||||
// if(size > (U32)LLViewerPartSim::sParticleCount2)
|
||||
// {
|
||||
// LL_ERRS() << "current particle size: " << LLViewerPartSim::sParticleCount2 << " array size: " << size << LL_ENDL ; // <FS:Beq/> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
// }
|
||||
if(LLViewerPartSim::sParticleCount2 != LLViewerPartSim::sParticleCount)
|
||||
{
|
||||
LL_ERRS() << "sParticleCount: " << count << " ; sParticleCount2: " << count2 << LL_ENDL ; //<FS:Beq/> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
static int fail_count{0};
|
||||
if(fail_count > 10)
|
||||
{
|
||||
LL_ERRS() << "sParticleCount: " << LLViewerPartSim::sParticleCount << " ; sParticleCount2: " << LLViewerPartSim::sParticleCount2 << LL_ENDL ;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "sParticleCount: " << LLViewerPartSim::sParticleCount << " ; sParticleCount2: " << LLViewerPartSim::sParticleCount2 << LL_ENDL ;
|
||||
}
|
||||
fail_count++;
|
||||
}
|
||||
|
||||
// <FS:Beq> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
// if(size > (U32)LLViewerPartSim::sParticleCount2)
|
||||
if( size > static_cast<U32>(count2) )
|
||||
// <FS:Beq/>
|
||||
if(size > (U32)LLViewerPartSim::sParticleCount2)
|
||||
{
|
||||
LL_ERRS() << "current particle size: " << count2 << " array size: " << size << LL_ENDL ; // <FS:Beq/> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
static int size_mismatch_count{0};
|
||||
if(size_mismatch_count > 10)
|
||||
{
|
||||
LL_ERRS() << "current particle size: " << LLViewerPartSim::sParticleCount2 << " array size: " << size << LL_ENDL ;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "current particle size: " << LLViewerPartSim::sParticleCount2 << " array size: " << size << LL_ENDL ;
|
||||
}
|
||||
size_mismatch_count++;
|
||||
}
|
||||
// </FS:Beq>
|
||||
}
|
||||
|
||||
LLViewerPartSim::LLViewerPartSim()
|
||||
|
|
@ -539,18 +583,14 @@ void LLViewerPartSim::destroyClass()
|
|||
//static
|
||||
bool LLViewerPartSim::shouldAddPart()
|
||||
{
|
||||
// <FS:Beq> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
// if (sParticleCount < MAX_PART_COUNT)
|
||||
auto count = LLViewerPartSim::getParticleCount();
|
||||
if ( count >= MAX_PART_COUNT)
|
||||
// <FS:Beq/>
|
||||
if (sParticleCount >= MAX_PART_COUNT)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( count > PART_THROTTLE_THRESHOLD*sMaxParticleCount) // <FS:Beq/> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
if ( sParticleCount > PART_THROTTLE_THRESHOLD*sMaxParticleCount)
|
||||
{
|
||||
F32 frac = (F32)count/(F32)sMaxParticleCount; // <FS:Beq/> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
F32 frac = (F32)sParticleCount/(F32)sMaxParticleCount;
|
||||
frac -= PART_THROTTLE_THRESHOLD;
|
||||
frac *= PART_THROTTLE_RESCALE;
|
||||
if (ll_frand() < frac)
|
||||
|
|
@ -572,7 +612,7 @@ bool LLViewerPartSim::shouldAddPart()
|
|||
|
||||
void LLViewerPartSim::addPart(LLViewerPart* part)
|
||||
{
|
||||
if (LLViewerPartSim::getParticleCount() < MAX_PART_COUNT)
|
||||
if (LLViewerPartSim::sParticleCount < MAX_PART_COUNT)
|
||||
{
|
||||
put(part);
|
||||
}
|
||||
|
|
@ -806,19 +846,14 @@ void LLViewerPartSim::updateSimulation()
|
|||
}
|
||||
if (LLDrawable::getCurrentFrame()%16==0)
|
||||
{
|
||||
// <FS:Beq> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
// if (sParticleCount > sMaxParticleCount * 0.875f
|
||||
// && sParticleAdaptiveRate < 2.0f)
|
||||
auto count = LLViewerPartSim::getParticleCount();
|
||||
if ( count > sMaxParticleCount * 0.875f
|
||||
&& sParticleAdaptiveRate < 2.0f)
|
||||
// <FS:Beq/>
|
||||
if (sParticleCount > sMaxParticleCount * 0.875f
|
||||
&& sParticleAdaptiveRate < 2.0f)
|
||||
{
|
||||
sParticleAdaptiveRate *= PART_ADAPT_RATE_MULT;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( count < sMaxParticleCount * 0.5f // <FS:Beq/> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
if ( sParticleCount < sMaxParticleCount * 0.5f
|
||||
&& sParticleAdaptiveRate > 0.03125f)
|
||||
{
|
||||
sParticleAdaptiveRate *= PART_ADAPT_RATE_MULT_RECIP;
|
||||
|
|
@ -835,25 +870,15 @@ void LLViewerPartSim::updatePartBurstRate()
|
|||
{
|
||||
if (!(LLDrawable::getCurrentFrame() & 0xf))
|
||||
{
|
||||
// <FS:Beq> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
// if (sParticleCount >= MAX_PART_COUNT) //set rate to zero
|
||||
auto count = LLViewerPartSim::getParticleCount();
|
||||
if (count >= MAX_PART_COUNT) //set rate to zero
|
||||
// <FS:Beq/>
|
||||
if (sParticleCount >= MAX_PART_COUNT) //set rate to zero
|
||||
{
|
||||
sParticleBurstRate = 0.0f ;
|
||||
}
|
||||
// <FS:Beq> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
// else if(sParticleCount > 0)
|
||||
else if (count > 0)
|
||||
// <FS:Beq/>
|
||||
else if(sParticleCount > 0)
|
||||
{
|
||||
if(sParticleBurstRate > 0.0000001f)
|
||||
{
|
||||
// <FS:Beq> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
// F32 total_particles = sParticleCount / sParticleBurstRate ; //estimated
|
||||
F32 total_particles = count / sParticleBurstRate ; //estimated
|
||||
// <FS:Beq/>
|
||||
F32 total_particles = sParticleCount / sParticleBurstRate ; //estimated
|
||||
F32 new_rate = llclamp(0.9f * sMaxParticleCount / total_particles, 0.0f, 1.0f) ;
|
||||
F32 delta_rate_threshold = llmin(0.1f * llmax(new_rate, sParticleBurstRate), 0.1f) ;
|
||||
F32 delta_rate = llclamp(new_rate - sParticleBurstRate, -1.0f * delta_rate_threshold, delta_rate_threshold) ;
|
||||
|
|
|
|||
|
|
@ -155,25 +155,14 @@ public:
|
|||
static bool shouldAddPart(); // Just decides whether this particle should be added or not (for particle count capping)
|
||||
F32 maxRate() // Return maximum particle generation rate
|
||||
{
|
||||
// <FS:Beq> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
// if (sParticleCount >= MAX_PART_COUNT)
|
||||
// {
|
||||
// return 1.f;
|
||||
// }
|
||||
// if (sParticleCount > PART_THROTTLE_THRESHOLD*sMaxParticleCount)
|
||||
// {
|
||||
// return (((F32)sParticleCount/(F32)sMaxParticleCount)-PART_THROTTLE_THRESHOLD)*PART_THROTTLE_RESCALE;
|
||||
// }
|
||||
const auto count = getParticleCount();
|
||||
if ( count >= MAX_PART_COUNT)
|
||||
if (sParticleCount >= MAX_PART_COUNT)
|
||||
{
|
||||
return 1.f;
|
||||
}
|
||||
if ( count > PART_THROTTLE_THRESHOLD*sMaxParticleCount)
|
||||
if (sParticleCount > PART_THROTTLE_THRESHOLD*sMaxParticleCount)
|
||||
{
|
||||
return (((F32)count/(F32)sMaxParticleCount)-PART_THROTTLE_THRESHOLD)*PART_THROTTLE_RESCALE;
|
||||
return (((F32)sParticleCount/(F32)sMaxParticleCount)-PART_THROTTLE_THRESHOLD)*PART_THROTTLE_RESCALE;
|
||||
}
|
||||
// </FS:Beq>
|
||||
return 0.f;
|
||||
}
|
||||
F32 getRefRate() { return sParticleAdaptiveRate; }
|
||||
|
|
@ -188,29 +177,15 @@ public:
|
|||
|
||||
friend class LLViewerPartGroup;
|
||||
|
||||
// <FS:Beq> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
// bool aboveParticleLimit() const { return sParticleCount > sMaxParticleCount; }
|
||||
bool aboveParticleLimit() const { return getParticleCount() > sMaxParticleCount; }
|
||||
// </FS:Beq>
|
||||
bool aboveParticleLimit() const { return sParticleCount > sMaxParticleCount; }
|
||||
static void setMaxPartCount(const S32 max_parts) { sMaxParticleCount = max_parts; }
|
||||
static S32 getMaxPartCount() { return sMaxParticleCount; }
|
||||
|
||||
// <FS:Beq> FIRE-34600 - bugsplat AVX2 particle count mismatch
|
||||
// Deprecate these and use native operators for consistency
|
||||
// static void incPartCount(const S32 count) { sParticleCount += count; }
|
||||
// static void decPartCount(const S32 count) { sParticleCount -= count; }
|
||||
static void incParticleCount(const S32 count, std::memory_order order = std::memory_order_seq_cst )
|
||||
{ sParticleCount.fetch_add( count , std::memory_order_seq_cst ); }
|
||||
static void decParticleCount(const S32 count, std::memory_order order = std::memory_order_seq_cst )
|
||||
{ sParticleCount.fetch_sub( count , std::memory_order_seq_cst ); }
|
||||
static void incParticleCount2(const S32 count, std::memory_order order = std::memory_order_seq_cst )
|
||||
{ sParticleCount2.fetch_add( count , std::memory_order_seq_cst ); }
|
||||
static void decParticleCount2(const S32 count, std::memory_order order = std::memory_order_seq_cst )
|
||||
{ sParticleCount2.fetch_sub( count , std::memory_order_seq_cst ); }
|
||||
static inline S32 getParticleCount(std::memory_order order = std::memory_order_seq_cst) { return sParticleCount.load(order); }
|
||||
|
||||
static inline S32 getParticleCount2(std::memory_order order = std::memory_order_seq_cst) { return sParticleCount2.load(order); }
|
||||
// </FS:Beq>
|
||||
|
||||
U32 mID;
|
||||
|
||||
protected:
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
</panel>
|
||||
<panel name="zoom">
|
||||
<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus kreisen"/>
|
||||
<button name="roll_left" tool_tip="Kamera nach links rollen" />
|
||||
<button name="roll_right" tool_tip="Kamera nach rechts rollen" />
|
||||
<slider_bar name="zoom_slider" tool_tip="Hierdurch wird die Kamera hinein- und herausbewegt. HINWEIS: Es handelt sich hierbei nicht um einen Zoom wie im echten Leben, diese Einstellung hat keinen Effekt auf das Sichtfeld der Kamera. Für echtes Zoomen muss der Regler „Sichtwinkel“ verwendet werden!"/>
|
||||
<joystick_track name="cam_track_stick" tool_tip="Kamera nach oben, unten, links und rechts bewegen"/>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -51,6 +51,8 @@
|
|||
<button label="Anmelden" name="connect_btn"/>
|
||||
<check_box label="Benutzername speichern" name="remember_username_check"/>
|
||||
<check_box label="Kennwort speichern" name="remember_check"/>
|
||||
<button name="password_show_btn" tool_tip="Passwort anzeigen"/>
|
||||
<button name="password_hide_btn" tool_tip="Passwort verstecken"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="mode_selection">
|
||||
<text name="mode_selection_text">
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@
|
|||
<layout_panel name="password_container">
|
||||
<line_editor name="password_edit" label="Kennwort"/>
|
||||
<check_box label="Kennwort speichern" name="remember_check"/>
|
||||
<button name="password_show_btn" tool_tip="Passwort anzeigen"/>
|
||||
<button name="password_hide_btn" tool_tip="Passwort verstecken"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="start_location_panel">
|
||||
<combo_box name="start_location_combo" label="Hier starten:">
|
||||
|
|
|
|||
|
|
@ -238,6 +238,36 @@
|
|||
tool_tip="Orbit camera around focus"
|
||||
top="5"
|
||||
width="100"/>
|
||||
<!-- <FS:Beq> FIRE-34509 Add Camera roll -->
|
||||
<button
|
||||
follows="bottom|left"
|
||||
width="12"
|
||||
height="12"
|
||||
image_selected="VirtualTrackball_Rotate_Left_Active"
|
||||
image_unselected="VirtualTrackball_Rotate_Left"
|
||||
layout="topleft"
|
||||
top_delta="85"
|
||||
left_delta="5"
|
||||
name="roll_left"
|
||||
tool_tip="Roll camera Left">
|
||||
<commit_callback function="Camera.roll_left" />
|
||||
<mouse_held_callback function="Camera.roll_left" />
|
||||
</button>
|
||||
<button
|
||||
follows="bottom|right"
|
||||
width="12"
|
||||
height="12"
|
||||
image_selected="VirtualTrackball_Rotate_Right_Active"
|
||||
image_unselected="VirtualTrackball_Rotate_Right"
|
||||
layout="topleft"
|
||||
top_delta="0"
|
||||
left_delta="78"
|
||||
name="roll_right"
|
||||
tool_tip="Roll camera Right">
|
||||
<commit_callback function="Camera.roll_right" />
|
||||
<mouse_held_callback function="Camera.roll_right" />
|
||||
</button>
|
||||
<!-- </FS:Beq> -->
|
||||
<button
|
||||
follows="top|left"
|
||||
height="18"
|
||||
|
|
|
|||
|
|
@ -274,6 +274,30 @@
|
|||
top_pad="1"
|
||||
name="remember_check"
|
||||
width="145" />
|
||||
<button
|
||||
name="password_show_btn"
|
||||
tool_tip="Show password text"
|
||||
follows="left|bottom"
|
||||
left="256"
|
||||
bottom_delta="0"
|
||||
height="20"
|
||||
width="20"
|
||||
image_pressed="Profile_Group_Visibility_Off_Pressed"
|
||||
image_unselected="Profile_Group_Visibility_Off"
|
||||
tab_stop="false"
|
||||
visible="true" />
|
||||
<button
|
||||
name="password_hide_btn"
|
||||
tool_tip="Hide password text"
|
||||
follows="left|bottom"
|
||||
left="256"
|
||||
bottom_delta="0"
|
||||
height="20"
|
||||
width="20"
|
||||
image_pressed="Profile_Group_Visibility_On_Pressed"
|
||||
image_unselected="Profile_Group_Visibility_On"
|
||||
tab_stop="false"
|
||||
visible="false" />
|
||||
</layout_panel>
|
||||
<layout_panel
|
||||
tab_stop="false"
|
||||
|
|
|
|||
|
|
@ -184,6 +184,30 @@
|
|||
top_pad="10"
|
||||
name="remember_check"
|
||||
width="204" />
|
||||
<button
|
||||
name="password_show_btn"
|
||||
tool_tip="Show password text"
|
||||
follows="left|bottom"
|
||||
left="194"
|
||||
bottom_delta="0"
|
||||
height="20"
|
||||
width="20"
|
||||
image_pressed="Profile_Group_Visibility_Off_Pressed"
|
||||
image_unselected="Profile_Group_Visibility_Off"
|
||||
tab_stop="false"
|
||||
visible="true" />
|
||||
<button
|
||||
name="password_hide_btn"
|
||||
tool_tip="Hide password text"
|
||||
follows="left|bottom"
|
||||
left="194"
|
||||
bottom_delta="0"
|
||||
height="20"
|
||||
width="20"
|
||||
image_pressed="Profile_Group_Visibility_On_Pressed"
|
||||
image_unselected="Profile_Group_Visibility_On"
|
||||
tab_stop="false"
|
||||
visible="false" />
|
||||
</layout_panel> <!-- password_container -->
|
||||
<layout_panel
|
||||
auto_resize="false"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<layout_stack name="maint_layout">
|
||||
<layout_panel name="count_panel">
|
||||
<text name="number_of_items">
|
||||
Éléments à envoyer : [COUNT]
|
||||
Éléments à charger : [COUNT]
|
||||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="warning_panel">
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
</text>
|
||||
</layout_panel>
|
||||
<layout_panel name="buttoms_panel">
|
||||
<button label="Envoyer" name="upload_btn" />
|
||||
<button label="Charger" name="upload_btn" />
|
||||
<button label="Annuler" name="cancel_btn" />
|
||||
</layout_panel>
|
||||
<layout_panel name="link_panel">
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@
|
|||
</panel>
|
||||
<panel name="zoom">
|
||||
<joystick_rotate name="cam_rotate_stick" tool_tip="Fait tourner la caméra autour du focus"/>
|
||||
<button name="roll_left" tool_tip="Faire pivoter la caméra vers la gauche"/>
|
||||
<button name="roll_right" tool_tip="Faire pivoter la caméra vers la droite"/>
|
||||
<slider_bar name="zoom_slider" tool_tip="Fait simplement bouger la caméra. NOTE : Il ne s'agit pas d'un vrai zoom, ce réglage n'a aucun effet sur le champ de vision de la caméra. Pour un vrai zoom, il faut utiliser le curseur Angle de vue"/>
|
||||
<joystick_track name="cam_track_stick" tool_tip="Déplacer la caméra vers le haut, le bas, la gauche et la droite"/>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -4,8 +4,9 @@
|
|||
<menu_item_call label="Image..." name="Upload Image"/>
|
||||
<menu_item_call label="Son (L$[COST])..." name="Upload Sound"/>
|
||||
<menu_item_call label="Animation (L$[COST])..." name="Upload Animation"/>
|
||||
<menu_item_call label="Mesh..." name="Upload Model"/>
|
||||
<menu_item_call label="En Bloc..." name="Bulk Upload"/>
|
||||
<menu_item_call label="Maillage..." name="Upload Model"/>
|
||||
<menu_item_call label="Matériau PBR..." name="Upload Material"/>
|
||||
<menu_item_call label="Par lot..." name="Bulk Upload"/>
|
||||
<menu_item_call label="Importer un ensemble lié..." name="import linkset"/>
|
||||
</menu>
|
||||
<menu_item_call label="Nouveau dossier" name="New Folder"/>
|
||||
|
|
|
|||
|
|
@ -7,5 +7,5 @@
|
|||
<menu_item_call label="Modifier la tenue" name="edit"/>
|
||||
<menu_item_call label="Renommer la tenue" name="rename"/>
|
||||
<menu_item_call label="Enregister dans cette tenue" name="save"/>
|
||||
<menu_item_call label="Suprimmer la tenue" name="delete"/>
|
||||
<menu_item_call label="Supprimer la tenue" name="delete"/>
|
||||
</context_menu>
|
||||
|
|
|
|||
|
|
@ -242,7 +242,8 @@
|
|||
<menu_item_call label="Son ([COST] L$)..." name="Upload Sound"/>
|
||||
<menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/>
|
||||
<menu_item_call label="Modèle..." name="Upload Model"/>
|
||||
<menu_item_call label="Lot..." name="Bulk Upload"/>
|
||||
<menu_item_call label="Matériau PBR..." name="Upload Material"/>
|
||||
<menu_item_call label="Par lot..." name="Bulk Upload"/>
|
||||
<menu_item_call label="Importer un groupe d'objets" name="import linkset"/>
|
||||
</menu>
|
||||
<menu_item_call label="Maillage local" name="local_mesh"/>
|
||||
|
|
|
|||
|
|
@ -26,8 +26,10 @@
|
|||
<text name="create_new_account_text">S'enregistrer</text>
|
||||
<text name="forgot_password_text">Mot de passe/Nom d'utilisateur oublié ?</text>
|
||||
<button label="Connexion" name="connect_btn"/>
|
||||
<check_box label="Mémoriser le nom d'utilisateur" name="remember_username_check"/>
|
||||
<check_box label="Mémoriser le mot de passe" name="remember_check"/>
|
||||
<check_box label="Enr. le nom" name="remember_username_check"/>
|
||||
<check_box label="Enr. le mot de passe" name="remember_check"/>
|
||||
<button name="password_show_btn" tool_tip="Afficher le mot de passe"/>
|
||||
<button name="password_hide_btn" tool_tip="Masquer le mot de passe"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="mode_selection">
|
||||
<text name="mode_selection_text">MODE DE CONNEXION</text>
|
||||
|
|
|
|||
|
|
@ -13,14 +13,16 @@
|
|||
<layout_stack name="1st_row_stack">
|
||||
<layout_panel name="login">
|
||||
<combo_box name="username_combo" label="Nom de résident(e) :" tool_tip="Le nom de compte que vous avez choisi lors de votre inscription, par exemple, bobsmith420 ou Steller Sunshine"/>
|
||||
<check_box label="Mémoriser le nom de résident(e)" name="remember_username_check"/>
|
||||
<check_box label="Enr. le nom" name="remember_username_check"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="delete_container">
|
||||
<button tool_tip="Supprimer ce nom de résident(e)" name="remove_user_btn"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="password_container">
|
||||
<line_editor name="password_edit" label="Mot de passe"/>
|
||||
<check_box label="Mémoriser le mot de passe" name="remember_check"/>
|
||||
<check_box label="Enr. le mot de passe" name="remember_check"/>
|
||||
<button name="password_show_btn" tool_tip="Afficher le mot de passe"/>
|
||||
<button name="password_hide_btn" tool_tip="Masquer le mot de passe"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="start_location_panel">
|
||||
<combo_box name="start_location_combo" label="Démarrer :">
|
||||
|
|
|
|||
|
|
@ -7000,7 +7000,7 @@ Votre position actuelle : [AVATAR_POS]
|
|||
Agent inconnu
|
||||
</string>
|
||||
<string name="groupcountstring">
|
||||
Vous faites partie de [COUNT] groups ([REMAINING] restant).
|
||||
Vous faites partie de [COUNT] groupes ([REMAINING] restant).
|
||||
</string>
|
||||
<string name="groupcountunlimitedstring">
|
||||
Vous faites partie de [COUNT] groupes.
|
||||
|
|
|
|||
|
|
@ -55,6 +55,8 @@
|
|||
</panel>
|
||||
<panel name="zoom">
|
||||
<joystick_rotate name="cam_rotate_stick" tool_tip="Obróć kamerę wokół punktu skupienia"/>
|
||||
<button name="roll_left" tool_tip="Przechyl kamerę w lewo" />
|
||||
<button name="roll_right" tool_tip="Przechyl kamerę w prawo" />
|
||||
<slider_bar name="zoom_slider" tool_tip="Ta opcja po prostu przesuwa kamerę w przód i w tył. UWAGA: To nie ma nic wspólnego z opcją powiększania (zoomowania) z prawdziwego życia! Nie ma żadnego wpływu na pole widzenia (FOV). Użyj suwaka 'Kąt widzenia', aby uzyskać prawdziwy efekt zoomowania."/>
|
||||
<joystick_track name="cam_track_stick" tool_tip="Poruszaj kamerą w górę, w dół, w lewo i w prawo."/>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -45,6 +45,8 @@
|
|||
<button label="Zaloguj" name="connect_btn"/>
|
||||
<check_box label="Zapamiętaj login" name="remember_username_check"/>
|
||||
<check_box label="Zapamiętaj hasło" name="remember_check"/>
|
||||
<button name="password_show_btn" tool_tip="Pokaż hasło" />
|
||||
<button name="password_hide_btn" tool_tip="Ukryj hasło" />
|
||||
</layout_panel>
|
||||
<layout_panel name="mode_selection">
|
||||
<text name="mode_selection_text">
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@
|
|||
<layout_panel name="password_container">
|
||||
<line_editor name="password_edit" label="Hasło" />
|
||||
<check_box label="Zapamiętaj hasło" name="remember_check" />
|
||||
<button name="password_show_btn" tool_tip="Pokaż hasło" />
|
||||
<button name="password_hide_btn" tool_tip="Ukryj hasło" />
|
||||
</layout_panel>
|
||||
<layout_panel name="start_location_panel">
|
||||
<combo_box label="Rozpocznij w" name="start_location_combo">
|
||||
|
|
|
|||
|
|
@ -54,6 +54,10 @@
|
|||
<!--TODO: replace + - images -->
|
||||
<panel name="zoom">
|
||||
<joystick_rotate name="cam_rotate_stick" tool_tip="Орбита камеры вокруг фокуса"/>
|
||||
<!-- <FS:Beq> FIRE-34509 Add Camera roll -->
|
||||
<button name="roll_left" tool_tip="Повернуть камеру влево"/>
|
||||
<button name="roll_right" tool_tip="Повернуть камеру вправо"/>
|
||||
<!-- </FS:Beq> -->
|
||||
<slider_bar name="zoom_slider" tool_tip="Это просто перемещает камеру. ПРИМЕЧАНИЕ. Это не масштаб камеры! Это не влияет на угол обзора. Используйте ползунок «Угол обзора» для реального масштабирования."/>
|
||||
<joystick_track name="cam_track_stick" tool_tip="Двигает камеру вверх и вниз, влево и вправо."/>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -45,6 +45,8 @@
|
|||
<button label="Войти" name="connect_btn"/>
|
||||
<check_box label="Запомнить пользователя" name="remember_username_check" />
|
||||
<check_box label="Запомнить пароль" name="remember_check"/>
|
||||
<button name="password_show_btn" tool_tip="Показать текст пароля"/>
|
||||
<button name="password_hide_btn" tool_tip="Скрыть текст пароляt"/>
|
||||
</layout_panel>
|
||||
<layout_panel name="mode_selection">
|
||||
<text name="mode_selection_text">
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@
|
|||
<!-- The max length might be changed in FSPanelLogin.cpp for Opensim! -->
|
||||
<line_editor name="password_edit" label="Пароль"/>
|
||||
<check_box label="Запомнить пароль" name="remember_check"/>
|
||||
<button name="password_show_btn" tool_tip="Показать текст пароля"/>
|
||||
<button name="password_hide_btn" tool_tip="Скрыть текст пароляt"/>
|
||||
</layout_panel> <!-- password_container -->
|
||||
<layout_panel name="start_location_panel">
|
||||
<combo_box label="Стартовое место" name="start_location_combo">
|
||||
|
|
|
|||
|
|
@ -951,6 +951,7 @@ class Windows_x86_64_Manifest(ViewerManifest):
|
|||
|
||||
substitution_strings['installer_file'] = installer_file
|
||||
substitution_strings['is64bit'] = (1 if (self.address_size == 64) else 0)
|
||||
substitution_strings['isavx2'] = (1 if (self.fs_is_avx2()) else 0)
|
||||
substitution_strings['is_opensim'] = self.fs_is_opensim() # <FS:Ansariel> FIRE-30446: Register hop-protocol for OS version only
|
||||
substitution_strings['friendly_app_name'] = self.friendly_app_name() # <FS:Ansariel> FIRE-30446: Set FriendlyAppName for protocol registrations
|
||||
substitution_strings['icon_suffix'] = ("_os" if (self.fs_is_opensim()) else "") # <FS:Ansariel> FIRE-24335: Use different icon for OpenSim version
|
||||
|
|
@ -975,6 +976,7 @@ class Windows_x86_64_Manifest(ViewerManifest):
|
|||
!define SHORTCUT "%(app_name)s"
|
||||
!define URLNAME "secondlife"
|
||||
!define IS64BIT "%(is64bit)d"
|
||||
!define ISAVX2 "%(isavx2)d"
|
||||
!define ISOPENSIM "%(is_opensim)d"
|
||||
!define APPNAME "%(friendly_app_name)s"
|
||||
!define ICON_SUFFIX "%(icon_suffix)s"
|
||||
|
|
@ -2454,6 +2456,7 @@ if __name__ == "__main__":
|
|||
dict(name='fmodstudio', description="""Indication if fmod studio libraries are needed""", default='OFF'),
|
||||
dict(name='openal', description="""Indication openal libraries are needed""", default='OFF'),
|
||||
dict(name='tracy', description="""Indication tracy profiler is enabled""", default='OFF'),
|
||||
dict(name='avx2', description="""Indication avx2 instruction set is enabled""", default='OFF'),
|
||||
]
|
||||
try:
|
||||
main(extra=extra_arguments)
|
||||
|
|
|
|||
Loading…
Reference in New Issue