Merge branch 'release/2024.12-ForeverFPS' of https://github.com/secondlife/viewer

# Conflicts:
#	indra/newview/llviewercontrol.cpp
#	indra/newview/llviewertexture.cpp
#	indra/newview/skins/default/xui/en/menu_viewer.xml
master
Ansariel 2025-01-22 00:42:22 +01:00
commit 83d74614cf
29 changed files with 193 additions and 190 deletions

View File

@ -39,7 +39,7 @@ LLStyle::Params::Params()
readonly_color("readonly_color", LLColor4::black), readonly_color("readonly_color", LLColor4::black),
selected_color("selected_color", LLColor4::black), selected_color("selected_color", LLColor4::black),
alpha("alpha", 1.f), alpha("alpha", 1.f),
font("font", LLFontGL::getFontMonospace()), font("font", LLStyle::getDefaultFont()),
image("image"), image("image"),
link_href("href"), link_href("href"),
is_link("is_link"), is_link("is_link"),
@ -74,6 +74,11 @@ const LLFontGL* LLStyle::getFont() const
return mFont; return mFont;
} }
const LLFontGL* LLStyle::getDefaultFont()
{
return LLFontGL::getFontMonospace();
}
void LLStyle::setLinkHREF(const std::string& href) void LLStyle::setLinkHREF(const std::string& href)
{ {
mLink = href; mLink = href;

View File

@ -76,6 +76,7 @@ public:
void setFont(const LLFontGL* font); void setFont(const LLFontGL* font);
const LLFontGL* getFont() const; const LLFontGL* getFont() const;
static const LLFontGL* getDefaultFont();
const std::string& getLinkHREF() const { return mLink; } const std::string& getLinkHREF() const { return mLink; }
void setLinkHREF(const std::string& href); void setLinkHREF(const std::string& href);

View File

@ -1604,7 +1604,8 @@ void LLTextBase::onVisibilityChange( bool new_visibility )
//virtual //virtual
void LLTextBase::setValue(const LLSD& value ) void LLTextBase::setValue(const LLSD& value )
{ {
setText(value.asString()); static const LLStyle::Params input_params = LLStyle::Params();
setText(value.asString(), input_params);
} }
//virtual //virtual
@ -4246,8 +4247,7 @@ bool LLInlineViewSegment::getDimensionsF32(S32 first_char, S32 num_chars, F32& w
if (mForceNewLine) if (mForceNewLine)
{ {
// Chat, string can't be smaller then font height even if it is empty // Chat, string can't be smaller then font height even if it is empty
LLStyleSP s(new LLStyle(LLStyle::Params().visible(true))); height = LLStyle::getDefaultFont()->getLineHeight();
height = s->getFont()->getLineHeight();
return true; // new line return true; // new line
} }
@ -4311,9 +4311,7 @@ void LLInlineViewSegment::linkToDocument(LLTextBase* editor)
LLLineBreakTextSegment::LLLineBreakTextSegment(S32 pos):LLTextSegment(pos,pos+1) LLLineBreakTextSegment::LLLineBreakTextSegment(S32 pos):LLTextSegment(pos,pos+1)
{ {
LLStyleSP s( new LLStyle(LLStyle::Params().visible(true))); mFontHeight = LLStyle::getDefaultFont()->getLineHeight();
mFontHeight = s->getFont()->getLineHeight();
} }
LLLineBreakTextSegment::LLLineBreakTextSegment(LLStyleConstSP style,S32 pos):LLTextSegment(pos,pos+1) LLLineBreakTextSegment::LLLineBreakTextSegment(LLStyleConstSP style,S32 pos):LLTextSegment(pos,pos+1)
{ {

View File

@ -165,7 +165,8 @@ LLSD LLTextBox::getValue() const
bool LLTextBox::setTextArg( const std::string& key, const LLStringExplicit& text ) bool LLTextBox::setTextArg( const std::string& key, const LLStringExplicit& text )
{ {
mText.setArg(key, text); mText.setArg(key, text);
LLTextBase::setText(mText.getString()); static const LLStyle::Params input_params = LLStyle::Params();
LLTextBase::setText(mText.getString(), input_params);
return true; return true;
} }

View File

@ -25706,28 +25706,6 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key> <key>Value</key>
<integer>1</integer> <integer>1</integer>
</map> </map>
<key>FSRestrictMaxTextureSize</key>
<map>
<key>Comment</key>
<string>If enabled, the maximum resolution for fetched textures will be restricted to FSRestrictMaxTexturePixels pixels (64bit versions only; requires restart)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSRestrictMaxTexturePixels</key>
<map>
<key>Comment</key>
<string>Maximum texture resolution when FSRestrictMaxTextureSize is enabled. Must be a power of 2 and at least 512 pixels.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>U32</string>
<key>Value</key>
<integer>512</integer>
</map>
<key>FSScriptInfoExtended</key> <key>FSScriptInfoExtended</key>
<map> <map>
<key>Comment</key> <key>Comment</key>

View File

@ -85,6 +85,7 @@ RenderExposure 1 4
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 1 RenderTonemapMix 1 1
RenderDisableVintageMode 1 1 RenderDisableVintageMode 1 1
RenderMaxTextureResolution 1 2048
// //
// Low Graphics Settings // Low Graphics Settings
@ -126,6 +127,7 @@ RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderDisableVintageMode 1 0 RenderDisableVintageMode 1 0
RenderMaxTextureResolution 1 512
// //
// Medium Low Graphics Settings // Medium Low Graphics Settings
@ -167,6 +169,7 @@ RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderDisableVintageMode 1 0 RenderDisableVintageMode 1 0
RenderMaxTextureResolution 1 1024
// //
// Medium Graphics Settings (standard) // Medium Graphics Settings (standard)
@ -207,6 +210,7 @@ RenderCASSharpness 1 0
RenderExposure 1 1 RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderMaxTextureResolution 1 2048
// //
// Medium High Graphics Settings // Medium High Graphics Settings
@ -247,6 +251,7 @@ RenderCASSharpness 1 0
RenderExposure 1 1 RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderMaxTextureResolution 1 2048
// //
// High Graphics Settings (SSAO + sun shadows) // High Graphics Settings (SSAO + sun shadows)
@ -287,6 +292,7 @@ RenderCASSharpness 1 0.4
RenderExposure 1 1 RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderMaxTextureResolution 1 2048
// //
// High Ultra Graphics Settings (deferred + SSAO + all shadows) // High Ultra Graphics Settings (deferred + SSAO + all shadows)
@ -327,6 +333,7 @@ RenderCASSharpness 1 0.4
RenderExposure 1 1 RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderMaxTextureResolution 1 2048
// //
// Ultra graphics (REALLY PURTY!) // Ultra graphics (REALLY PURTY!)
@ -367,6 +374,7 @@ RenderCASSharpness 1 0.4
RenderExposure 1 1 RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderMaxTextureResolution 1 2048
// //
// Class Unknown Hardware (unknown) // Class Unknown Hardware (unknown)
@ -399,6 +407,7 @@ RenderShadowDetail 0 0
RenderReflectionProbeDetail 0 -1 RenderReflectionProbeDetail 0 -1
RenderMirrors 0 0 RenderMirrors 0 0
RenderDisableVintageMode 1 0 RenderDisableVintageMode 1 0
RenderMaxTextureResolution 1 2048
list Intel list Intel
RenderAnisotropic 1 0 RenderAnisotropic 1 0

View File

@ -85,6 +85,7 @@ RenderExposure 1 4
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 1 RenderTonemapMix 1 1
RenderDisableVintageMode 1 1 RenderDisableVintageMode 1 1
RenderMaxTextureResolution 1 2048
// //
// Low Graphics Settings // Low Graphics Settings
@ -126,6 +127,7 @@ RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderDisableVintageMode 1 0 RenderDisableVintageMode 1 0
RenderMaxTextureResolution 1 512
// //
// Medium Low Graphics Settings // Medium Low Graphics Settings
@ -167,6 +169,7 @@ RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderDisableVintageMode 1 0 RenderDisableVintageMode 1 0
RenderMaxTextureResolution 1 1024
// //
// Medium Graphics Settings (standard) // Medium Graphics Settings (standard)
@ -207,6 +210,7 @@ RenderCASSharpness 1 0
RenderExposure 1 1 RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderMaxTextureResolution 1 2048
// //
// Medium High Graphics Settings // Medium High Graphics Settings
@ -247,6 +251,7 @@ RenderCASSharpness 1 0
RenderExposure 1 1 RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderMaxTextureResolution 1 2048
// //
// High Graphics Settings (SSAO + sun shadows) // High Graphics Settings (SSAO + sun shadows)
@ -287,6 +292,7 @@ RenderCASSharpness 1 0.4
RenderExposure 1 1 RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderMaxTextureResolution 1 2048
// //
// High Ultra Graphics Settings (deferred + SSAO + all shadows) // High Ultra Graphics Settings (deferred + SSAO + all shadows)
@ -327,6 +333,7 @@ RenderCASSharpness 1 0.4
RenderExposure 1 1 RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderMaxTextureResolution 1 2048
// //
// Ultra graphics (REALLY PURTY!) // Ultra graphics (REALLY PURTY!)
@ -367,6 +374,7 @@ RenderCASSharpness 1 0.4
RenderExposure 1 1 RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderMaxTextureResolution 1 2048
// //
// Class Unknown Hardware (unknown) // Class Unknown Hardware (unknown)
@ -399,6 +407,7 @@ RenderShadowDetail 0 0
RenderReflectionProbeDetail 0 -1 RenderReflectionProbeDetail 0 -1
RenderMirrors 0 0 RenderMirrors 0 0
RenderDisableVintageMode 1 0 RenderDisableVintageMode 1 0
RenderMaxTextureResolution 1 2048
list Intel list Intel
RenderAnisotropic 1 0 RenderAnisotropic 1 0

View File

@ -85,6 +85,7 @@ RenderTonemapType 1 1
RenderTonemapMix 1 1 RenderTonemapMix 1 1
RenderDisableVintageMode 1 1 RenderDisableVintageMode 1 1
RenderDownScaleMethod 1 0 RenderDownScaleMethod 1 0
RenderMaxTextureResolution 1 2048
// //
// Low Graphics Settings // Low Graphics Settings
@ -126,6 +127,7 @@ RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderDisableVintageMode 1 0 RenderDisableVintageMode 1 0
RenderMaxTextureResolution 1 512
// //
// Medium Low Graphics Settings // Medium Low Graphics Settings
@ -167,6 +169,7 @@ RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderDisableVintageMode 1 0 RenderDisableVintageMode 1 0
RenderMaxTextureResolution 1 1024
// //
// Medium Graphics Settings (standard) // Medium Graphics Settings (standard)
@ -207,6 +210,7 @@ RenderCASSharpness 1 0
RenderExposure 1 1 RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderMaxTextureResolution 1 2048
// //
// Medium High Graphics Settings // Medium High Graphics Settings
@ -247,6 +251,7 @@ RenderCASSharpness 1 0
RenderExposure 1 1 RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderMaxTextureResolution 1 2048
// //
// High Graphics Settings (SSAO + sun shadows) // High Graphics Settings (SSAO + sun shadows)
@ -287,6 +292,7 @@ RenderCASSharpness 1 0
RenderExposure 1 1 RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderMaxTextureResolution 1 2048
// //
// High Ultra Graphics Settings (SSAO + all shadows) // High Ultra Graphics Settings (SSAO + all shadows)
@ -327,6 +333,7 @@ RenderCASSharpness 1 0.4
RenderExposure 1 1 RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderMaxTextureResolution 1 2048
// //
// Ultra graphics (REALLY PURTY!) // Ultra graphics (REALLY PURTY!)
@ -367,6 +374,7 @@ RenderCASSharpness 1 0.4
RenderExposure 1 1 RenderExposure 1 1
RenderTonemapType 1 1 RenderTonemapType 1 1
RenderTonemapMix 1 0.7 RenderTonemapMix 1 0.7
RenderMaxTextureResolution 1 2048
// //
// Class Unknown Hardware (unknown) // Class Unknown Hardware (unknown)
@ -398,6 +406,7 @@ RenderDeferredSSAO 0 0
RenderShadowDetail 0 0 RenderShadowDetail 0 0
RenderMirrors 0 0 RenderMirrors 0 0
RenderDisableVintageMode 1 0 RenderDisableVintageMode 1 0
RenderMaxTextureResolution 1 2048
list TexUnit8orLess list TexUnit8orLess
RenderDeferredSSAO 0 0 RenderDeferredSSAO 0 0

View File

@ -1600,7 +1600,8 @@ void FSFloaterIM::updateMessages()
chat.mText = message; chat.mText = message;
} }
mChatHistory->appendMessage(chat, chat_args); static const LLStyle::Params input_append_params = LLStyle::Params();
mChatHistory->appendMessage(chat, chat_args, input_append_params);
mLastMessageIndex = msg["index"].asInteger(); mLastMessageIndex = msg["index"].asInteger();
// if it is a notification - next message is a notification history log, so skip it // if it is a notification - next message is a notification history log, so skip it

View File

@ -243,10 +243,11 @@ void FSFloaterNearbyChat::addMessage(const LLChat& chat,bool archive,const LLSD
chat_args["use_plain_text_chat_history"] = use_plain_text_chat_history; chat_args["use_plain_text_chat_history"] = use_plain_text_chat_history;
chat_args["show_time"] = show_timestamps_nearby_chat; chat_args["show_time"] = show_timestamps_nearby_chat;
chat_args["is_local"] = true; chat_args["is_local"] = true;
mChatHistoryMuted->appendMessage(chat, chat_args); static const LLStyle::Params input_append_params = LLStyle::Params();
mChatHistoryMuted->appendMessage(chat, chat_args, input_append_params);
if (!chat.mMuted) if (!chat.mMuted)
{ {
mChatHistory->appendMessage(chat, chat_args); mChatHistory->appendMessage(chat, chat_args, input_append_params);
} }
if (archive) if (archive)

View File

@ -5978,13 +5978,22 @@ void LLAgent::parseTeleportMessages(const std::string& xml_filename)
LLXMLNodePtr root; LLXMLNodePtr root;
bool success = LLUICtrlFactory::getLayeredXMLNode(xml_filename, root); bool success = LLUICtrlFactory::getLayeredXMLNode(xml_filename, root);
if (!success || !root || !root->hasName( "teleport_messages" )) if (!success)
{ {
LLError::LLUserWarningMsg::showMissingFiles();
LL_ERRS() << "Problem reading teleport string XML file: " LL_ERRS() << "Problem reading teleport string XML file: "
<< xml_filename << LL_ENDL; << xml_filename << LL_ENDL;
return; return;
} }
if (!root || !root->hasName("teleport_messages"))
{
LLError::LLUserWarningMsg::showMissingFiles();
LL_ERRS() << "Invalid teleport string XML file: "
<< xml_filename << LL_ENDL;
return;
}
for (LLXMLNode* message_set = root->getFirstChild(); for (LLXMLNode* message_set = root->getFirstChild();
message_set != NULL; message_set != NULL;
message_set = message_set->getNextSibling()) message_set = message_set->getNextSibling())

View File

@ -689,15 +689,7 @@ void LLAppViewerWin32::bugsplatAddStaticAttributes(const LLSD& info)
#if LL_DARWIN #if LL_DARWIN
bugSplatMap.setAttribute("HiDPI", info["HIDPI"].asBoolean() ? "Enabled" : "Disabled"); bugSplatMap.setAttribute("HiDPI", info["HIDPI"].asBoolean() ? "Enabled" : "Disabled");
#endif #endif
bugSplatMap.setAttribute("Max Texture Size", gSavedSettings.getString("RenderMaxTextureResolution"));
if (gSavedSettings.getBOOL("FSRestrictMaxTextureSize"))
{
bugSplatMap.setAttribute("Max Texture Size", gSavedSettings.getString("FSRestrictMaxTexturePixels"));
}
else
{
bugSplatMap.setAttribute("Max Texture Size", gSavedSettings.getString("Unlimited"));
}
} }
// These attributes are potentially dynamic // These attributes are potentially dynamic

View File

@ -635,7 +635,8 @@ void LLFloaterIMSessionTab::appendMessage(const LLChat& chat, const LLSD& args)
chat_args["show_names_for_p2p_conv"] = !mIsP2PChat || chat_args["show_names_for_p2p_conv"] = !mIsP2PChat ||
gSavedSettings.getBOOL("IMShowNamesForP2PConv"); gSavedSettings.getBOOL("IMShowNamesForP2PConv");
mChatHistory->appendMessage(chat, chat_args); static const LLStyle::Params input_append_params = LLStyle::Params();
mChatHistory->appendMessage(chat, chat_args, input_append_params);
} }
void LLFloaterIMSessionTab::updateUsedEmojis(LLWStringView text) void LLFloaterIMSessionTab::updateUsedEmojis(LLWStringView text)

View File

@ -2162,10 +2162,6 @@ void LLFloaterPreference::onUpdatePopupFilter()
void LLFloaterPreference::refreshEnabledState() void LLFloaterPreference::refreshEnabledState()
{ {
#if ADDRESS_SIZE == 32
childSetEnabled("FSRestrictMaxTextureSize", false);
#endif
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderCompressTextures")) if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderCompressTextures"))
{ {
getChildView("texture compression")->setEnabled(false); getChildView("texture compression")->setEnabled(false);

View File

@ -3229,11 +3229,15 @@ void LLPanelMainInventory::updateCombinationVisibility()
mCombinationGalleryLayoutPanel->setVisible(!is_gallery_empty); mCombinationGalleryLayoutPanel->setVisible(!is_gallery_empty);
mCombinationListLayoutPanel->setVisible(show_inv_pane); mCombinationListLayoutPanel->setVisible(show_inv_pane);
mCombinationInventoryPanel->getRootFolder()->setForceArrange(!show_inv_pane); LLFolderView* root_folder = mCombinationInventoryPanel->getRootFolder();
if (root_folder)
{
root_folder->setForceArrange(!show_inv_pane);
if (mCombinationInventoryPanel->hasVisibleItems()) if (mCombinationInventoryPanel->hasVisibleItems())
{ {
mForceShowInvLayout = false; mForceShowInvLayout = false;
} }
}
if(is_gallery_empty) if(is_gallery_empty)
{ {
mCombinationGalleryPanel->handleModifiedFilter(); mCombinationGalleryPanel->handleModifiedFilter();

View File

@ -1241,9 +1241,9 @@ LLPointer<LLControlVariable> setting_get_control(LLControlGroup& group, const st
LLPointer<LLControlVariable> cntrl_ptr = group.getControl(setting); LLPointer<LLControlVariable> cntrl_ptr = group.getControl(setting);
if (cntrl_ptr.isNull()) if (cntrl_ptr.isNull())
{ {
LLError::LLUserWarningMsg::showMissingFiles();
LL_ERRS() << "Unable to set up setting listener for " << setting LL_ERRS() << "Unable to set up setting listener for " << setting
<< ". Please reinstall viewer from https://www.firestormviewer.org/choose-your-platform/ and contact https://www.firestormviewer.org/support if issue persists after reinstall." << "." << LL_ENDL;
<< LL_ENDL;
} }
return cntrl_ptr; return cntrl_ptr;
} }

View File

@ -748,6 +748,9 @@ public:
// index into LLViewerObjectList::mActiveObjects or -1 if not in list // index into LLViewerObjectList::mActiveObjects or -1 if not in list
S32 mListIndex; S32 mListIndex;
// last index data for mIndexAndLocalIDToUUID
U32 mRegionIndex;
LLPointer<LLViewerTexture> *mTEImages; LLPointer<LLViewerTexture> *mTEImages;
LLPointer<LLViewerTexture> *mTENormalMaps; LLPointer<LLViewerTexture> *mTENormalMaps;
LLPointer<LLViewerTexture> *mTESpecularMaps; LLPointer<LLViewerTexture> *mTESpecularMaps;

View File

@ -173,21 +173,14 @@ U64 LLViewerObjectList::getIndex(const U32 local_id,
return (((U64)index) << 32) | (U64)local_id; return (((U64)index) << 32) | (U64)local_id;
} }
bool LLViewerObjectList::removeFromLocalIDTable(const LLViewerObject* objectp) bool LLViewerObjectList::removeFromLocalIDTable(LLViewerObject* objectp)
{ {
LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK; LL_PROFILE_ZONE_SCOPED_CATEGORY_NETWORK;
if(objectp && objectp->getRegion()) if(objectp && objectp->mRegionIndex != 0)
{ {
U32 local_id = objectp->mLocalID; U32 local_id = objectp->mLocalID;
U32 ip = objectp->getRegion()->getHost().getAddress(); U64 indexid = (((U64)objectp->mRegionIndex) << 32) | (U64)local_id;
U32 port = objectp->getRegion()->getHost().getPort();
U64 ipport = (((U64)ip) << 32) | (U64)port;
U32 index = mIPAndPortToIndex[ipport];
// LL_INFOS() << "Removing object from table, local ID " << local_id << ", ip " << ip << ":" << port << LL_ENDL;
U64 indexid = (((U64)index) << 32) | (U64)local_id;
std::map<U64, LLUUID>::iterator iter = mIndexAndLocalIDToUUID.find(indexid); std::map<U64, LLUUID>::iterator iter = mIndexAndLocalIDToUUID.find(indexid);
if (iter == mIndexAndLocalIDToUUID.end()) if (iter == mIndexAndLocalIDToUUID.end())
@ -199,6 +192,7 @@ bool LLViewerObjectList::removeFromLocalIDTable(const LLViewerObject* objectp)
if (iter->second == objectp->getID()) if (iter->second == objectp->getID())
{ // Full UUIDs match, so remove the entry { // Full UUIDs match, so remove the entry
mIndexAndLocalIDToUUID.erase(iter); mIndexAndLocalIDToUUID.erase(iter);
objectp->mRegionIndex = 0;
return true; return true;
} }
// UUIDs did not match - this would zap a valid entry, so don't erase it // UUIDs did not match - this would zap a valid entry, so don't erase it
@ -212,7 +206,8 @@ bool LLViewerObjectList::removeFromLocalIDTable(const LLViewerObject* objectp)
void LLViewerObjectList::setUUIDAndLocal(const LLUUID &id, void LLViewerObjectList::setUUIDAndLocal(const LLUUID &id,
const U32 local_id, const U32 local_id,
const U32 ip, const U32 ip,
const U32 port) const U32 port,
LLViewerObject* objectp)
{ {
U64 ipport = (((U64)ip) << 32) | (U64)port; U64 ipport = (((U64)ip) << 32) | (U64)port;
@ -224,6 +219,7 @@ void LLViewerObjectList::setUUIDAndLocal(const LLUUID &id,
mIPAndPortToIndex[ipport] = index; mIPAndPortToIndex[ipport] = index;
} }
objectp->mRegionIndex = index; // should never be zero, sSimulatorMachineIndex starts from 1
U64 indexid = (((U64)index) << 32) | (U64)local_id; U64 indexid = (((U64)index) << 32) | (U64)local_id;
mIndexAndLocalIDToUUID[indexid] = id; mIndexAndLocalIDToUUID[indexid] = id;
@ -382,7 +378,8 @@ LLViewerObject* LLViewerObjectList::processObjectUpdateFromCache(LLVOCacheEntry*
removeFromLocalIDTable(objectp); removeFromLocalIDTable(objectp);
setUUIDAndLocal(fullid, entry->getLocalID(), setUUIDAndLocal(fullid, entry->getLocalID(),
regionp->getHost().getAddress(), regionp->getHost().getAddress(),
regionp->getHost().getPort()); regionp->getHost().getPort(),
objectp);
if (objectp->mLocalID != entry->getLocalID()) if (objectp->mLocalID != entry->getLocalID())
{ // Update local ID in object with the one sent from the region { // Update local ID in object with the one sent from the region
@ -630,7 +627,8 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
setUUIDAndLocal(fullid, setUUIDAndLocal(fullid,
local_id, local_id,
gMessageSystem->getSenderIP(), gMessageSystem->getSenderIP(),
gMessageSystem->getSenderPort()); gMessageSystem->getSenderPort(),
objectp);
if (objectp->mLocalID != local_id) if (objectp->mLocalID != local_id)
{ // Update local ID in object with the one sent from the region { // Update local ID in object with the one sent from the region
@ -1582,11 +1580,20 @@ void LLViewerObjectList::killObjects(LLViewerRegion *regionp)
void LLViewerObjectList::killAllObjects() void LLViewerObjectList::killAllObjects()
{ {
// Used only on global destruction. // Used only on global destruction.
LLViewerObject *objectp;
// Mass cleanup to not clear lists one item at a time
mIndexAndLocalIDToUUID.clear();
mActiveObjects.clear();
mMapObjects.clear();
LLViewerObject *objectp;
for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter) for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
{ {
objectp = *iter; objectp = *iter;
objectp->setOnActiveList(false);
objectp->setListIndex(-1);
objectp->mRegionIndex = 0;
objectp->mOnMap = false;
killObject(objectp); killObject(objectp);
// Object must be dead, or it's the LLVOAvatarSelf which never dies. // Object must be dead, or it's the LLVOAvatarSelf which never dies.
llassert((objectp == gAgentAvatarp) || objectp->isDead()); llassert((objectp == gAgentAvatarp) || objectp->isDead());
@ -1599,18 +1606,6 @@ void LLViewerObjectList::killAllObjects()
LL_WARNS() << "LLViewerObjectList::killAllObjects still has entries in mObjects: " << mObjects.size() << LL_ENDL; LL_WARNS() << "LLViewerObjectList::killAllObjects still has entries in mObjects: " << mObjects.size() << LL_ENDL;
mObjects.clear(); mObjects.clear();
} }
if (!mActiveObjects.empty())
{
LL_WARNS() << "Some objects still on active object list!" << LL_ENDL;
mActiveObjects.clear();
}
if (!mMapObjects.empty())
{
LL_WARNS() << "Some objects still on map object list!" << LL_ENDL;
mMapObjects.clear();
}
} }
void LLViewerObjectList::cleanDeadObjects(bool use_timer) void LLViewerObjectList::cleanDeadObjects(bool use_timer)
@ -2169,7 +2164,8 @@ LLViewerObject *LLViewerObjectList::createObjectFromCache(const LLPCode pcode, L
setUUIDAndLocal(uuid, setUUIDAndLocal(uuid,
local_id, local_id,
regionp->getHost().getAddress(), regionp->getHost().getAddress(),
regionp->getHost().getPort()); regionp->getHost().getPort(),
objectp);
mObjects.push_back(objectp); mObjects.push_back(objectp);
updateActive(objectp); updateActive(objectp);
@ -2221,7 +2217,8 @@ LLViewerObject *LLViewerObjectList::createObject(const LLPCode pcode, LLViewerRe
setUUIDAndLocal(fullid, setUUIDAndLocal(fullid,
local_id, local_id,
gMessageSystem->getSenderIP(), gMessageSystem->getSenderIP(),
gMessageSystem->getSenderPort()); gMessageSystem->getSenderPort(),
objectp);
mObjects.push_back(objectp); mObjects.push_back(objectp);

View File

@ -191,9 +191,10 @@ public:
void setUUIDAndLocal(const LLUUID &id, void setUUIDAndLocal(const LLUUID &id,
const U32 local_id, const U32 local_id,
const U32 ip, const U32 ip,
const U32 port); // Requires knowledge of message system info! const U32 port,
LLViewerObject* objectp); // Requires knowledge of message system info!
bool removeFromLocalIDTable(const LLViewerObject* objectp); bool removeFromLocalIDTable(LLViewerObject* objectp);
// Used ONLY by the orphaned object code. // Used ONLY by the orphaned object code.
U64 getIndex(const U32 local_id, const U32 ip, const U32 port); U64 getIndex(const U32 local_id, const U32 ip, const U32 port);

View File

@ -1896,6 +1896,16 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
S32 bitmap_size = parcel_mgr.mParcelsPerEdge S32 bitmap_size = parcel_mgr.mParcelsPerEdge
* parcel_mgr.mParcelsPerEdge * parcel_mgr.mParcelsPerEdge
/ 8; / 8;
S32 size = msg->getSizeFast(_PREHASH_ParcelData, _PREHASH_Bitmap);
if (size != bitmap_size)
{
// Might be better to ignore bitmap and drop highlights
LL_WARNS("ParcelMgr") << "Parcel Bitmap size expected: " << bitmap_size
<< " actual " << size
<< ". Bitmap might be corrupted!" << LL_ENDL;
bitmap_size = size;
}
U8* bitmap = new U8[ bitmap_size ]; U8* bitmap = new U8[ bitmap_size ];
msg->getBinaryDataFast(_PREHASH_ParcelData, _PREHASH_Bitmap, bitmap, bitmap_size); msg->getBinaryDataFast(_PREHASH_ParcelData, _PREHASH_Bitmap, bitmap, bitmap_size);

View File

@ -111,8 +111,6 @@ LLViewerTexture::EDebugTexels LLViewerTexture::sDebugTexelsMode = LLViewerTextur
const F64 log_2 = log(2.0); const F64 log_2 = log(2.0);
/*const*/ U32 DESIRED_NORMAL_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT; // <FS:Ansariel> Max texture resolution
LLUUID LLViewerTexture::sInvisiprimTexture1 = LLUUID::null; LLUUID LLViewerTexture::sInvisiprimTexture1 = LLUUID::null;
LLUUID LLViewerTexture::sInvisiprimTexture2 = LLUUID::null; LLUUID LLViewerTexture::sInvisiprimTexture2 = LLUUID::null;
#define TEX_INVISIPRIM1 "e97cf410-8e61-7005-ec06-629eba4cd1fb" #define TEX_INVISIPRIM1 "e97cf410-8e61-7005-ec06-629eba4cd1fb"
@ -1761,6 +1759,16 @@ void LLViewerFetchedTexture::processTextureStats()
static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes", false); static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes", false);
U32 max_tex_res = MAX_IMAGE_SIZE_DEFAULT;
if (mBoostLevel < LLGLTexture::BOOST_HIGH)
{
// restrict texture resolution to download based on RenderMaxTextureResolution
static LLCachedControl<U32> max_texture_resolution(gSavedSettings, "RenderMaxTextureResolution", 2048);
// sanity clamp debug setting to avoid settings hack shenanigans
max_tex_res = (U32)llclamp((U32)max_texture_resolution, 512, MAX_IMAGE_SIZE_DEFAULT);
mMaxVirtualSize = llmin(mMaxVirtualSize, (F32)(max_tex_res * max_tex_res));
}
if (textures_fullres) if (textures_fullres)
{ {
mDesiredDiscardLevel = 0; mDesiredDiscardLevel = 0;
@ -1782,16 +1790,9 @@ void LLViewerFetchedTexture::processTextureStats()
} }
else else
{ {
U32 desired_size = MAX_IMAGE_SIZE_DEFAULT; // MAX_IMAGE_SIZE_DEFAULT = 2048 and max size ever is 4096
// <FS:Ansariel> Keep restriction on "fetched" (seems to be HUD) textures as well
if (mBoostLevel <= LLGLTexture::BOOST_SCULPTED)
{
desired_size = DESIRED_NORMAL_TEXTURE_SIZE;
}
// </FS:Ansariel>
if(!mKnownDrawWidth || !mKnownDrawHeight || (S32)mFullWidth <= mKnownDrawWidth || (S32)mFullHeight <= mKnownDrawHeight) if(!mKnownDrawWidth || !mKnownDrawHeight || (S32)mFullWidth <= mKnownDrawWidth || (S32)mFullHeight <= mKnownDrawHeight)
{ {
if (mFullWidth > desired_size || mFullHeight > desired_size) if (mFullWidth > max_tex_res || mFullHeight > max_tex_res)
{ {
mDesiredDiscardLevel = 1; mDesiredDiscardLevel = 1;
} }
@ -3030,12 +3031,14 @@ void LLViewerLODTexture::processTextureStats()
static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes", false); static LLCachedControl<bool> textures_fullres(gSavedSettings,"TextureLoadFullRes", false);
{ // restrict texture resolution to download based on RenderMaxTextureResolution F32 max_tex_res = MAX_IMAGE_SIZE_DEFAULT;
if (mBoostLevel < LLGLTexture::BOOST_HIGH)
{
// restrict texture resolution to download based on RenderMaxTextureResolution
static LLCachedControl<U32> max_texture_resolution(gSavedSettings, "RenderMaxTextureResolution", 2048); static LLCachedControl<U32> max_texture_resolution(gSavedSettings, "RenderMaxTextureResolution", 2048);
// sanity clamp debug setting to avoid settings hack shenanigans // sanity clamp debug setting to avoid settings hack shenanigans
F32 tex_res = (F32)llclamp((S32)max_texture_resolution, 512, 2048); max_tex_res = (F32)llclamp((S32)max_texture_resolution, 512, MAX_IMAGE_SIZE_DEFAULT);
tex_res *= tex_res; mMaxVirtualSize = llmin(mMaxVirtualSize, max_tex_res * max_tex_res);
mMaxVirtualSize = llmin(mMaxVirtualSize, tex_res);
} }
if (textures_fullres) if (textures_fullres)
@ -3091,12 +3094,7 @@ void LLViewerLODTexture::processTextureStats()
discard_level = floorf(discard_level); discard_level = floorf(discard_level);
F32 min_discard = 0.f; F32 min_discard = 0.f;
U32 desired_size = MAX_IMAGE_SIZE_DEFAULT; // MAX_IMAGE_SIZE_DEFAULT = 2048 and max size ever is 4096 if (mFullWidth > max_tex_res || mFullHeight > max_tex_res)
if (mBoostLevel <= LLGLTexture::BOOST_SCULPTED)
{
desired_size = DESIRED_NORMAL_TEXTURE_SIZE;
}
if (mFullWidth > desired_size || mFullHeight > desired_size)
min_discard = 1.f; min_discard = 1.f;
discard_level = llclamp(discard_level, min_discard, (F32)MAX_DISCARD_LEVEL); discard_level = llclamp(discard_level, min_discard, (F32)MAX_DISCARD_LEVEL);

View File

@ -43,7 +43,6 @@
#include <list> #include <list>
// <FS:Ansariel> Max texture resolution // <FS:Ansariel> Max texture resolution
extern U32 DESIRED_NORMAL_TEXTURE_SIZE;
constexpr F32 MIN_VRAM_BUDGET = 768.f; // <FS:Ansariel> Expose max texture VRAM setting constexpr F32 MIN_VRAM_BUDGET = 768.f; // <FS:Ansariel> Expose max texture VRAM setting
class LLFace; class LLFace;

View File

@ -2095,33 +2095,6 @@ LLViewerWindow::LLViewerWindow(const Params& p)
gSavedSettings.setU32("RenderQualityPerformance", 0); gSavedSettings.setU32("RenderQualityPerformance", 0);
} }
// <FS:Ansariel> Max texture resolution / Zi: changed this to accept pixel values so we are independent from maximum texture size
if (gSavedSettings.getBOOL("FSRestrictMaxTextureSize"))
{
// fallback value if no matching pixel size is found (i.e. someone fiddled with the debugs)
DESIRED_NORMAL_TEXTURE_SIZE = 512;
// clamp pixels between 512 and half the current maximum texture size
U32 pixels = llclamp(gSavedSettings.getU32("FSRestrictMaxTexturePixels"), 512, (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT / 2);
// check pixel value against powers of 2 up to (not including) current maximum texture size
U32 pow_of_2 = 512;
while(pow_of_2 < (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT)
{
// power of 2 matches, save it
if (pixels == pow_of_2)
{
DESIRED_NORMAL_TEXTURE_SIZE = pixels;
break;
}
// next power of 2
pow_of_2 <<= 1;
}
}
LL_INFOS() << "Maximum fetched texture size: " << DESIRED_NORMAL_TEXTURE_SIZE << "px" << LL_ENDL;
// </FS:Ansariel>
// Init the image list. Must happen after GL is initialized and before the images that // Init the image list. Must happen after GL is initialized and before the images that
// LLViewerWindow needs are requested, as well as before LLViewerMedia starts updating images. // LLViewerWindow needs are requested, as well as before LLViewerMedia starts updating images.
LLImageGL::initClass(mWindow, LLViewerTexture::MAX_GL_IMAGE_CATEGORY, false, gSavedSettings.getBOOL("RenderGLMultiThreadedTextures"), gSavedSettings.getBOOL("RenderGLMultiThreadedMedia")); LLImageGL::initClass(mWindow, LLViewerTexture::MAX_GL_IMAGE_CATEGORY, false, gSavedSettings.getBOOL("RenderGLMultiThreadedTextures"), gSavedSettings.getBOOL("RenderGLMultiThreadedMedia"));

View File

@ -4022,7 +4022,12 @@ void LLPipeline::renderSelectedFaces(const LLColor4& color)
for (auto facep : mSelectedFaces) for (auto facep : mSelectedFaces)
{ {
if (!facep || facep->getDrawable()->isDead()) if (!facep || !facep->getViewerObject())
{
LLSelectMgr::getInstance()->clearSelections();
return;
}
if (!facep->getDrawable() || facep->getDrawable()->isDead())
{ {
LL_ERRS() << "Bad face on selection" << LL_ENDL; LL_ERRS() << "Bad face on selection" << LL_ENDL;
return; return;

View File

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

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater <floater
height="430" height="452"
layout="topleft" layout="topleft"
name="prefs_graphics_advanced" name="prefs_graphics_advanced"
help_topic="Preferences_Graphics_Advanced" help_topic="Preferences_Graphics_Advanced"
@ -118,6 +118,41 @@
name="MaxLights" name="MaxLights"
top_delta="16" top_delta="16"
width="336" /> width="336" />
<text
type="string"
length="1"
follows="left|top"
height="16"
layout="topleft"
top_delta="16"
left="30"
width="130"
name="MaxTextureResolutionLabel"
text_readonly_color="LabelDisabledColor">
Maximum LOD resolution:
</text>
<combo_box
control_name="RenderMaxTextureResolution"
height="19"
layout="topleft"
left_pad="40"
top_delta="0"
name="MaxTextureResolution"
tool_tip="Maximum resolution for 'level of detail' textures"
width="90">
<combo_box.item
label="512"
name="512"
value="512"/>
<combo_box.item
label="1024"
name="1024"
value="1024"/>
<combo_box.item
label="2048"
name="2048"
value="2048"/>
</combo_box>
<check_box <check_box
control_name="RenderVSyncEnable" control_name="RenderVSyncEnable"
@ -152,7 +187,7 @@
layout="topleft" layout="topleft"
left="30" left="30"
top_delta="16" top_delta="16"
width="128" width="130"
name="AvatarComplexityModeLabel" name="AvatarComplexityModeLabel"
text_readonly_color="LabelDisabledColor"> text_readonly_color="LabelDisabledColor">
Avatar display: Avatar display:
@ -160,10 +195,10 @@
<combo_box <combo_box
control_name="RenderAvatarComplexityMode" control_name="RenderAvatarComplexityMode"
height="18" height="19"
layout="topleft" layout="topleft"
left_delta="130" left_pad="40"
top_delta="0" top_delta="-1"
name="AvatarComplexityMode" name="AvatarComplexityMode"
width="150"> width="150">
<combo_box.item <combo_box.item
@ -195,7 +230,7 @@
max_val="101" max_val="101"
name="IndirectMaxComplexity" name="IndirectMaxComplexity"
show_text="false" show_text="false"
top_delta="16" top_delta="19"
width="300"> width="300">
<slider.commit_callback <slider.commit_callback
function="Pref.UpdateIndirectMaxComplexity" function="Pref.UpdateIndirectMaxComplexity"
@ -368,7 +403,7 @@
left="30" left="30"
name="antialiasing label" name="antialiasing label"
top_delta="20" top_delta="20"
width="120"> width="130">
Antialiasing: Antialiasing:
</text> </text>
<combo_box <combo_box
@ -403,7 +438,7 @@
left="30" left="30"
name="antialiasing quality label" name="antialiasing quality label"
top_delta="20" top_delta="20"
width="120"> width="130">
Antialiasing Quality: Antialiasing Quality:
</text> </text>
<combo_box <combo_box
@ -1015,7 +1050,7 @@
layout="topleft" layout="topleft"
left="13" left="13"
name="horiz_border" name="horiz_border"
top="393" top="415"
top_delta="5" top_delta="5"
width="774"/> width="774"/>
<button <button

View File

@ -111,19 +111,12 @@
parameter="https://support.secondlife.com/"/> parameter="https://support.secondlife.com/"/>
</menu_item_call> </menu_item_call>
<menu_item_separator/> <menu_item_separator/>
<menu_item_call
label="[SECOND_LIFE] News"
name="Second Life News">
<menu_item_call.on_click
function="Advanced.ShowURL"
parameter="http://community.secondlife.com/t5/Featured-News/bg-p/blog_feature_news"/>
</menu_item_call>
<menu_item_call <menu_item_call
label="[SECOND_LIFE] Blogs" label="[SECOND_LIFE] Blogs"
name="Second Life Blogs"> name="Second Life Blogs">
<menu_item_call.on_click <menu_item_call.on_click
function="Advanced.ShowURL" function="Advanced.ShowURL"
parameter="http://community.secondlife.com/t5/Blogs/ct-p/Blogs"/> parameter="https://community.secondlife.com/news/"/>
</menu_item_call> </menu_item_call>
<menu_item_separator/> <menu_item_separator/>
--> -->

View File

@ -2640,19 +2640,12 @@
parameter="https://support.secondlife.com/"/> parameter="https://support.secondlife.com/"/>
</menu_item_call> </menu_item_call>
<menu_item_separator/> <menu_item_separator/>
<menu_item_call
label="[SECOND_LIFE] News"
name="Second Life News">
<menu_item_call.on_click
function="Advanced.ShowURL"
parameter="http://community.secondlife.com/t5/Featured-News/bg-p/blog_feature_news"/>
</menu_item_call>
<menu_item_call <menu_item_call
label="[SECOND_LIFE] Blogs" label="[SECOND_LIFE] Blogs"
name="Second Life Blogs"> name="Second Life Blogs">
<menu_item_call.on_click <menu_item_call.on_click
function="Advanced.ShowURL" function="Advanced.ShowURL"
parameter="http://community.secondlife.com/t5/Blogs/ct-p/Blogs"/> parameter="https://community.secondlife.com/news/"/>
</menu_item_call>--> </menu_item_call>-->
<menu_item_separator/> <menu_item_separator/>
<menu_item_call <menu_item_call

View File

@ -1320,23 +1320,24 @@ If you do not understand the distinction then leave this control alone."
Texture Rendering: Texture Rendering:
</text> </text>
<check_box <text
control_name="FSRestrictMaxTextureSize" type="string"
follows="left|top"
height="16" height="16"
label="Restrict maximum texture resolution to:"
tool_tip="Set this restrict the maximum display resolution for inworld textures. This allows displaying more textures before exceeding the available texture memory and observing blurry textures."
layout="topleft" layout="topleft"
left_delta="10" left_delta="10"
name="FSRestrictMaxTextureSize" name="FSRestrictMaxTextureSize"
top_pad="4" top_pad="4"
width="250"/> width="250">
Restrict maximum texture resolution to:
</text>
<combo_box <combo_box
control_name="FSRestrictMaxTexturePixels" control_name="RenderMaxTextureResolution"
enabled_control="FSRestrictMaxTextureSize"
height="20" height="20"
layout="topleft" layout="topleft"
left_pad="2" left_pad="2"
tool_tip="Sets the maximum display resolution for inworld textures. This allows displaying more textures before exceeding the available texture memory and observing blurry textures."
top_delta="-2" top_delta="-2"
name="FSRestrictMaxTexturePixels" name="FSRestrictMaxTexturePixels"
width="100"> width="100">
@ -1348,28 +1349,12 @@ If you do not understand the distinction then leave this control alone."
label="1024 pixels" label="1024 pixels"
name="1024" name="1024"
value="1024"/> value="1024"/>
<!-- 2048 is the current maximum, so this only becomes important if we get 4096 pixel textures
<combo_box.item <combo_box.item
label="2048 pixels" label="2048 pixels"
name="2048" name="2048"
value="2048"/> value="2048"/>
-->
</combo_box> </combo_box>
<text
name="FSRestrictMaxTextureSizeRestartText"
type="string"
text_color="White_50"
length="1"
follows="left|top"
height="12"
layout="topleft"
left_pad="10"
top_delta="2"
width="150">
(requires restart)
</text>
<!-- New Texture detail 5 is lowest, 0 is highest --> <!-- New Texture detail 5 is lowest, 0 is highest -->
<text <text
type="string" type="string"