Ansariel 2025-03-27 18:42:36 +01:00
commit f0e2f3f9e4
19 changed files with 193 additions and 80 deletions

View File

@ -159,8 +159,8 @@ void LLConsole::draw()
// <FS>
//static const F32 padding_horizontal = 10;
//static const F32 padding_vertical = 3;
static const F32 padding_horizontal = 15;
static const F32 padding_vertical = 8;
constexpr F32 padding_horizontal = 15;
constexpr F32 padding_vertical = 8;
// </FS>
LLGLSUIDefault gls_ui;
@ -177,7 +177,7 @@ void LLConsole::draw()
// <FS:minerjr> [FIRE-35039] Add flag to show/hide the on-screen console
// Get the Show On-screen Console flag from the Comm menu
static LLCachedControl<bool> showOnscreenConsole(*LLUI::getInstance()->mSettingGroups["config"], "FSShowOnscreenConsole");
static LLUICachedControl<bool> showOnscreenConsole("FSShowOnscreenConsole");
// If the Show On-screen Console flag is disabled and the current console is the global console
// (Not a debug console), then don't try to draw
if (!showOnscreenConsole && this == gConsole)

View File

@ -25456,6 +25456,17 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key>
<integer>1</integer>
</map>
<key>FSStatusBarShowFPSColors</key>
<map>
<key>Comment</key>
<string>If enabled, display FPS number in a color based on the current status.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>FSExperimentalLostAttachmentsFix</key>
<map>
<key>Comment</key>
@ -26242,5 +26253,16 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key>
<integer>1</integer>
</map>
<key>FSLocalMeshApplyJointOffsets</key>
<map>
<key>Comment</key>
<string>use joint offsets if they are present</string>
<key>Persist</key>
<integer>0</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
</map>
</llsd>

View File

@ -37,6 +37,7 @@
#include "llviewerregion.h"
// </FS:Ansariel>
LLAgentBenefits::LLAgentBenefits():
m_initalized(false),
m_animated_object_limit(-1),
@ -213,7 +214,27 @@ S32 LLAgentBenefits::getPicksLimit() const
{
// <FS:Ansariel> OpenSim legacy economy
//return m_picks_limit;
return LLGridManager::instance().isInSecondLife() ? m_picks_limit : LLAgentPicksInfo::instance().getMaxNumberOfPicks();
if (LLGridManager::instance().isInSecondLife())
{
return m_picks_limit;
}
else
{
constexpr S32 MAX_OPENSIM_PICKS_FALLBACK = 20; // [FIRE-35276] Freeze on OpenSim (default agreed with Ubit Umarov) (originally by Haklezz)
S32 max_profile_picks = MAX_OPENSIM_PICKS_FALLBACK;
if (gAgent.getRegion())
{
LLSD features;
gAgent.getRegion()->getSimulatorFeatures(features);
if (features.has("MaxProfilePicks"))
{
max_profile_picks = features["MaxProfilePicks"].asInteger();
}
}
return max_profile_picks;
}
// </FS:Ansariel>
}

View File

@ -386,11 +386,6 @@ void LLFace::switchTexture(U32 ch, LLViewerTexture* new_texture)
return;
}
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer
// Need to update the new textures to the old textures boost and max virtual size, so they won't
new_texture->setBoostLevel(mTexture[ch]->getBoostLevel());
new_texture->addTextureStats(mTexture[ch]->getMaxVirtualSize());
// </FS:minerjr> [FIRE-35081]
if (ch == LLRender::DIFFUSE_MAP)
{
if (getViewerObject())

View File

@ -3147,10 +3147,10 @@ void LLPanelProfileNotes::updateData()
#ifdef OPENSIM
if (LLGridManager::instance().isInOpenSim() && gAgent.getRegionCapability(PROFILE_PROPERTIES_CAP).empty())
{
LLUUID avatar_id = getAvatarId();
if (!getStarted() && avatar_id.notNull() && gAgent.getRegionCapability(PROFILE_PROPERTIES_CAP).empty() && !getSelfProfile())
{
setIsLoading();
LLUUID avatar_id = getAvatarId();
if (!getStarted() && avatar_id.notNull())
{
setIsLoading();
LLAvatarPropertiesProcessor::getInstance()->sendAvatarNotesRequest(avatar_id);
}
}

View File

@ -604,44 +604,48 @@ void LLStatusBar::refresh()
static LLCachedControl<bool> fsStatusBarShowFPS(gSavedSettings, "FSStatusBarShowFPS");
if (fsStatusBarShowFPS && mFPSUpdateTimer.getElapsedTimeF32() > 1.f)
{
static LLCachedControl<bool> fsStatusBarShowFPSColors(gSavedSettings, "FSStatusBarShowFPSColors");
static LLCachedControl<U32> max_fps(gSavedSettings, "FramePerSecondLimit");
static LLCachedControl<bool> limit_fps_enabled(gSavedSettings, "FSLimitFramerate");
static LLCachedControl<bool> vsync_enabled(gSavedSettings, "RenderVSyncEnable");
static const auto fps_below_limit_color = LLUIColorTable::instance().getColor("Yellow");
static const auto fps_limit_reached_color = LLUIColorTable::instance().getColor("Green");
static const auto vsync_limit_reached_color = LLUIColorTable::instance().getColor("Green");
static const auto fps_uncapped_color = LLUIColorTable::instance().getColor("White");
static const auto fps_unfocussed_color = LLUIColorTable::instance().getColor("Gray");
static const auto fps_below_limit_color = LLUIColorTable::instance().getColor("FpsDisplayBelowLimitColor");
static const auto fps_limit_reached_color = LLUIColorTable::instance().getColor("FpsDisplayFpsLimitReachedColor");
static const auto vsync_limit_reached_color = LLUIColorTable::instance().getColor("FpsDisplayVSyncLimitReachedColor");
static const auto fps_uncapped_color = LLUIColorTable::instance().getColor("FpsDisplayUncappedColor");
static const auto fps_unfocussed_color = LLUIColorTable::instance().getColor("FpsDisplayUnfocussedColor");
static auto current_fps_color = fps_uncapped_color;
mFPSUpdateTimer.reset();
const auto fps = LLTrace::get_frame_recording().getPeriodMedianPerSec(LLStatViewer::FPS);
mFPSText->setText(llformat("%.1f", fps));
// if background, go grey, else go white unless we have a cap (checked next)
auto fps_color{ fps_uncapped_color };
auto window = gViewerWindow ? gViewerWindow->getWindow() : nullptr;
if ((window && !window->getVisible()) || !gFocusMgr.getAppHasFocus())
if (fsStatusBarShowFPSColors)
{
fps_color = fps_unfocussed_color;
}
else
{
S32 vsync_freq{ -1 };
if (window)
// if background, go grey, else go white unless we have a cap (checked next)
auto window = gViewerWindow ? gViewerWindow->getWindow() : nullptr;
if ((window && !window->getVisible()) || !gFocusMgr.getAppHasFocus())
{
vsync_freq = window->getRefreshRate();
fps_color = fps_unfocussed_color;
}
else
{
S32 vsync_freq{ -1 };
if (window)
{
vsync_freq = window->getRefreshRate();
}
if (limit_fps_enabled && max_fps > 0)
{
fps_color = (fps >= max_fps - 1) ? fps_limit_reached_color : fps_below_limit_color;
}
// use vsync if enabled and the freq is lower than the max_fps
if (vsync_enabled && vsync_freq > 0 && (!limit_fps_enabled || vsync_freq < (S32)max_fps))
{
fps_color = (fps >= vsync_freq - 1) ? vsync_limit_reached_color : fps_below_limit_color;
if (limit_fps_enabled && max_fps > 0)
{
fps_color = (fps >= max_fps - 1) ? fps_limit_reached_color : fps_below_limit_color;
}
// use vsync if enabled and the freq is lower than the max_fps
if (vsync_enabled && vsync_freq > 0 && (!limit_fps_enabled || vsync_freq < (S32)max_fps))
{
fps_color = (fps >= vsync_freq - 1) ? vsync_limit_reached_color : fps_below_limit_color;
}
}
}

View File

@ -86,6 +86,10 @@ void LLURLLineEditor::copyEscapedURLToClipboard()
// *HACK: Because LLSLURL is currently broken we cannot use it to check if unescaped_text is a valid SLURL (see EXT-8335).
if (LLStringUtil::startsWith(unescaped_text, "http://") || LLStringUtil::startsWith(unescaped_text, "secondlife://")) // SLURL
text_to_copy = utf8str_to_wstring(LLWeb::escapeURL(unescaped_text));
// <FS:HT> [FIRE-34020] Copy of address bar contents does not URL encode space in region name for OpenSim only
else if (LLStringUtil::startsWith(unescaped_text, "hop://"))
text_to_copy = utf8str_to_wstring(LLWeb::escapeURL(unescaped_text));
// </FS:HT>
else // human-readable location
text_to_copy = utf8str_to_wstring(unescaped_text);

View File

@ -5166,6 +5166,13 @@ class FSSelfCheckMoveLock : public view_listener_t
if (LLGridManager::getInstance()->isInSecondLife())
{
new_value = gSavedPerAccountSettings.getBOOL("UseMoveLock");
// <FS:Chanayane> prevents having Move Lock activated but disabled when for some reason the LSL Bridge is not worn or not ready
if (new_value && !enable_bridge_function())
{
gSavedPerAccountSettings.setBOOL("UseMoveLock", false);
new_value = false;
}
// </FS:Chanayane>
}
#ifdef OPENSIM
else

View File

@ -1414,11 +1414,7 @@ F32 LLViewerTextureList::updateImagesFetchTextures(F32 max_time)
iter = mUUIDMap.begin();
}
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer
//if (iter->second->getGLTexture())
// Can skip processing TEX_LIST_SCALED as they are UI elements and should not be discarded
if (iter->second->getGLTexture() && get_element_type(iter->second->getBoostLevel()) == TEX_LIST_STANDARD)
// </FS:minerjr> [FIRE-35081]
if (iter->second->getGLTexture())
{
entries.push_back(iter->second);
}

View File

@ -1413,4 +1413,19 @@
<color
name="NotecardCursorColor"
reference="TextCursorColor" />
<color
name="FpsDisplayUncappedColor"
reference="LabelTextColor" />
<color
name="FpsDisplayUnfocussedColor"
reference="Gray" />
<color
name="FpsDisplayBelowLimitColor"
reference="Yellow" />
<color
name="FpsDisplayFpsLimitReachedColor"
reference="Green" />
<color
name="FpsDisplayVSyncLimitReachedColor"
reference="Green" />
</colors>

View File

@ -1406,4 +1406,19 @@
<color
name="NotecardCursorColor"
reference="TextCursorColor" />
<color
name="FpsDisplayUncappedColor"
reference="LabelTextColor" />
<color
name="FpsDisplayUnfocussedColor"
reference="Gray" />
<color
name="FpsDisplayBelowLimitColor"
reference="Yellow" />
<color
name="FpsDisplayFpsLimitReachedColor"
reference="Green" />
<color
name="FpsDisplayVSyncLimitReachedColor"
reference="Green" />
</colors>

View File

@ -1381,4 +1381,19 @@
<color
name="NotecardCursorColor"
reference="TextCursorColor" />
<color
name="FpsDisplayUncappedColor"
reference="LabelTextColor" />
<color
name="FpsDisplayUnfocussedColor"
reference="Gray" />
<color
name="FpsDisplayBelowLimitColor"
reference="Yellow" />
<color
name="FpsDisplayFpsLimitReachedColor"
reference="Green" />
<color
name="FpsDisplayVSyncLimitReachedColor"
reference="Green" />
</colors>

View File

@ -10,6 +10,7 @@
<menu_item_check label="Kontostand anzeigen" name="FSShowCurrencyBalanceInStatusbar"/>
<menu_item_check label="Mediensteuerung anzeigen" name="FSEnableVolumeControls"/>
<menu_item_check label="Bilder pro Sekunde anzeigen" name="FSStatusBarShowFPS"/>
<menu_item_check label="Farb-Indikator für Bilder pro Sekunde anzeigen" name="FSStatusBarShowFPSColors"/>
<menu_item_check label="Datentransfer-Indikator anzeigen" name="ShowNetStats"/>
<menu_item_check label="Koordinaten anzeigen" name="Coordinates"/>
<menu_item_check label="Parzelleneigenschaften anzeigen" name="Parcel Properties"/>

View File

@ -33,7 +33,7 @@
<button name="stream_toggle_btn" tool_tip="Audiostream der Parzelle starten/stoppen"/>
<button name="media_toggle_btn" tool_tip="Alle Medien starten/stoppen (Musik, Video, Webseiten)"/>
<button name="volume_btn" tool_tip="Steuerung der Gesamtlautstärke"/>
<text name="FPSText" tool_tip="Bilder pro Sekunde">
<text name="FPSText" tool_tip="Bilder pro Sekunde (klicken, um Begrenzung anzupassen)">
200.0
</text>
</panel>

View File

@ -165,7 +165,7 @@ Additional code generously contributed to Firestorm by:
top_pad="4"
width="450"
wrap="true">
Aira Yumi, Albatroz Hird, Alexie Birman, Andromeda Rage, Angus Boyd, Animats, Armin Weatherwax, Ayane Lyla, Casper Warden, Chalice Yao, Chaser Zaks, Chorazin Allen, Cron Stardust, Damian Zhaoying, Dan Threebeards, Dawa Gurbux, Dax Dupont, Denver Maksim, Dragonborn Forzane, Drake Arconis, Felyza Wishbringer, f0rbidden, Fractured Crystal, Geenz Spad, Gibson Firehawk, Hitomi Tiponi, humbletim, Inusaito Sayori, Jean Severine, Katharine Berry, Kittin Ninetails, Kool Koolhoven, Lance Corrimal, Lassie, Latif Khalifa, Laurent Bechir, Magne Metaverse LLC, Magus Freston, Makidoll, Manami Hokkigai, MartinRJ Fayray, McCabe Maxstead, Melancholy Lemon, Melysmile, Mimika Oh, minerjr, Mister Acacia, MorganMegan, Morgan Pennent, Mysty Saunders, Nagi Michinaga, Name Short, nhede Core, NiranV Dean, Nogardrevlis Lectar, Oren Hurvitz, paperwork, Penny Patton, Peyton Menges, programmtest, Qwerty Venom, rafak360, Rebecca Ashbourne, Revolution Smythe, Romka Swallowtail, Sahkolihaa Contepomi, sal Kaligawa, Samm Florian, Satomi Ahn, Sei Lisa, Sempervirens Oddfellow, Shin Wasp, Shyotl Kuhr, Sione Lomu, Skills Hak, StarlightShining, Sunset Faulkes, Tapple Gao, Testicular Slingshot, Thickbrick Sleaford, Ubit Umarov, Vaalith Jinn, Vincent Sylvester, Whirly Fizzle, Xenhat Liamano, 小滢 Zi Ying, Zwagoth Klaar and others.
Aira Yumi, Albatroz Hird, Alexie Birman, Andromeda Rage, Angus Boyd, Animats, Armin Weatherwax, Ayane Lyla, Casper Warden, Chalice Yao, Chaser Zaks, Chorazin Allen, Cron Stardust, Damian Zhaoying, Dan Threebeards, Dawa Gurbux, Dax Dupont, Denver Maksim, Dragonborn Forzane, Drake Arconis, Felyza Wishbringer, f0rbidden, Fractured Crystal, Geenz Spad, Gibson Firehawk, Hecklezz, Hitomi Tiponi, humbletim, Inusaito Sayori, Jean Severine, Katharine Berry, Kittin Ninetails, Kool Koolhoven, Lance Corrimal, Lassie, Latif Khalifa, Laurent Bechir, Magne Metaverse LLC, Magus Freston, Makidoll, Manami Hokkigai, MartinRJ Fayray, McCabe Maxstead, Melancholy Lemon, Melysmile, Mimika Oh, minerjr, Mister Acacia, MorganMegan, Morgan Pennent, Mysty Saunders, Nagi Michinaga, Name Short, nhede Core, NiranV Dean, Nogardrevlis Lectar, Oren Hurvitz, paperwork, Penny Patton, Peyton Menges, programmtest, Qwerty Venom, rafak360, Rebecca Ashbourne, Revolution Smythe, Romka Swallowtail, Sahkolihaa Contepomi, sal Kaligawa, Samm Florian, Satomi Ahn, Sei Lisa, Sempervirens Oddfellow, Shin Wasp, Shyotl Kuhr, Sione Lomu, Skills Hak, StarlightShining, Sunset Faulkes, Tapple Gao, Testicular Slingshot, Thickbrick Sleaford, Ubit Umarov, Vaalith Jinn, Vincent Sylvester, Whirly Fizzle, Xenhat Liamano, 小滢 Zi Ying, Zwagoth Klaar and others.
</text>
<text
follows="top|left"

View File

@ -1032,8 +1032,6 @@
max_val="5"
top_delta="-2"
width="127">
<slider_bar.commit_callback
function="Advanced.ClearShaderCache" />
</slider_bar>
<spinner
name="S_Shadow_Res"
@ -1047,8 +1045,6 @@
min_val="0"
width="53"
increment="0.5">
<spinner.commit_callback
function="Advanced.ClearShaderCache" />
</spinner>
<button
follows="left|top"

View File

@ -5,7 +5,7 @@
can_resize="true"
can_dock="false"
can_close="true"
height="300"
height="305"
width="505"
min_width="505"
min_height="300"
@ -21,7 +21,7 @@
follows="top|left|right|bottom"
top="20"
left="0"
height="223"
height="233"
width="500"
tab_position="top"
enable_tabs_flashing="true"
@ -114,6 +114,15 @@
width="300"
label="Assume scale is in meters."
tool_tip="Ignore the cm scale units used by tools such as Maya" />
<check_box name="local_mesh_scale_use_meters"
height="15"
control_name="FSLocalMeshApplyJointOffsets"
follows="top|left"
top_pad="5"
left="8"
width="300"
label="Apply joint offsets."
tool_tip="Apply any joint offsets in the mesh, by default these are ignored." />
<text name="lod_suffix_label"
follows="left|top"
layout="topleft"
@ -256,7 +265,6 @@
label="Apply"
layout="topleft"
left="10"
top="253"
width="90"
visible="true" />
<combo_box name="object_apply_list"
@ -264,7 +272,7 @@
layout="topleft"
follows="bottom"
left="105"
top="253"
top_delta="0"
width="315"
visible="true" />
<button name="btn_add"
@ -272,7 +280,6 @@
label="Add"
layout="topleft"
left="10"
top="275"
width="90"
visible="true" />
<button name="btn_remove"
@ -280,7 +287,7 @@
label="Remove"
layout="topleft"
left="105"
top="275"
top_delta="0"
width="90"
visible="true" />
<button name="btn_reload"
@ -288,7 +295,7 @@
label="Reload"
layout="topleft"
left="200"
top="275"
top_delta="0"
width="90"
visible="true" />
<button name="btn_clear"
@ -296,7 +303,7 @@
label="Clear"
layout="topleft"
left="295"
top="275"
top_delta="0"
width="90"
visible="true" />
<button name="btn_rez"
@ -305,7 +312,7 @@
tool_tip="Create a donor mesh inworld and populate with selected local mesh. This creates an empty object in-world."
layout="topleft"
left="390"
top="275"
top_delta="0"
width="90"
visible="true" />
</floater>

View File

@ -118,6 +118,19 @@
function="CheckControl"
parameter="FSStatusBarShowFPS" />
</menu_item_check>
<menu_item_check
label="Show Color Indicator for Frames per Second"
name="FSStatusBarShowFPSColors">
<on_click
function="ToggleControl"
parameter="FSStatusBarShowFPSColors" />
<on_check
function="CheckControl"
parameter="FSStatusBarShowFPSColors" />
<on_enable
function="CheckControl"
parameter="FSStatusBarShowFPS" />
</menu_item_check>
<menu_item_check
label="Show Traffic Indicator"
name="ShowNetStats">

View File

@ -753,34 +753,36 @@ bool LLLocalMeshImportDAE::processSkin(daeDatabase* collada_db, daeElement* coll
}
}
}
int jointname_idx = 0;
for (auto jointname_iterator = skininfop->mJointNames.begin(); jointname_iterator != skininfop->mJointNames.end(); ++jointname_iterator, ++jointname_idx)
static LLCachedControl<bool> apply_joint_offsets(gSavedSettings, "FSLocalMeshApplyJointOffsets");
if (apply_joint_offsets)
{
std::string name_lookup = jointname_iterator->mName;
if (joint_map.find(name_lookup) == joint_map.end())
int jointname_idx = 0;
for (auto jointname_iterator = skininfop->mJointNames.begin();
jointname_iterator != skininfop->mJointNames.end();
++jointname_iterator, ++jointname_idx)
{
pushLog("DAE Importer", "WARNING: Unknown joint named " + name_lookup + " found, skipping over it.");
continue;
std::string name_lookup = jointname_iterator->mName;
if (joint_map.find(name_lookup) == joint_map.end())
{
pushLog("DAE Importer", "WARNING: Unknown joint named " + name_lookup + " found, skipping over it.");
continue;
}
else
{
LL_DEBUGS("LocalMesh") << "Calc invBindMat for joint name: " << name_lookup << LL_ENDL;
}
if (skininfop->mInvBindMatrix.size() <= jointname_idx)
{
pushLog("DAE Importer", "WARNING: Requesting out of bounds joint named " + name_lookup);
break;
}
LLMatrix4 newinverse = LLMatrix4(skininfop->mInvBindMatrix[jointname_idx].getF32ptr());
const auto& joint_translation = joint_transforms[name_lookup].getTranslation();
newinverse.setTranslation(joint_translation);
skininfop->mAlternateBindMatrix.push_back(LLMatrix4a(newinverse));
}
else
{
LL_DEBUGS("LocalMesh") << "Calc invBindMat for joint name: " << name_lookup << LL_ENDL;
}
if (skininfop->mInvBindMatrix.size() <= jointname_idx)
{
// doesn't seem like a critical fail that should invalidate the entire skin, just break and move on?
pushLog("DAE Importer", "WARNING: Requesting out of bounds joint named " + name_lookup);
break;
}
LLMatrix4 newinverse = LLMatrix4(skininfop->mInvBindMatrix[jointname_idx].getF32ptr());
const auto& joint_translation = joint_transforms[name_lookup].getTranslation();
newinverse.setTranslation(joint_translation);
skininfop->mAlternateBindMatrix.push_back( LLMatrix4a(newinverse) );
}
size_t bind_count = skininfop->mAlternateBindMatrix.size();
if ((bind_count > 0) && (bind_count != skininfop->mJointNames.size()))
{