From c082f0cd76a5cb6bb484e8e7928ce064aee0a1e1 Mon Sep 17 00:00:00 2001 From: minerjr Date: Mon, 17 Mar 2025 23:13:41 -0300 Subject: [PATCH] FIRE-35081 - Handled animated/media textures, grass, tree and light textures Added new boost levels for Tree, Grass and Light textures (More for tracking as they have custom hard coded values for the mPixelArea which causes issues with loading of sizes. Added adjustments for the calcPixelArea and calcImportanceToCamera as well as getTextureVirtualSize Added virtual texture size updates for Media textures Added code to scale down off screen textures (saves a lot of texture VRAM. Added additional features for the LLViewerTextureList::Dump Only issue is server controlled textures which animate tend to load low quality, then upscale as well as Sculpted Volume's which force textures to reload. --- indra/llrender/llgltexture.cpp | 6 +++ indra/llrender/llgltexture.h | 5 ++ indra/newview/llappviewer.cpp | 4 +- indra/newview/llface.cpp | 40 +++++++++------ indra/newview/llviewermedia.cpp | 1 + indra/newview/llviewertexture.cpp | 73 ++++++++++++++++++++++++--- indra/newview/llviewertexturelist.cpp | 39 +++++++++----- indra/newview/llvoavatar.cpp | 6 ++- indra/newview/llvograss.cpp | 6 ++- indra/newview/llvotree.cpp | 6 ++- indra/newview/llvovolume.cpp | 22 +++++++- indra/newview/pipeline.cpp | 21 -------- 12 files changed, 166 insertions(+), 63 deletions(-) diff --git a/indra/llrender/llgltexture.cpp b/indra/llrender/llgltexture.cpp index 89f2a75002..5f645b9d76 100644 --- a/indra/llrender/llgltexture.cpp +++ b/indra/llrender/llgltexture.cpp @@ -104,6 +104,12 @@ void LLGLTexture::setBoostLevel(S32 level) if(mBoostLevel != LLGLTexture::BOOST_NONE && mBoostLevel != LLGLTexture::BOOST_ICON && mBoostLevel != LLGLTexture::BOOST_THUMBNAIL + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + // Add the new grass, light and tree boosts + && mBoostLevel != LLGLTexture::BOOST_GRASS + && mBoostLevel != LLGLTexture::BOOST_LIGHT + && mBoostLevel != LLGLTexture::BOOST_TREE + // [FIRE-35081] && mBoostLevel != LLGLTexture::BOOST_TERRAIN) { setNoDelete() ; diff --git a/indra/llrender/llgltexture.h b/indra/llrender/llgltexture.h index 3cf97d5c6b..65911e92a7 100644 --- a/indra/llrender/llgltexture.h +++ b/indra/llrender/llgltexture.h @@ -53,6 +53,11 @@ public: BOOST_AVATAR_BAKED , BOOST_TERRAIN , // Needed for minimap generation for now. Lower than BOOST_HIGH so the texture stats don't get forced, i.e. texture stats are manually managed by minimap/terrain instead. + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + BOOST_GRASS , // Grass has a alternative calculation for virtual and face sizes. + BOOST_TREE , // Tree has a alternative calculation for virtual and face sizes. + BOOST_LIGHT , // Light textures has a alternative calculation for virtual and face sizes. + // [FIRE-35081] BOOST_HIGH = 10, BOOST_SCULPTED , BOOST_BUMP , diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 42a3fdd5de..d27c8432f6 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -5955,8 +5955,8 @@ void LLAppViewer::idle() // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer // Added a max time limit to the object list updates as these updates do affect the texture system //gObjectList.updateApparentAngles(gAgent); - F32 max_update_apparent_angles = 0.0020f * gFrameIntervalSeconds.value(); // 20 ms/second decode time - max_update_apparent_angles = llclamp(max_update_apparent_angles, 0.00005f, 0.0002f); // min 2ms/frame, max 5ms/frame) + F32 max_update_apparent_angles = 0.025f * gFrameIntervalSeconds.value(); // 20 ms/second decode time + max_update_apparent_angles = llclamp(max_update_apparent_angles, 0.002f, 0.005f); // min 2ms/frame, max 5ms/frame) gObjectList.updateApparentAngles(gAgent, max_update_apparent_angles); // [FIRE-35081] } diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 4f95125c5c..5ffcc1a059 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -179,9 +179,9 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp) mFaceColor = LLColor4(1,0,0,1); - mImportanceToCamera = 0.f ; + mImportanceToCamera = 1.f ; // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer - mCloseToCamera = 0.0f; + mCloseToCamera = 1.0f; // [FIRE-35081] mBoundingSphereRadius = 0.0f ; @@ -386,6 +386,11 @@ void LLFace::switchTexture(U32 ch, LLViewerTexture* new_texture) return; } + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + // Need to update the new textures to the old textures boost and max virtual size, so they won't + new_texture->setBoostLevel(mTexture[ch]->getBoostLevel()); + new_texture->addTextureStats(mTexture[ch]->getMaxVirtualSize()); + // [FIRE-35081] if (ch == LLRender::DIFFUSE_MAP) { if (getViewerObject()) @@ -2332,6 +2337,10 @@ F32 LLFace::getTextureVirtualSize() } face_area = LLFace::adjustPixelArea(mImportanceToCamera, face_area); + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + // Remove the face area being affected by being partial off screen as close to screen textures can then become scaled down along with + // animated textures. + /* if(face_area > LLViewerTexture::sMinLargeImageSize) //if is large image, shrink face_area by considering the partial overlapping. { if(mImportanceToCamera > LEAST_IMPORTANCE_FOR_LARGE_IMAGE && mTexture[LLRender::DIFFUSE_MAP].notNull() && mTexture[LLRender::DIFFUSE_MAP]->isLargeImage()) @@ -2339,12 +2348,8 @@ F32 LLFace::getTextureVirtualSize() face_area *= adjustPartialOverlapPixelArea(cos_angle_to_view_dir, radius ); } } - - // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer - // Remove the aspect ratio and FOV from the area of the face to remove the changes to the window size from affecting the calculations. - // So that textures are in the same space as the face. - //face_area = face_area * LLViewerCamera::getInstance()->getInverseAspect(); - // [FIRE-35081] + */ + // [FIRE-35081] setVirtualSize(face_area) ; return face_area; @@ -2483,7 +2488,10 @@ bool LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius) // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer // Added close to camera (based upon the mImportanceToCamera) where any object that is within the FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE (16.1f) // gets an extra texture scaling up. - mCloseToCamera = dist <= FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[0][0] * camera->getDrawDistanceMultiplier() ? 1.0f : 0.0f; + // Use positive distance to the camera and apply the multiplier based upon the texture scaled for increase in the default draw distance + mCloseToCamera = (dist >= 0.0f && dist <= FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[0][0] * camera->getDrawDistanceMultiplier()) ? 1.0f : 0.0f; + // Check if the object is positive distance to the far plane and positive cos angle is in frustum + mInFrustum = (dist >= 0 && dist <= camera->getFar() && cos_angle_to_view_dir > 0.0f); // [FIRE-35081] //if has media, check if the face is out of the view frustum. @@ -2526,9 +2534,6 @@ bool LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius) else { mImportanceToCamera = LLFace::calcImportanceToCamera(cos_angle_to_view_dir, dist) ; - // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer - mInFrustum = bool(mImportanceToCamera); // If the face is important to the camera, it is in the frustum - // [FIRE-35081] } return true ; @@ -2568,11 +2573,16 @@ F32 LLFace::calcImportanceToCamera(F32 cos_angle_to_view_dir, F32 dist) { LL_PROFILE_ZONE_SCOPED_CATEGORY_FACE; F32 importance = 0.f ; + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + // Move camera out to use for the inital check for the distance to the face importance with the multiplier + LLViewerCamera* camera = LLViewerCamera::getInstance(); - if(cos_angle_to_view_dir > LLViewerCamera::getInstance()->getCosHalfFov() && - dist < FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[FACE_IMPORTANCE_LEVEL - 1][0]) + if(cos_angle_to_view_dir > LLViewerCamera::getInstance()->getCosHalfFov() && + //dist < FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[FACE_IMPORTANCE_LEVEL - 1][0]) + dist < FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[FACE_IMPORTANCE_LEVEL - 1][0] * camera->getDrawDistanceMultiplier()) { - LLViewerCamera* camera = LLViewerCamera::getInstance(); + //LLViewerCamera* camera = LLViewerCamera::getInstance(); + // [FIRE-35081] F32 camera_moving_speed = camera->getAverageSpeed() ; F32 camera_angular_speed = camera->getAverageAngularSpeed(); diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 6afa641790..d0e7e7c071 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -3113,6 +3113,7 @@ LLViewerMediaTexture* LLViewerMediaImpl::updateMediaImage() int discard_level = 0; media_tex->createGLTexture(discard_level, raw); + //media_tex->setBoostLevel(LLViewerTexture::BOOST_HIGH); // MEDIAOPT: set this dynamically on play/stop // FIXME diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 1951df6a9c..e4890a4bd2 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -762,6 +762,12 @@ void LLViewerTexture::setBoostLevel(S32 level) mBoostLevel = level; if(mBoostLevel != LLViewerTexture::BOOST_NONE && mBoostLevel != LLViewerTexture::BOOST_SELECTED && + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + // Added the new boost levels + mBoostLevel != LLViewerTexture::BOOST_GRASS && + mBoostLevel != LLViewerTexture::BOOST_LIGHT && + mBoostLevel != LLViewerTexture::BOOST_TREE && + // [FIRE-35081] mBoostLevel != LLViewerTexture::BOOST_ICON && mBoostLevel != LLViewerTexture::BOOST_THUMBNAIL) { @@ -773,6 +779,13 @@ void LLViewerTexture::setBoostLevel(S32 level) if (mBoostLevel >= LLViewerTexture::BOOST_HIGH) { mMaxVirtualSize = 2048.f * 2048.f; + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + // Add additional for the important to camera and in frustum + static LLCachedControl texture_camera_boost(gSavedSettings, "TextureCameraBoost", 7.f); + mMaxVirtualSize = mMaxVirtualSize + (mMaxVirtualSize * 1.0f * texture_camera_boost); + // Apply second boost based upon if the texture is close to the camera (< 16.1 meters * draw distance multiplier) + mMaxVirtualSize = mMaxVirtualSize + (mMaxVirtualSize * 1.0f * texture_camera_boost); + // [FIRE-35081] } } @@ -1179,7 +1192,7 @@ void LLViewerFetchedTexture::init(bool firstinit) mLastCallBackActiveTime = 0.f; mForceCallbackFetch = false; // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer - mCloseToCamera = 0.0f; // Store if the camera is close to the camera (0.0f or 1.0f) + mCloseToCamera = 1.0f; // Store if the camera is close to the camera (0.0f or 1.0f) // [FIRE-35081] mFTType = FTT_UNKNOWN; @@ -3062,6 +3075,17 @@ void LLViewerLODTexture::processTextureStats() mDesiredDiscardLevel = llmin(mMinDesiredDiscardLevel, (S8)(MAX_DISCARD_LEVEL)); // [FIRE-35081] mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S32)mLoadedCallbackDesiredDiscardLevel); + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + // Add scale down here as the textures off screen were not getting scaled down properly + S32 current_discard = getDiscardLevel(); + if (mBoostLevel < LLGLTexture::BOOST_AVATAR_BAKED) + { + if (current_discard < mDesiredDiscardLevel && !mForceToSaveRawImage) + { // should scale down + scaleDown(); + } + } + // [FIRE-35081] } else if (!mFullWidth || !mFullHeight) { @@ -3415,11 +3439,23 @@ void LLViewerMediaTexture::initVirtualSize() { return; } - + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + // Add camera importance to the media textures as well + static LLCachedControl texture_camera_boost(gSavedSettings, "TextureCameraBoost", 7.f); + F32 vsize = 0.0f; + // [FIRE-35081] findFaces(); for(std::list< LLFace* >::iterator iter = mMediaFaceList.begin(); iter!= mMediaFaceList.end(); ++iter) { - addTextureStats((*iter)->getVirtualSize()); + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + //addTextureStats((*iter)->getVirtualSize()); + // Add camera importance to the media textures as well + vsize = (*iter)->getVirtualSize(); + vsize = vsize + (vsize * (*iter)->getImportanceToCamera() * texture_camera_boost); + // Apply second boost based upon if the texture is close to the camera (< 16.1 meters * draw distance multiplier) + vsize = vsize + (vsize * (*iter)->getCloseToCamera() * texture_camera_boost); + addTextureStats(vsize); + // [FIRE-35081] } } @@ -3479,6 +3515,10 @@ void LLViewerMediaTexture::addFace(U32 ch, LLFace* facep) } // [/SL:KB] + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + // Try to set the boost level to MEDIA to try to force the media to high quality + tex->setBoostLevel(LLViewerTexture::MEDIA); + // [FIRE-35081] mTextureList.push_back(tex);//increase the reference number by one for tex to avoid deleting it. return; } @@ -3720,7 +3760,10 @@ F32 LLViewerMediaTexture::getMaxVirtualSize() { addTextureStats(0.f, false);//reset } - + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + static LLCachedControl texture_camera_boost(gSavedSettings, "TextureCameraBoost", 7.f); + F32 vsize = 0.0f; + // [FIRE-35081] if(mIsPlaying) //media is playing { for (U32 ch = 0; ch < LLRender::NUM_TEXTURE_CHANNELS; ++ch) @@ -3730,8 +3773,16 @@ F32 LLViewerMediaTexture::getMaxVirtualSize() { LLFace* facep = mFaceList[ch][i]; if(facep->getDrawable()->isRecentlyVisible()) - { - addTextureStats(facep->getVirtualSize()); + { + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + //addTextureStats(facep->getVirtualSize()); + // Add the importance to camera and close to camera to the media texture + vsize = facep->getVirtualSize(); + vsize = vsize + (vsize * facep->getImportanceToCamera() * texture_camera_boost); + // Apply second boost based upon if the texture is close to the camera (< 16.1 meters * draw distance multiplier) + vsize = vsize + (vsize * facep->getCloseToCamera() * texture_camera_boost); + addTextureStats(vsize); + // [FIRE-35081] } } } @@ -3747,7 +3798,15 @@ F32 LLViewerMediaTexture::getMaxVirtualSize() LLFace* facep = *iter; if(facep->getDrawable()->isRecentlyVisible()) { - addTextureStats(facep->getVirtualSize()); + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + //addTextureStats(facep->getVirtualSize()); + // Add the importance to camera and close to camera to the media texture + vsize = facep->getVirtualSize(); + vsize = vsize + (vsize * facep->getImportanceToCamera() * texture_camera_boost); + // Apply second boost based upon if the texture is close to the camera (< 16.1 meters * draw distance multiplier) + vsize = vsize + (vsize * facep->getCloseToCamera() * texture_camera_boost); + addTextureStats(vsize); + // [FIRE-35081] } } } diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 2bd3f3738f..6903e1ec6a 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -396,6 +396,19 @@ void LLViewerTextureList::dump() for (image_list_t::iterator it = mImageList.begin(); it != mImageList.end(); ++it) { LLViewerFetchedTexture* image = *it; + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + std::string face_counts = ""; + std::string volume_counts = ""; + for (S32 index = 0; index < LLRender::NUM_TEXTURE_CHANNELS; index++) + { + face_counts += std::to_string(image->getNumFaces(index)) + " "; + } + + for (S32 index = 0; index < LLRender::NUM_VOLUME_TEXTURE_CHANNELS; index++) + { + volume_counts += std::to_string(image->getNumVolumes(index)) + " "; + } + // [FIRE-35081] LL_INFOS() << "priority " << image->getMaxVirtualSize() << " boost " << image->getBoostLevel() @@ -405,7 +418,10 @@ void LLViewerTextureList::dump() // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer << " close to camera " << (image->getCloseToCamera() > 0.0f ? "Y" : "N") // Display the close to camera flag << " FFType " << fttype_to_string(image->getFTType()) // Display the FFType of the camera - << " Type " << (S32)image->getType() // Display the type of the image (LOCAL_TEXTURE = 0, MEDIA_TEXTURE = 1, DYNAMIC_TEXTURE = 2, FETCHED_TEXTURE = 3,LOD_TEXTURE = 4) + << " Type " << (S32)image->getType() // Display the type of the image (LOCAL_TEXTURE = 0, MEDIA_TEXTURE = 1, DYNAMIC_TEXTURE = 2, FETCHED_TEXTURE = 3,LOD_TEXTURE = 4) + << " Sculpted " << (image->forSculpt() ? "Y" : "N") + << " # of Faces " << face_counts + << " # of Volumes " << volume_counts // [FIRE-35081] << " http://asset.siva.lindenlab.com/" << image->getID() << ".texture" << LL_ENDL; @@ -1024,6 +1040,8 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag important_to_camera = face->mImportanceToCamera; // Store so we don't have to do 2 indirects later on // If the face/texture is animated, then set the boost level to high, so that it will ways be the best quality animated += S64(face->mTextureMatrix); + animated += S64(face->hasMedia()); // Add has media for both local and parcel media + animated += S64(imagep->hasParcelMedia()); // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer (It is) /* @@ -1070,7 +1088,7 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag vsize = vsize + (vsize * face->mCloseToCamera * texture_camera_boost); // Update the max on screen vsize based upon the on screen vsize close_to_camera += face->mCloseToCamera; - LL_DEBUGS() << "" << imagep->getID() << " " << imagep->getNumFaces(i) << " OS Vsize: " << vsize << " Vsize: " << (vsize * bias) << " CTC: " << face->mCloseToCamera << LL_ENDL; + LL_DEBUGS() << face->getViewerObject()->getID() << " TID " << imagep->getID() << " #F " << imagep->getNumFaces(i) << " OS Vsize: " << vsize << " Vsize: " << (vsize * bias) << " CTC: " << face->mCloseToCamera << " Channel " << i << " Face Index " << fi << LL_ENDL; max_on_screen_vsize = llmax(max_on_screen_vsize, vsize); max_vsize = llmax(max_vsize, vsize * bias); // [FIRE-35081] @@ -1121,7 +1139,7 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag imagep->addTextureStats(max_on_screen_vsize); } // If the boost level just became high, or the texture is (Local, Media Dynamic) - else if (imagep->getBoostLevel() == LLViewerTexture::BOOST_HIGH || imagep->getType() < LLViewerTexture::FETCHED_TEXTURE || close_to_camera) + else if (imagep->getBoostLevel() >= LLViewerTexture::BOOST_HIGH || imagep->getType() < LLViewerTexture::FETCHED_TEXTURE || close_to_camera) { // Always use the best quality of the texture imagep->addTextureStats(max_on_screen_vsize); @@ -1131,15 +1149,6 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag { imagep->addTextureStats(max_vsize); } - U32 max_tex_res = LLGLTexture::MAX_IMAGE_SIZE_DEFAULT; - if (imagep->getBoostLevel() < LLGLTexture::BOOST_HIGH) - { - // restrict texture resolution to download based on RenderMaxTextureResolution - static LLCachedControl 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, LLGLTexture::MAX_IMAGE_SIZE_DEFAULT); - imagep->mMaxVirtualSize = llmin(imagep->mMaxVirtualSize, (F32)(max_tex_res * max_tex_res)); - } // [FIRE-35081] } @@ -1241,7 +1250,11 @@ F32 LLViewerTextureList::updateImagesCreateTextures(F32 max_time) mCreateTextureList.pop(); if (imagep->hasGLTexture() && imagep->getDiscardLevel() < imagep->getDesiredDiscardLevel() && - (imagep->getDesiredDiscardLevel() <= MAX_DISCARD_LEVEL)) + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + //(imagep->getDesiredDiscardLevel() <= MAX_DISCARD_LEVEL)) + // Add additional restrictions on scaling down (only BOOST_NONE LOD Textures (Also skip media) + (imagep->getDesiredDiscardLevel() <= MAX_DISCARD_LEVEL) && imagep->getBoostLevel() == LLViewerTexture::BOOST_NONE && imagep->getType() == LLViewerTexture::LOD_TEXTURE && !imagep->hasParcelMedia() && !imagep->isViewerMediaTexture()) + // [FIRE-35081] { // NOTE: this may happen if the desired discard reduces while a decode is in progress and does not // necessarily indicate a problem, but if log occurrences excede that of dsiplay_stats: FPS, diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 35d116589f..a5ccda085c 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -10742,7 +10742,11 @@ void LLVOAvatar::applyParsedAppearanceMessage(LLAppearanceMessageContents& conte //LL_DEBUGS("Avatar") << avString() << " baked_index " << (S32) baked_index << " using mLastTextureID " << mBakedTextureDatas[baked_index].mLastTextureID << LL_ENDL; LL_DEBUGS("Avatar") << avString() << "sb " << (S32) isUsingServerBakes() << " baked_index " << (S32) baked_index << " using mLastTextureID " << mBakedTextureDatas[baked_index].mLastTextureID << LL_ENDL; setTEImage(mBakedTextureDatas[baked_index].mTextureIndex, - LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[baked_index].mLastTextureID, FTT_DEFAULT, true, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)); + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + //LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[baked_index].mLastTextureID, FTT_DEFAULT, true, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)); + //Texture will use baked textures, so it should also use that for the boost. + LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[baked_index].mLastTextureID, FTT_DEFAULT, true, LLGLTexture::BOOST_AVATAR_BAKED, LLViewerTexture::LOD_TEXTURE)); + // [FIRE-35081] } else { diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp index db37563e14..ccdc38a332 100644 --- a/indra/newview/llvograss.cpp +++ b/indra/newview/llvograss.cpp @@ -99,7 +99,11 @@ void LLVOGrass::updateSpecies() SpeciesMap::const_iterator it = sSpeciesTable.begin(); mSpecies = (*it).first; } - setTEImage(0, LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, FTT_DEFAULT, true, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)); + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + //setTEImage(0, LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, FTT_DEFAULT, true, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)); + // Added new boost Grass as it forces a fixed size on updates + setTEImage(0, LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, FTT_DEFAULT, true, LLGLTexture::BOOST_GRASS, LLViewerTexture::LOD_TEXTURE)); + // [FIRE-35081] } diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index 199d5dc3f6..954faa5572 100644 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -330,7 +330,11 @@ U32 LLVOTree::processUpdateMessage(LLMessageSystem *mesgsys, // Load Species-Specific data // static const S32 MAX_TREE_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL = 32 ; //frames. - mTreeImagep = LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, FTT_DEFAULT, true, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + //mTreeImagep = LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, FTT_DEFAULT, true, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); + // Set boost level for Tree as it overrides the normal texture sizes + mTreeImagep = LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, FTT_DEFAULT, true, LLGLTexture::BOOST_TREE, LLViewerTexture::LOD_TEXTURE); + // [FIRE-35081] mTreeImagep->setMaxVirtualSizeResetInterval(MAX_TREE_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL); //allow to wait for at most 16 frames to reset virtual size. mBranchLength = sSpeciesTable[mSpecies]->mBranchLength; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index a89f011115..a6f4deb688 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -926,6 +926,10 @@ void LLVOVolume::updateTextureVirtualSize(bool forced) F32 min_vsize=999999999.f, max_vsize=0.f; LLViewerCamera* camera = LLViewerCamera::getInstance(); std::stringstream debug_text; + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + // Use this flag to indicate that there was a legit change to 0.0 for the mPixelArea (All faces off screen) + bool changed = false; + // [FIRE-35081] for (S32 i = 0; i < num_faces; i++) { LLFace* face = mDrawable->getFace(i); @@ -974,6 +978,13 @@ void LLVOVolume::updateTextureVirtualSize(bool forced) mPixelArea = llmax(mPixelArea, face->getPixelArea()); + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + // If the new area is changed from the old area, then accept it. + if (mPixelArea != old_area) + { + changed = true; + } + // [FIRE-35081] // if the face has gotten small enough to turn off texture animation and texture // animation is running, rebuild the render batch for this face to turn off // texture animation @@ -1062,7 +1073,10 @@ void LLVOVolume::updateTextureVirtualSize(bool forced) { LLLightImageParams* params = (LLLightImageParams*) getParameterEntry(LLNetworkData::PARAMS_LIGHT_IMAGE); LLUUID id = params->getLightTexture(); - mLightTexture = LLViewerTextureManager::getFetchedTexture(id, FTT_DEFAULT, true, LLGLTexture::BOOST_NONE); + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + // Light textures should be treaded not the same as normal LOD textures + mLightTexture = LLViewerTextureManager::getFetchedTexture(id, FTT_DEFAULT, true, LLGLTexture::BOOST_LIGHT); + // [FIRE-35081] if (mLightTexture.notNull()) { F32 rad = getLightRadius(); @@ -1112,7 +1126,11 @@ void LLVOVolume::updateTextureVirtualSize(bool forced) setDebugText(output); } - if (mPixelArea == 0) + // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer + //if (mPixelArea == 0) + // If there is a legit change to 0.0, don't dismiss it. + if (mPixelArea == 0 && !changed) + // [FIRE-35081] { //flexi phasing issues make this happen mPixelArea = old_area; } diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index f01e813a3f..6422ceb8ae 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -2275,7 +2275,6 @@ F32 LLPipeline::calcPixelArea(LLVector3 center, LLVector3 size, LLCamera &camera //ramp down distance for nearby objects //shrink dist by dist/16. - // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer /* if (dist < 16.f) { @@ -2283,15 +2282,6 @@ F32 LLPipeline::calcPixelArea(LLVector3 center, LLVector3 size, LLCamera &camera dist *= dist; dist *= 16.f; } - */ - // Applied the camera draw distance multiplier to the distance similar to the textures - if (dist < 16.f * camera.getDrawDistanceMultiplier()) - { - dist /= 16.f * camera.getDrawDistanceMultiplier(); - dist *= dist; - dist *= 16.f * camera.getDrawDistanceMultiplier(); - } - // [FIRE-35081] //get area of circle around node F32 app_angle = atanf(size.length()/dist); @@ -2311,23 +2301,12 @@ F32 LLPipeline::calcPixelArea(const LLVector4a& center, const LLVector4a& size, //ramp down distance for nearby objects //shrink dist by dist/16. - // [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer - /* if (dist < 16.f) { dist /= 16.f; dist *= dist; dist *= 16.f; } - */ - // Applied the camera draw distance multiplier to the distance similar to the textures - if (dist < 16.f * camera.getDrawDistanceMultiplier()) - { - dist /= 16.f * camera.getDrawDistanceMultiplier(); - dist *= dist; - dist *= 16.f * camera.getDrawDistanceMultiplier(); - } - // [FIRE-35081] //get area of circle around node F32 app_angle = atanf(size.getLength3().getF32() / dist);