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

View File

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

View File

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

View File

@ -25706,28 +25706,6 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key>
<integer>1</integer>
</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>
<map>
<key>Comment</key>

View File

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

View File

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

View File

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

View File

@ -1600,7 +1600,8 @@ void FSFloaterIM::updateMessages()
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();
// 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["show_time"] = show_timestamps_nearby_chat;
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)
{
mChatHistory->appendMessage(chat, chat_args);
mChatHistory->appendMessage(chat, chat_args, input_append_params);
}
if (archive)

View File

@ -5978,10 +5978,19 @@ void LLAgent::parseTeleportMessages(const std::string& xml_filename)
LLXMLNodePtr 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: "
<< xml_filename << LL_ENDL;
<< xml_filename << LL_ENDL;
return;
}
if (!root || !root->hasName("teleport_messages"))
{
LLError::LLUserWarningMsg::showMissingFiles();
LL_ERRS() << "Invalid teleport string XML file: "
<< xml_filename << LL_ENDL;
return;
}

View File

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

View File

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

View File

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

View File

@ -1241,9 +1241,9 @@ LLPointer<LLControlVariable> setting_get_control(LLControlGroup& group, const st
LLPointer<LLControlVariable> cntrl_ptr = group.getControl(setting);
if (cntrl_ptr.isNull())
{
LLError::LLUserWarningMsg::showMissingFiles();
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;
}

View File

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

View File

@ -173,21 +173,14 @@ U64 LLViewerObjectList::getIndex(const U32 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;
if(objectp && objectp->getRegion())
if(objectp && objectp->mRegionIndex != 0)
{
U32 local_id = objectp->mLocalID;
U32 ip = objectp->getRegion()->getHost().getAddress();
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;
U64 indexid = (((U64)objectp->mRegionIndex) << 32) | (U64)local_id;
std::map<U64, LLUUID>::iterator iter = mIndexAndLocalIDToUUID.find(indexid);
if (iter == mIndexAndLocalIDToUUID.end())
@ -199,6 +192,7 @@ bool LLViewerObjectList::removeFromLocalIDTable(const LLViewerObject* objectp)
if (iter->second == objectp->getID())
{ // Full UUIDs match, so remove the entry
mIndexAndLocalIDToUUID.erase(iter);
objectp->mRegionIndex = 0;
return true;
}
// 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,
const U32 local_id,
const U32 ip,
const U32 port)
const U32 port,
LLViewerObject* objectp)
{
U64 ipport = (((U64)ip) << 32) | (U64)port;
@ -224,6 +219,7 @@ void LLViewerObjectList::setUUIDAndLocal(const LLUUID &id,
mIPAndPortToIndex[ipport] = index;
}
objectp->mRegionIndex = index; // should never be zero, sSimulatorMachineIndex starts from 1
U64 indexid = (((U64)index) << 32) | (U64)local_id;
mIndexAndLocalIDToUUID[indexid] = id;
@ -382,7 +378,8 @@ LLViewerObject* LLViewerObjectList::processObjectUpdateFromCache(LLVOCacheEntry*
removeFromLocalIDTable(objectp);
setUUIDAndLocal(fullid, entry->getLocalID(),
regionp->getHost().getAddress(),
regionp->getHost().getPort());
regionp->getHost().getPort(),
objectp);
if (objectp->mLocalID != entry->getLocalID())
{ // Update local ID in object with the one sent from the region
@ -630,7 +627,8 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
setUUIDAndLocal(fullid,
local_id,
gMessageSystem->getSenderIP(),
gMessageSystem->getSenderPort());
gMessageSystem->getSenderPort(),
objectp);
if (objectp->mLocalID != local_id)
{ // Update local ID in object with the one sent from the region
@ -1582,11 +1580,20 @@ void LLViewerObjectList::killObjects(LLViewerRegion *regionp)
void LLViewerObjectList::killAllObjects()
{
// 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)
{
objectp = *iter;
objectp->setOnActiveList(false);
objectp->setListIndex(-1);
objectp->mRegionIndex = 0;
objectp->mOnMap = false;
killObject(objectp);
// Object must be dead, or it's the LLVOAvatarSelf which never dies.
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;
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)
@ -2169,7 +2164,8 @@ LLViewerObject *LLViewerObjectList::createObjectFromCache(const LLPCode pcode, L
setUUIDAndLocal(uuid,
local_id,
regionp->getHost().getAddress(),
regionp->getHost().getPort());
regionp->getHost().getPort(),
objectp);
mObjects.push_back(objectp);
updateActive(objectp);
@ -2221,7 +2217,8 @@ LLViewerObject *LLViewerObjectList::createObject(const LLPCode pcode, LLViewerRe
setUUIDAndLocal(fullid,
local_id,
gMessageSystem->getSenderIP(),
gMessageSystem->getSenderPort());
gMessageSystem->getSenderPort(),
objectp);
mObjects.push_back(objectp);

View File

@ -191,9 +191,10 @@ public:
void setUUIDAndLocal(const LLUUID &id,
const U32 local_id,
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.
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
* parcel_mgr.mParcelsPerEdge
/ 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 ];
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*/ U32 DESIRED_NORMAL_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT; // <FS:Ansariel> Max texture resolution
LLUUID LLViewerTexture::sInvisiprimTexture1 = LLUUID::null;
LLUUID LLViewerTexture::sInvisiprimTexture2 = LLUUID::null;
#define TEX_INVISIPRIM1 "e97cf410-8e61-7005-ec06-629eba4cd1fb"
@ -1761,6 +1759,16 @@ void LLViewerFetchedTexture::processTextureStats()
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)
{
mDesiredDiscardLevel = 0;
@ -1782,16 +1790,9 @@ void LLViewerFetchedTexture::processTextureStats()
}
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 (mFullWidth > desired_size || mFullHeight > desired_size)
if (mFullWidth > max_tex_res || mFullHeight > max_tex_res)
{
mDesiredDiscardLevel = 1;
}
@ -3030,12 +3031,14 @@ void LLViewerLODTexture::processTextureStats()
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);
// sanity clamp debug setting to avoid settings hack shenanigans
F32 tex_res = (F32)llclamp((S32)max_texture_resolution, 512, 2048);
tex_res *= tex_res;
mMaxVirtualSize = llmin(mMaxVirtualSize, tex_res);
max_tex_res = (F32)llclamp((S32)max_texture_resolution, 512, MAX_IMAGE_SIZE_DEFAULT);
mMaxVirtualSize = llmin(mMaxVirtualSize, max_tex_res * max_tex_res);
}
if (textures_fullres)
@ -3091,12 +3094,7 @@ void LLViewerLODTexture::processTextureStats()
discard_level = floorf(discard_level);
F32 min_discard = 0.f;
U32 desired_size = MAX_IMAGE_SIZE_DEFAULT; // MAX_IMAGE_SIZE_DEFAULT = 2048 and max size ever is 4096
if (mBoostLevel <= LLGLTexture::BOOST_SCULPTED)
{
desired_size = DESIRED_NORMAL_TEXTURE_SIZE;
}
if (mFullWidth > desired_size || mFullHeight > desired_size)
if (mFullWidth > max_tex_res || mFullHeight > max_tex_res)
min_discard = 1.f;
discard_level = llclamp(discard_level, min_discard, (F32)MAX_DISCARD_LEVEL);

View File

@ -43,7 +43,6 @@
#include <list>
// <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
class LLFace;

View File

@ -2095,33 +2095,6 @@ LLViewerWindow::LLViewerWindow(const Params& p)
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
// 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"));

View File

@ -4022,7 +4022,12 @@ void LLPipeline::renderSelectedFaces(const LLColor4& color)
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;
return;

View File

@ -199,22 +199,19 @@
</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="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"/>
<combo_box name="FSRestrictMaxTexturePixels">
<text name="FSRestrictMaxTextureSize">
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="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>
<text name="FSRestrictMaxTextureSizeRestartText">
(erfordert Neustart)
</text>
<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:
</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="Mittlere (3) Qualität" name="3"/>
<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"?>
<floater
height="430"
height="452"
layout="topleft"
name="prefs_graphics_advanced"
help_topic="Preferences_Graphics_Advanced"
@ -118,6 +118,41 @@
name="MaxLights"
top_delta="16"
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
control_name="RenderVSyncEnable"
@ -152,7 +187,7 @@
layout="topleft"
left="30"
top_delta="16"
width="128"
width="130"
name="AvatarComplexityModeLabel"
text_readonly_color="LabelDisabledColor">
Avatar display:
@ -160,10 +195,10 @@
<combo_box
control_name="RenderAvatarComplexityMode"
height="18"
height="19"
layout="topleft"
left_delta="130"
top_delta="0"
left_pad="40"
top_delta="-1"
name="AvatarComplexityMode"
width="150">
<combo_box.item
@ -195,7 +230,7 @@
max_val="101"
name="IndirectMaxComplexity"
show_text="false"
top_delta="16"
top_delta="19"
width="300">
<slider.commit_callback
function="Pref.UpdateIndirectMaxComplexity"
@ -368,7 +403,7 @@
left="30"
name="antialiasing label"
top_delta="20"
width="120">
width="130">
Antialiasing:
</text>
<combo_box
@ -403,7 +438,7 @@
left="30"
name="antialiasing quality label"
top_delta="20"
width="120">
width="130">
Antialiasing Quality:
</text>
<combo_box
@ -1015,7 +1050,7 @@
layout="topleft"
left="13"
name="horiz_border"
top="393"
top="415"
top_delta="5"
width="774"/>
<button

View File

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

View File

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

View File

@ -1320,23 +1320,24 @@ If you do not understand the distinction then leave this control alone."
Texture Rendering:
</text>
<check_box
control_name="FSRestrictMaxTextureSize"
<text
type="string"
follows="left|top"
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"
left_delta="10"
name="FSRestrictMaxTextureSize"
top_pad="4"
width="250"/>
width="250">
Restrict maximum texture resolution to:
</text>
<combo_box
control_name="FSRestrictMaxTexturePixels"
enabled_control="FSRestrictMaxTextureSize"
control_name="RenderMaxTextureResolution"
height="20"
layout="topleft"
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"
name="FSRestrictMaxTexturePixels"
width="100">
@ -1348,28 +1349,12 @@ If you do not understand the distinction then leave this control alone."
label="1024 pixels"
name="1024"
value="1024"/>
<!-- 2048 is the current maximum, so this only becomes important if we get 4096 pixel textures
<combo_box.item
label="2048 pixels"
name="2048"
value="2048"/>
-->
</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 -->
<text
type="string"