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.xml
master
Ansariel 2024-10-31 19:42:30 +01:00
commit ec8ead914d
19 changed files with 383 additions and 18 deletions

View File

@ -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();

View File

@ -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();

View File

@ -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;

View File

@ -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

View File

@ -77,6 +77,7 @@ public:
, mModelView(projection)
, mTexture0(texture0)
{}
void drawWithMatrix();
void draw();
LLPointer<LLVertexBuffer> mVB;
U8 mMode;

View File

@ -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;
}

View File

@ -295,6 +295,7 @@ protected:
bool removeChild(LLXMLNode* child);
bool isFullyDefault();
std::string getXMLRPCTextContents() const;
bool parseXmlRpcArrayValue(LLSD& target);
bool parseXmlRpcStructValue(LLSD& target);

View File

@ -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>

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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;
}

View File

@ -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)

View File

@ -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;
}

View File

@ -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.

View File

@ -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">

View File

@ -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"

View File

@ -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"

View File

@ -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-->