Merge branch 'release/2024.09-ExtraFPS' of https://github.com/secondlife/viewer
# Conflicts: # indra/llxml/llxmlnode.cpp # indra/newview/featuretable_linux.txt # indra/newview/skins/default/xui/en/notifications.xmlmaster
commit
ec8ead914d
|
|
@ -405,7 +405,6 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
|
|||
{
|
||||
// recursively render ellipses at end of string
|
||||
// we've already reserved enough room
|
||||
gGL.pushUIMatrix();
|
||||
static LLWString elipses_wstr(utf8string_to_wstring(std::string("...")));
|
||||
render(elipses_wstr,
|
||||
0,
|
||||
|
|
@ -418,7 +417,6 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
|
|||
right_x,
|
||||
false,
|
||||
use_color);
|
||||
gGL.popUIMatrix();
|
||||
}
|
||||
|
||||
gGL.popUIMatrix();
|
||||
|
|
|
|||
|
|
@ -144,6 +144,8 @@ S32 LLFontVertexBuffer::render(
|
|||
|| mLastShadow != shadow // ex: buttons change shadow state
|
||||
|| mLastScaleX != LLFontGL::sScaleX
|
||||
|| mLastScaleY != LLFontGL::sScaleY
|
||||
|| mLastVertDPI != LLFontGL::sVertDPI
|
||||
|| mLastHorizDPI != LLFontGL::sHorizDPI
|
||||
|| mLastOrigin != LLFontGL::sCurOrigin)
|
||||
{
|
||||
genBuffers(fontp, text, begin_offset, x, y, color, halign, valign,
|
||||
|
|
@ -196,6 +198,8 @@ void LLFontVertexBuffer::genBuffers(
|
|||
|
||||
mLastScaleX = LLFontGL::sScaleX;
|
||||
mLastScaleY = LLFontGL::sScaleY;
|
||||
mLastVertDPI = LLFontGL::sVertDPI;
|
||||
mLastHorizDPI = LLFontGL::sHorizDPI;
|
||||
mLastOrigin = LLFontGL::sCurOrigin;
|
||||
|
||||
if (right_x)
|
||||
|
|
@ -209,6 +213,17 @@ void LLFontVertexBuffer::renderBuffers()
|
|||
gGL.flush(); // deliberately empty pending verts
|
||||
gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
|
||||
gGL.pushUIMatrix();
|
||||
|
||||
gGL.loadUIIdentity();
|
||||
|
||||
// Depth translation, so that floating text appears 'in-world'
|
||||
// and is correctly occluded.
|
||||
gGL.translatef(0.f, 0.f, LLFontGL::sCurDepth);
|
||||
gGL.setSceneBlendType(LLRender::BT_ALPHA);
|
||||
|
||||
// Note: ellipses should technically be covered by push/load/translate of their own
|
||||
// but it's more complexity, values do not change, skipping doesn't appear to break
|
||||
// anything, so we can skip that until it proves to cause issues.
|
||||
for (LLVertexBufferData& buffer : mBufferList)
|
||||
{
|
||||
buffer.draw();
|
||||
|
|
|
|||
|
|
@ -115,6 +115,8 @@ private:
|
|||
// LLFontGL's statics
|
||||
F32 mLastScaleX = 1.f;
|
||||
F32 mLastScaleY = 1.f;
|
||||
F32 mLastVertDPI = 0.f;
|
||||
F32 mLastHorizDPI = 0.f;
|
||||
LLCoordGL mLastOrigin;
|
||||
|
||||
static bool sEnableBufferCollection;
|
||||
|
|
|
|||
|
|
@ -605,7 +605,7 @@ public:
|
|||
|
||||
static LLVBOPool* sVBOPool = nullptr;
|
||||
|
||||
void LLVertexBufferData::draw()
|
||||
void LLVertexBufferData::drawWithMatrix()
|
||||
{
|
||||
if (!mVB)
|
||||
{
|
||||
|
|
@ -643,6 +643,28 @@ void LLVertexBufferData::draw()
|
|||
gGL.popMatrix();
|
||||
}
|
||||
|
||||
void LLVertexBufferData::draw()
|
||||
{
|
||||
if (!mVB)
|
||||
{
|
||||
llassert(false);
|
||||
// Not supposed to happen, check buffer generation
|
||||
return;
|
||||
}
|
||||
|
||||
if (mTexName)
|
||||
{
|
||||
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mTexName);
|
||||
}
|
||||
else
|
||||
{
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
}
|
||||
|
||||
mVB->setBuffer();
|
||||
mVB->drawArrays(mMode, 0, mCount);
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
|
||||
//static
|
||||
|
|
|
|||
|
|
@ -77,6 +77,7 @@ public:
|
|||
, mModelView(projection)
|
||||
, mTexture0(texture0)
|
||||
{}
|
||||
void drawWithMatrix();
|
||||
void draw();
|
||||
LLPointer<LLVertexBuffer> mVB;
|
||||
U8 mMode;
|
||||
|
|
|
|||
|
|
@ -3294,6 +3294,27 @@ std::string LLXMLNode::getTextContents() const
|
|||
return msg;
|
||||
}
|
||||
|
||||
std::string LLXMLNode::getXMLRPCTextContents() const
|
||||
{
|
||||
std::string msg;
|
||||
std::string::size_type start = mValue.find_first_not_of(" \t\n");
|
||||
if (start != mValue.npos)
|
||||
{
|
||||
std::string::size_type end = mValue.find_last_not_of(" \t\n");
|
||||
if (end != mValue.npos)
|
||||
{
|
||||
msg = mValue.substr(start, end + 1 - start);
|
||||
}
|
||||
else
|
||||
{
|
||||
msg = mValue.substr(start);
|
||||
}
|
||||
}
|
||||
// Convert any internal CR to LF
|
||||
msg = utf8str_removeCRLF(msg);
|
||||
return msg;
|
||||
}
|
||||
|
||||
void LLXMLNode::setLineNumber(S32 line_number)
|
||||
{
|
||||
mLineNumber = line_number;
|
||||
|
|
@ -3403,7 +3424,7 @@ bool LLXMLNode::fromXMLRPCValue(LLSD& target)
|
|||
|
||||
if (childp->hasName("string"))
|
||||
{
|
||||
target.assign(childp->getValue());
|
||||
target.assign(LLStringFn::xml_decode(childp->getXMLRPCTextContents()));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -295,6 +295,7 @@ protected:
|
|||
bool removeChild(LLXMLNode* child);
|
||||
bool isFullyDefault();
|
||||
|
||||
std::string getXMLRPCTextContents() const;
|
||||
bool parseXmlRpcArrayValue(LLSD& target);
|
||||
bool parseXmlRpcStructValue(LLSD& target);
|
||||
|
||||
|
|
|
|||
|
|
@ -12574,7 +12574,7 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>1.5</real>
|
||||
<real>1.0</real>
|
||||
</map>
|
||||
|
||||
<key>RenderReflectionProbeDrawDistance</key>
|
||||
|
|
@ -15217,6 +15217,28 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Backup</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>TextureDiscardBackgroundedTime</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Specify how long to wait before discarding texture data after viewer is backgrounded. (zero or negative to disable)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>60.0</real>
|
||||
</map>
|
||||
<key>TextureDiscardMinimizedTime</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Specify how long to wait before discarding texture data after viewer is minimized. (zero or negative to disable)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>1.0</real>
|
||||
</map>
|
||||
<key>TextureFetchConcurrency</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
version 63
|
||||
version 64
|
||||
// The version number above should be incremented IF AND ONLY IF some
|
||||
// change has been made that is sufficiently important to justify
|
||||
// resetting the graphics preferences of all users to the recommended
|
||||
|
|
@ -81,7 +81,9 @@ RenderHeroProbeUpdateRate 1 6
|
|||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderDownScaleMethod 1 1
|
||||
RenderCASSharpness 1 1
|
||||
|
||||
RenderExposure 1 4
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 1
|
||||
|
||||
//
|
||||
// Low Graphics Settings
|
||||
|
|
@ -119,6 +121,9 @@ RenderHeroProbeDistance 1 4
|
|||
RenderHeroProbeUpdateRate 1 6
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 0
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// Medium Low Graphics Settings
|
||||
|
|
@ -156,6 +161,9 @@ RenderHeroProbeDistance 1 6
|
|||
RenderHeroProbeUpdateRate 1 3
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 0
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// Medium Graphics Settings (standard)
|
||||
|
|
@ -193,6 +201,9 @@ RenderHeroProbeDistance 1 6
|
|||
RenderHeroProbeUpdateRate 1 3
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 0
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// Medium High Graphics Settings
|
||||
|
|
@ -230,6 +241,9 @@ RenderHeroProbeDistance 1 6
|
|||
RenderHeroProbeUpdateRate 1 2
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 8
|
||||
RenderCASSharpness 1 0
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// High Graphics Settings (SSAO + sun shadows)
|
||||
|
|
@ -267,6 +281,9 @@ RenderHeroProbeDistance 1 8
|
|||
RenderHeroProbeUpdateRate 1 2
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 8
|
||||
RenderCASSharpness 1 0.4
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// High Ultra Graphics Settings (deferred + SSAO + all shadows)
|
||||
|
|
@ -304,6 +321,9 @@ RenderHeroProbeDistance 1 16
|
|||
RenderHeroProbeUpdateRate 1 1
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 4
|
||||
RenderCASSharpness 1 0.4
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// Ultra graphics (REALLY PURTY!)
|
||||
|
|
@ -341,6 +361,9 @@ RenderHeroProbeDistance 1 16
|
|||
RenderHeroProbeUpdateRate 1 1
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 4
|
||||
RenderCASSharpness 1 0.4
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// Class Unknown Hardware (unknown)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
version 49
|
||||
version 50
|
||||
// The version number above should be incremented IF AND ONLY IF some
|
||||
// change has been made that is sufficiently important to justify
|
||||
// resetting the graphics preferences of all users to the recommended
|
||||
|
|
@ -81,7 +81,9 @@ RenderHeroProbeUpdateRate 1 6
|
|||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderDownScaleMethod 1 1
|
||||
RenderCASSharpness 1 1
|
||||
|
||||
RenderExposure 1 4
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 1
|
||||
|
||||
//
|
||||
// Low Graphics Settings
|
||||
|
|
@ -119,6 +121,9 @@ RenderHeroProbeDistance 1 4
|
|||
RenderHeroProbeUpdateRate 1 6
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 0
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// Medium Low Graphics Settings
|
||||
|
|
@ -156,6 +161,9 @@ RenderHeroProbeDistance 1 6
|
|||
RenderHeroProbeUpdateRate 1 3
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 0
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// Medium Graphics Settings (standard)
|
||||
|
|
@ -193,6 +201,9 @@ RenderHeroProbeDistance 1 6
|
|||
RenderHeroProbeUpdateRate 1 3
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 0
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// Medium High Graphics Settings
|
||||
|
|
@ -230,6 +241,9 @@ RenderHeroProbeDistance 1 6
|
|||
RenderHeroProbeUpdateRate 1 2
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 8
|
||||
RenderCASSharpness 1 0
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// High Graphics Settings (SSAO + sun shadows)
|
||||
|
|
@ -267,6 +281,9 @@ RenderHeroProbeDistance 1 8
|
|||
RenderHeroProbeUpdateRate 1 2
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 8
|
||||
RenderCASSharpness 1 0.4
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// High Ultra Graphics Settings (deferred + SSAO + all shadows)
|
||||
|
|
@ -304,6 +321,9 @@ RenderHeroProbeDistance 1 16
|
|||
RenderHeroProbeUpdateRate 1 1
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 4
|
||||
RenderCASSharpness 1 0.4
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// Ultra graphics (REALLY PURTY!)
|
||||
|
|
@ -341,6 +361,9 @@ RenderHeroProbeDistance 1 16
|
|||
RenderHeroProbeUpdateRate 1 1
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 4
|
||||
RenderCASSharpness 1 0.4
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// Class Unknown Hardware (unknown)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
version 61
|
||||
version 62
|
||||
// The version number above should be incremented IF AND ONLY IF some
|
||||
// change has been made that is sufficiently important to justify
|
||||
// resetting the graphics preferences of all users to the recommended
|
||||
|
|
@ -80,6 +80,9 @@ RenderHeroProbeDistance 1 16
|
|||
RenderHeroProbeUpdateRate 1 6
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 1
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 1
|
||||
|
||||
//
|
||||
// Low Graphics Settings
|
||||
|
|
@ -117,6 +120,9 @@ RenderHeroProbeDistance 1 4
|
|||
RenderHeroProbeUpdateRate 1 6
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 0
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// Medium Low Graphics Settings
|
||||
|
|
@ -154,6 +160,9 @@ RenderHeroProbeDistance 1 6
|
|||
RenderHeroProbeUpdateRate 1 3
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 0
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// Medium Graphics Settings (standard)
|
||||
|
|
@ -191,6 +200,9 @@ RenderHeroProbeDistance 1 6
|
|||
RenderHeroProbeUpdateRate 1 3
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 0
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// Medium High Graphics Settings
|
||||
|
|
@ -228,6 +240,9 @@ RenderHeroProbeDistance 1 6
|
|||
RenderHeroProbeUpdateRate 1 2
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 8
|
||||
RenderCASSharpness 1 0
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// High Graphics Settings (SSAO + sun shadows)
|
||||
|
|
@ -265,6 +280,9 @@ RenderHeroProbeDistance 1 8
|
|||
RenderHeroProbeUpdateRate 1 2
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 8
|
||||
RenderCASSharpness 1 0
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// High Ultra Graphics Settings (SSAO + all shadows)
|
||||
|
|
@ -302,6 +320,9 @@ RenderHeroProbeDistance 1 16
|
|||
RenderHeroProbeUpdateRate 1 1
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 4
|
||||
RenderCASSharpness 1 0.4
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// Ultra graphics (REALLY PURTY!)
|
||||
|
|
@ -339,6 +360,9 @@ RenderHeroProbeDistance 1 16
|
|||
RenderHeroProbeUpdateRate 1 1
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 4
|
||||
RenderCASSharpness 1 0.4
|
||||
RenderExposure 1 1
|
||||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
|
||||
//
|
||||
// Class Unknown Hardware (unknown)
|
||||
|
|
|
|||
|
|
@ -526,6 +526,35 @@ void display(bool rebuild, F32 zoom_factor, int subfield, bool for_snapshot)
|
|||
// true = minimized, do not show/update the TP screen. HB
|
||||
update_tp_display(true);
|
||||
}
|
||||
|
||||
// Run texture subsystem to discard memory while backgrounded
|
||||
if (!gNonInteractive)
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED("Update Images");
|
||||
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_DISPLAY("Class");
|
||||
LLViewerTexture::updateClass();
|
||||
}
|
||||
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_DISPLAY("Image Update Bump");
|
||||
gBumpImageList.updateImages(); // must be called before gTextureList version so that it's textures are thrown out first.
|
||||
}
|
||||
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_DISPLAY("List");
|
||||
F32 max_image_decode_time = 0.050f * gFrameIntervalSeconds.value(); // 50 ms/second decode time
|
||||
max_image_decode_time = llclamp(max_image_decode_time, 0.002f, 0.005f); // min 2ms/frame, max 5ms/frame)
|
||||
gTextureList.updateImages(max_image_decode_time);
|
||||
}
|
||||
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_DISPLAY("GLTF Materials Cleanup");
|
||||
// remove dead gltf materials
|
||||
gGLTFMaterialList.flushMaterials();
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@
|
|||
#include "message.h"
|
||||
#include "lltimer.h"
|
||||
#include "v4coloru.h"
|
||||
#include "llnotificationsutil.h"
|
||||
|
||||
// viewer includes
|
||||
#include "llimagegl.h"
|
||||
|
|
@ -561,7 +562,6 @@ void LLViewerTexture::updateClass()
|
|||
{
|
||||
static LLCachedControl<F32> low_mem_min_discard_increment(gSavedSettings, "RenderLowMemMinDiscardIncrement", .1f);
|
||||
sDesiredDiscardBias += (F32) low_mem_min_discard_increment * (F32) gFrameIntervalSeconds;
|
||||
sEvaluationTimer.reset();
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -579,20 +579,49 @@ void LLViewerTexture::updateClass()
|
|||
}
|
||||
|
||||
// set to max discard bias if the window has been backgrounded for a while
|
||||
static F32 last_desired_discard_bias = 1.f;
|
||||
static bool was_backgrounded = false;
|
||||
static LLFrameTimer backgrounded_timer;
|
||||
static LLCachedControl<F32> minimized_discard_time(gSavedSettings, "TextureDiscardMinimizedTime", 1.f);
|
||||
static LLCachedControl<F32> backgrounded_discard_time(gSavedSettings, "TextureDiscardBackgroundedTime", 60.f);
|
||||
|
||||
bool in_background = (gViewerWindow && !gViewerWindow->getWindow()->getVisible()) || !gFocusMgr.getAppHasFocus();
|
||||
|
||||
bool is_minimized = gViewerWindow && gViewerWindow->getWindow()->getMinimized() && in_background;
|
||||
if (in_background)
|
||||
{
|
||||
if (backgrounded_timer.getElapsedTimeF32() > 10.f)
|
||||
F32 discard_time = is_minimized ? minimized_discard_time : backgrounded_discard_time;
|
||||
if (discard_time > 0.f && backgrounded_timer.getElapsedTimeF32() > discard_time)
|
||||
{
|
||||
if (!was_backgrounded)
|
||||
{
|
||||
LL_INFOS() << "Viewer is backgrounded, freeing up video memory." << LL_ENDL;
|
||||
std::string notification_name;
|
||||
std::string setting;
|
||||
if (is_minimized)
|
||||
{
|
||||
notification_name = "TextureDiscardMinimized";
|
||||
setting = "TextureDiscardMinimizedTime";
|
||||
}
|
||||
else
|
||||
{
|
||||
notification_name = "TextureDiscardBackgrounded";
|
||||
setting = "TextureDiscardBackgroundedTime";
|
||||
}
|
||||
|
||||
LL_INFOS() << "Viewer was " << (is_minimized ? "minimized" : "backgrounded") << " for " << discard_time
|
||||
<< "s, freeing up video memory." << LL_ENDL;
|
||||
|
||||
LLNotificationsUtil::add(notification_name, llsd::map("DELAY", discard_time), LLSD(),
|
||||
[=](const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
if (response["Cancel_okcancelignore"].asBoolean())
|
||||
{
|
||||
LL_INFOS() << "User chose to disable texture discard on " << (is_minimized ? "minimizing." : "backgrounding.") << LL_ENDL;
|
||||
gSavedSettings.setF32(setting, -1.f);
|
||||
}
|
||||
});
|
||||
last_desired_discard_bias = sDesiredDiscardBias;
|
||||
was_backgrounded = true;
|
||||
}
|
||||
was_backgrounded = true;
|
||||
sDesiredDiscardBias = 4.f;
|
||||
}
|
||||
}
|
||||
|
|
@ -601,9 +630,9 @@ void LLViewerTexture::updateClass()
|
|||
backgrounded_timer.reset();
|
||||
if (was_backgrounded)
|
||||
{ // if the viewer was backgrounded
|
||||
LL_INFOS() << "Viewer is no longer backgrounded, resuming normal texture usage." << LL_ENDL;
|
||||
LL_INFOS() << "Viewer is no longer backgrounded or minimized, resuming normal texture usage." << LL_ENDL;
|
||||
was_backgrounded = false;
|
||||
sDesiredDiscardBias = 1.f;
|
||||
sDesiredDiscardBias = last_desired_discard_bias;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1726,6 +1755,7 @@ void LLViewerFetchedTexture::processTextureStats()
|
|||
if(mDesiredDiscardLevel > mMinDesiredDiscardLevel)//need to load more
|
||||
{
|
||||
mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, mMinDesiredDiscardLevel);
|
||||
mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S32)mLoadedCallbackDesiredDiscardLevel);
|
||||
mFullyLoaded = false;
|
||||
}
|
||||
//setDebugText("fully loaded");
|
||||
|
|
@ -1781,6 +1811,7 @@ void LLViewerFetchedTexture::processTextureStats()
|
|||
log((F32)mFullHeight / mKnownDrawHeight) / log_2);
|
||||
mDesiredDiscardLevel = llclamp(mDesiredDiscardLevel, (S8)0, (S8)getMaxDiscardLevel());
|
||||
mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, mMinDesiredDiscardLevel);
|
||||
mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S32)mLoadedCallbackDesiredDiscardLevel);
|
||||
}
|
||||
mKnownDrawSizeChanged = false;
|
||||
|
||||
|
|
@ -2515,6 +2546,7 @@ bool LLViewerFetchedTexture::doLoadedCallbacks()
|
|||
if (mIsRawImageValid)
|
||||
{
|
||||
// If we have an existing raw image, we have a baseline for the raw and auxiliary quality levels.
|
||||
current_raw_discard = mRawDiscardLevel;
|
||||
best_raw_discard = llmin(best_raw_discard, mRawDiscardLevel);
|
||||
best_aux_discard = llmin(best_aux_discard, mRawDiscardLevel); // We always decode the aux when we decode the base raw
|
||||
current_aux_discard = llmin(current_aux_discard, best_aux_discard);
|
||||
|
|
@ -2973,10 +3005,12 @@ void LLViewerLODTexture::processTextureStats()
|
|||
{
|
||||
// If the image has not been significantly visible in a while, we don't want it
|
||||
mDesiredDiscardLevel = llmin(mMinDesiredDiscardLevel, (S8)(MAX_DISCARD_LEVEL + 1));
|
||||
mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S32)mLoadedCallbackDesiredDiscardLevel);
|
||||
}
|
||||
else if (!mFullWidth || !mFullHeight)
|
||||
{
|
||||
mDesiredDiscardLevel = getMaxDiscardLevel();
|
||||
mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S32)mLoadedCallbackDesiredDiscardLevel);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -3046,6 +3080,7 @@ void LLViewerLODTexture::processTextureStats()
|
|||
// stop requesting more
|
||||
mDesiredDiscardLevel = current_discard;
|
||||
}
|
||||
mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S32)mLoadedCallbackDesiredDiscardLevel);
|
||||
}
|
||||
|
||||
if(mForceToSaveRawImage && mDesiredSavedRawDiscardLevel >= 0)
|
||||
|
|
|
|||
|
|
@ -329,6 +329,8 @@ bool LLXMLRPCTransaction::Impl::process()
|
|||
if (mHasResponse && !mResponseParsed)
|
||||
{
|
||||
LLXMLNodePtr root;
|
||||
bool strip_escaped_strings = LLXMLNode::sStripEscapedStrings;
|
||||
LLXMLNode::sStripEscapedStrings = false;
|
||||
if (!LLXMLNode::parseBuffer(mResponseText.data(), mResponseText.size(),
|
||||
root, nullptr))
|
||||
{
|
||||
|
|
@ -345,6 +347,7 @@ bool LLXMLRPCTransaction::Impl::process()
|
|||
LL_WARNS() << "XMLRPC response parsing failed; request URI: "
|
||||
<< mURI << LL_ENDL;
|
||||
}
|
||||
LLXMLNode::sStripEscapedStrings = strip_escaped_strings;
|
||||
mResponseParsed = true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5128,6 +5128,14 @@ Möchten Sie fortfahren?
|
|||
GLTF-Szenen werden auf Ihrer Hardware momentan noch nicht unterstützt.
|
||||
<usetemplate name="okbutton" yestext="OK"/>
|
||||
</notification>
|
||||
<notification name="TextureDiscardBackgrounded">
|
||||
Um die Systemleistung zu verbessern hat [APP_NAME] die Nutzung von Textur-Speicher nach [DELAY] Sekunden im Hintergrund reduziert. Es kann einen Moment dauern, bis die Textur-Qualität wieder den normalen Standard erreicht.
|
||||
<usetemplate ignoretext="Über Nutzung von Textur-Speicher im Hintergrund hinweisen" name="okcancelignore" yestext="OK" notext="Deaktivieren"/>
|
||||
</notification>
|
||||
<notification name="TextureDiscardMinimized">
|
||||
Um die Systemleistung zu verbessern hat [APP_NAME] die Nutzung von Textur-Speicher nach [DELAY] Sekunden im minimierten Zustand reduziert. Es kann einen Moment dauern, bis die Textur-Qualität wieder den normalen Standard erreicht.
|
||||
<usetemplate ignoretext="Über Nutzung von Textur-Speicher im minimierten Zustand hinweisen" name="okcancelignore" yestext="OK" notext="Deaktivieren"/>
|
||||
</notification>
|
||||
|
||||
<notification name="NoValidEnvSettingFound">
|
||||
Keine gültige Einstellung für die Umgebung ausgewählt.
|
||||
|
|
|
|||
|
|
@ -167,6 +167,23 @@
|
|||
</text>
|
||||
<check_box label="VRAM-Erkennung übersteuern" name="FSOverrideVRAMDetection" tool_tip="Erlaubt die Übersteuerung der VRAM-Erkennung (mit extreme Vorsicht verwenden)" />
|
||||
<slider label="Dedizierter GPU-VRAM(GB):" name="FSForcedVideoMemory" tool_tip="Wichtig: Mit extremer Vorsicht verwenden. Übersteuert den erkannten VRAM der GPU. Dieser Wert darf nicht den geteilten VRAM enthalten, der Teil des Systemspeichers ist. Falls Sie den Unterschied nicht kennen, verändern Sie diese Einstellung bitte nicht!" />
|
||||
<text name="automatic_texture_downscale_settings">
|
||||
Automatische Textur-Herunterskalierung:
|
||||
</text>
|
||||
<text name="TextureDiscardBackgroundedTime_label" tool_tip="Texturen herunterskalieren nach Anzahl Sekunden, wenn der Viewer nicht den Fokus besitzt.">
|
||||
Im Hintergrund (0 zum deaktivieren)
|
||||
</text>
|
||||
<spinner name="TextureDiscardBackgroundedTime" tool_tip="Texturen herunterskalieren nach Anzahl Sekunden, wenn der Viewer nicht den Fokus besitzt."/>
|
||||
<text name="TextureDiscardBackgroundedTime_seconds">
|
||||
Sekunde(n)
|
||||
</text>
|
||||
<text name="TextureDiscardMinimizedTime_label" tool_tip="Texturen herunterskalieren nach Anzahl Sekunden, wenn der Viewer minimiert ist.">
|
||||
Minimiert (0 zum deaktivieren)
|
||||
</text>
|
||||
<spinner name="TextureDiscardMinimizedTime" tool_tip="Texturen herunterskalieren nach Anzahl Sekunden, wenn der Viewer minimiert ist."/>
|
||||
<text name="TextureDiscardMinimizedTime_seconds">
|
||||
Sekunde(n)
|
||||
</text>
|
||||
</panel>
|
||||
|
||||
<panel label="Darstellung" name="Rendering">
|
||||
|
|
|
|||
|
|
@ -821,7 +821,7 @@
|
|||
layout="topleft"
|
||||
left="420"
|
||||
min_val="0.5"
|
||||
max_val="1.5"
|
||||
max_val="4.0"
|
||||
name="RenderExposure"
|
||||
show_text="true"
|
||||
top_delta="24"
|
||||
|
|
|
|||
|
|
@ -14520,6 +14520,36 @@ This will replace the items in the selected outfit with the items you are wearin
|
|||
yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notify.tga"
|
||||
name="TextureDiscardBackgrounded"
|
||||
type="notify">
|
||||
<unique>
|
||||
<context>DELAY</context>
|
||||
</unique>
|
||||
To improve system performance, [APP_NAME] has reduced texture memory usage after being in the background for [DELAY] seconds. It may take some time for texture image quality to return to normal.
|
||||
<usetemplate
|
||||
ignoretext="Ask me about background texture memory usage and recovery"
|
||||
name="okcancelignore"
|
||||
yestext="OK"
|
||||
notext="Disable"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notify.tga"
|
||||
name="TextureDiscardMinimized"
|
||||
type="notify">
|
||||
<unique>
|
||||
<context>DELAY</context>
|
||||
</unique>
|
||||
To improve system performance, [APP_NAME] has reduced texture memory usage after being minimized for [DELAY] seconds. It may take some time for texture image quality to return to normal.
|
||||
<usetemplate
|
||||
ignoretext="Ask me about minimized texture memory usage and recovery"
|
||||
name="okcancelignore"
|
||||
yestext="OK"
|
||||
notext="Disable"/>
|
||||
</notification>
|
||||
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
|
|
|
|||
|
|
@ -1117,6 +1117,97 @@ If you do not understand the distinction then leave this control alone."
|
|||
top_pad="5"
|
||||
width="475"
|
||||
/>
|
||||
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="12"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="automatic_texture_downscale_settings"
|
||||
top_pad="10"
|
||||
width="308">
|
||||
Automatic Texture Downscaling:
|
||||
</text>
|
||||
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="12"
|
||||
layout="topleft"
|
||||
left="15"
|
||||
name="TextureDiscardBackgroundedTime_label"
|
||||
tool_tip="Downscales textures after selected amount of seconds when not the active window."
|
||||
top_pad="10"
|
||||
width="275">
|
||||
In Background (0 to disable)
|
||||
</text>
|
||||
<spinner
|
||||
control_name="TextureDiscardBackgroundedTime"
|
||||
decimal_digits="0"
|
||||
follows="left|top"
|
||||
height="20"
|
||||
increment="1"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
name="TextureDiscardBackgroundedTime"
|
||||
tool_tip="Downscales textures after selected amount of seconds when not the active window."
|
||||
top_delta="-5"
|
||||
width="100"
|
||||
/>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="12"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
name="TextureDiscardBackgroundedTime_seconds"
|
||||
top_delta="5"
|
||||
width="50">
|
||||
Second(s)
|
||||
</text>
|
||||
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="12"
|
||||
layout="topleft"
|
||||
left="15"
|
||||
name="TextureDiscardMinimizedTime_label"
|
||||
tool_tip="Downscales textures after selected amount of seconds when minimized."
|
||||
top_pad="10"
|
||||
width="275">
|
||||
Minimized (0 to disable)
|
||||
</text>
|
||||
<spinner
|
||||
control_name="TextureDiscardMinimizedTime"
|
||||
decimal_digits="0"
|
||||
follows="left|top"
|
||||
height="20"
|
||||
increment="1"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
name="TextureDiscardMinimizedTime"
|
||||
tool_tip="Downscales textures after selected amount of seconds when minimized."
|
||||
top_delta="-5"
|
||||
width="100"
|
||||
/>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="12"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
name="TextureDiscardMinimizedTime_seconds"
|
||||
top_delta="5"
|
||||
width="50">
|
||||
Second(s)
|
||||
</text>
|
||||
</panel>
|
||||
|
||||
<!--Rendering-->
|
||||
|
|
|
|||
Loading…
Reference in New Issue