diff options
| author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2025-03-26 21:07:20 +0200 | 
|---|---|---|
| committer | Andrey Kleshchev <117672381+akleshchev@users.noreply.github.com> | 2025-03-27 18:29:19 +0200 | 
| commit | 2b44a97a16dcf5f2a3356f1a4ccf29a47bbe9c87 (patch) | |
| tree | a3926ee6b7e3b30d1ca0bcbbaa448af13050fa20 /indra | |
| parent | d67859e48351a4db498f658030c0eb2866d59e77 (diff) | |
Avoid recalculating pixel area when possible
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llviewertexturelist.cpp | 23 | 
1 files changed, 20 insertions, 3 deletions
| diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index db530a3943..63d5a2d778 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -899,6 +899,9 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag  {      llassert(!gCubeSnapshot); +    constexpr F32 BIAS_TRS_OUT_OF_SCREEN = 1.5f; +    constexpr F32 BIAS_TRS_ON_SCREEN = 1.f; +      if (imagep->getBoostLevel() < LLViewerFetchedTexture::BOOST_HIGH)  // don't bother checking face list for boosted textures      {          static LLCachedControl<F32> texture_scale_min(gSavedSettings, "TextureScaleMinAreaFactor", 0.0095f); @@ -940,7 +943,7 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag                      F32 vsize = face->getPixelArea(); -                    on_screen = face->mInFrustum; +                    on_screen |= face->mInFrustum;                      // Scale desired texture resolution higher or lower depending on texture scale                      // @@ -972,14 +975,28 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag                      }                      max_vsize = llmax(max_vsize, vsize); + +                    // addTextureStats limits size to sMaxVirtualSize +                    if (max_vsize >= LLViewerFetchedTexture::sMaxVirtualSize +                        && (on_screen || LLViewerTexture::sDesiredDiscardBias <= BIAS_TRS_ON_SCREEN)) +                    { +                        break; +                    }                  }              } + +            if (max_vsize >= LLViewerFetchedTexture::sMaxVirtualSize +                && (on_screen || LLViewerTexture::sDesiredDiscardBias <= BIAS_TRS_ON_SCREEN)) +            { +                break; +            }          }          if (face_count > 1024)          { // this texture is used in so many places we should just boost it and not bother checking its vsize              // this is especially important because the above is not time sliced and can hit multiple ms for a single texture              imagep->setBoostLevel(LLViewerFetchedTexture::BOOST_HIGH); +            // Do we ever remove it? This also sets texture nodelete!          }          if (imagep->getType() == LLViewerTexture::LOD_TEXTURE && imagep->getBoostLevel() == LLViewerTexture::BOOST_NONE) @@ -987,8 +1004,8 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag            // this is an alternative to decaying mMaxVirtualSize over time            // that keeps textures from continously downrezzing and uprezzing in the background -        if (LLViewerTexture::sDesiredDiscardBias > 1.5f || -                (!on_screen && LLViewerTexture::sDesiredDiscardBias > 1.f)) +            if (LLViewerTexture::sDesiredDiscardBias > BIAS_TRS_OUT_OF_SCREEN || +                (!on_screen && LLViewerTexture::sDesiredDiscardBias > BIAS_TRS_ON_SCREEN))              {                  imagep->mMaxVirtualSize = 0.f;              } | 
