diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp index 82ff89e442..92620270b8 100644 --- a/indra/llui/llconsole.cpp +++ b/indra/llui/llconsole.cpp @@ -566,7 +566,12 @@ void LLConsole::Paragraph::updateLines(F32 screen_width, const LLFontGL* font, L if ( !force_resize ) { if ( mMaxWidth >= 0.0f - && mMaxWidth < screen_width ) + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + //&& mMaxWidth < screen_width) + // If viewer window was made as small as possible with the console enabled, it would cause an assert error + // as the line below can go as small as -38 + && mMaxWidth < screen_width || screen_width <= 30) + // [FIRE-35081] { return; //No resize required. } diff --git a/indra/newview/llface.h b/indra/newview/llface.h index 651a4167e0..20689ee0fb 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -52,7 +52,11 @@ class LLDrawInfo; class LLMeshSkinInfo; const F32 MIN_ALPHA_SIZE = 1024.f; -const F32 MIN_TEX_ANIM_SIZE = 512.f; +// [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer +//const F32 MIN_TEX_ANIM_SIZE = 512.f; +// Change the min size to +const F32 MIN_TEX_ANIM_SIZE = 64.f; +// [FIRE-35081] const U8 FACE_DO_NOT_BATCH_TEXTURES = 255; class alignas(16) LLFace diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index e3a68ef5a7..45af5f228d 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -889,7 +889,7 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent, F32 max_time) max_value = (S32)mObjects.size(); LLTimer timer; // If the number of objects since last being in here has changed (IE objects deleted, then reset the lazy update index) - if (mCurLazyUpdateIndex > max_value) + if (mCurLazyUpdateIndex >= max_value) { mCurLazyUpdateIndex = 0; } @@ -898,6 +898,12 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent, F32 max_time) // loop over number of objects in the BIN (128), or below until we run out of time while(num_updates < NUM_BINS) { + // Moved to the first to fix up the issue of access violation if the object list chaanges size during processing. + if (i >= (S32)mObjects.size()) + { + // Reset the index if we go over the max value + i = 0; + } objectp = mObjects[i]; if (objectp != nullptr && !objectp->isDead()) { @@ -906,12 +912,7 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent, F32 max_time) objectp->setPixelAreaAndAngle(agent); // Also sets the approx. pixel area objectp->updateTextures(); // Update the image levels of textures for this object. } - i++; - // Reset the index if we go over the max value - if (i == max_value) - { - i = 0; - } + i++; num_updates++; // Escape either if we run out of time, or loop back onto ourselves. diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index edcfdb3c9d..418876aa21 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -980,6 +980,9 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag //F32 vsize = face->getPixelArea(); //on_screen = face->mInFrustum; vsize = face->getPixelArea(); + // Apply the Aspect ratio and field of view to the vsize, this allows the texture to be in the same space as the face, IE the face has + // based around LLCamera::calculateFrustumPlanes + vsize = vsize * mAspectRatioFOVRemove; current_on_screen = face->mInFrustum; // Create a new var to store the current on screen status on_screen_count += current_on_screen; // Count the number of on sceen faces instead of using brach important_to_camera = face->mImportanceToCamera; // Store so we don't have to do 2 indirects later on @@ -1295,7 +1298,13 @@ F32 LLViewerTextureList::updateImagesFetchTextures(F32 max_time) typedef std::vector > entries_list_t; entries_list_t entries; - + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + // Pre-calculate current aspect ratio and FOV so we can use to remove from the Faces used for updating the textures + // This is used per face per texture, so it can cave a bunch of divisions as well as acessing the values from + // the camera singleton. + LLViewerCamera* camera = LLViewerCamera::getInstance(); // Store the + mAspectRatioFOVRemove = 1.0f / (camera->getAspect() * ((F32)tanf(0.5f * camera->getView()))); + // [FIRE-35081] // update N textures at beginning of mImageList U32 update_count = 0; static const S32 MIN_UPDATE_COUNT = gSavedSettings.getS32("TextureFetchUpdateMinCount"); // default: 32 diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h index 3816c32500..23e73c2ca2 100644 --- a/indra/newview/llviewertexturelist.h +++ b/indra/newview/llviewertexturelist.h @@ -235,6 +235,11 @@ public: // Fast cache stats static U32 sNumFastCacheReads; + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + // Store the camera's aspect ratio and fov + F32 mAspectRatioFOVRemove; + // [FIRE-35081] + private: typedef std::map< LLTextureKey, LLPointer > uuid_map_t; uuid_map_t mUUIDMap; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 40c070515c..35d116589f 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -2754,12 +2754,19 @@ LLViewerFetchedTexture *LLVOAvatar::getBakedTextureImage(const U8 te, const LLUU LL_DEBUGS("Avatar") << avString() << "get old-bake image from host " << uuid << LL_ENDL; LLHost host = getObjectHost(); result = LLViewerTextureManager::getFetchedTexture( - uuid, FTT_HOST_BAKE, true, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + //uuid, FTT_HOST_BAKE, true, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); + uuid, FTT_HOST_BAKE, true, LLGLTexture::BOOST_AVATAR_BAKED, LLViewerTexture::LOD_TEXTURE, 0, 0, host); + // [FIRE-35081] // [Legacy Bake] } LL_DEBUGS("Avatar") << avString() << "get server-bake image from URL " << url << LL_ENDL; result = LLViewerTextureManager::getFetchedTextureFromUrl( - url, FTT_SERVER_BAKE, true, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, uuid); + // + //url, FTT_SERVER_BAKE, true, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, uuid); + // Change the texture from LOD to AVATAR_BAKED. + url, FTT_SERVER_BAKE, true, LLGLTexture::BOOST_AVATAR_BAKED, LLViewerTexture::LOD_TEXTURE, 0, 0, uuid); + // [FIRE-35081] if (result->isMissingAsset()) { result->setIsMissingAsset(false);