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.master
parent
0a4601b764
commit
c082f0cd76
|
|
@ -104,6 +104,12 @@ void LLGLTexture::setBoostLevel(S32 level)
|
|||
if(mBoostLevel != LLGLTexture::BOOST_NONE
|
||||
&& mBoostLevel != LLGLTexture::BOOST_ICON
|
||||
&& mBoostLevel != LLGLTexture::BOOST_THUMBNAIL
|
||||
// <FS:minerjr> [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
|
||||
// <FS:minerjr> [FIRE-35081]
|
||||
&& mBoostLevel != LLGLTexture::BOOST_TERRAIN)
|
||||
{
|
||||
setNoDelete() ;
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
// <FS:minerjr> [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.
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
BOOST_HIGH = 10,
|
||||
BOOST_SCULPTED ,
|
||||
BOOST_BUMP ,
|
||||
|
|
|
|||
|
|
@ -5955,8 +5955,8 @@ void LLAppViewer::idle()
|
|||
// <FS:minerjr> [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);
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -179,9 +179,9 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp)
|
|||
|
||||
mFaceColor = LLColor4(1,0,0,1);
|
||||
|
||||
mImportanceToCamera = 0.f ;
|
||||
mImportanceToCamera = 1.f ;
|
||||
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer
|
||||
mCloseToCamera = 0.0f;
|
||||
mCloseToCamera = 1.0f;
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
mBoundingSphereRadius = 0.0f ;
|
||||
|
||||
|
|
@ -386,6 +386,11 @@ void LLFace::switchTexture(U32 ch, LLViewerTexture* new_texture)
|
|||
return;
|
||||
}
|
||||
|
||||
// <FS:minerjr> [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());
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
if (ch == LLRender::DIFFUSE_MAP)
|
||||
{
|
||||
if (getViewerObject())
|
||||
|
|
@ -2332,6 +2337,10 @@ F32 LLFace::getTextureVirtualSize()
|
|||
}
|
||||
|
||||
face_area = LLFace::adjustPixelArea(mImportanceToCamera, face_area);
|
||||
// <FS:minerjr> [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 );
|
||||
}
|
||||
}
|
||||
|
||||
// <FS:minerjr> [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();
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
*/
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
setVirtualSize(face_area) ;
|
||||
|
||||
return face_area;
|
||||
|
|
@ -2483,7 +2488,10 @@ bool LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius)
|
|||
// <FS:minerjr> [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);
|
||||
// </FS:minerjr> [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) ;
|
||||
// <FS:minerjr> [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
|
||||
// </FS:minerjr> [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 ;
|
||||
// <FS:minerjr> [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();
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
F32 camera_moving_speed = camera->getAverageSpeed() ;
|
||||
F32 camera_angular_speed = camera->getAverageAngularSpeed();
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -762,6 +762,12 @@ void LLViewerTexture::setBoostLevel(S32 level)
|
|||
mBoostLevel = level;
|
||||
if(mBoostLevel != LLViewerTexture::BOOST_NONE &&
|
||||
mBoostLevel != LLViewerTexture::BOOST_SELECTED &&
|
||||
// <FS:minerjr> [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 &&
|
||||
// </FS:minerjr> [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;
|
||||
// <FS:minerjr> [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<F32> 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);
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1179,7 +1192,7 @@ void LLViewerFetchedTexture::init(bool firstinit)
|
|||
mLastCallBackActiveTime = 0.f;
|
||||
mForceCallbackFetch = false;
|
||||
// <FS:minerjr> [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)
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
|
||||
mFTType = FTT_UNKNOWN;
|
||||
|
|
@ -3062,6 +3075,17 @@ void LLViewerLODTexture::processTextureStats()
|
|||
mDesiredDiscardLevel = llmin(mMinDesiredDiscardLevel, (S8)(MAX_DISCARD_LEVEL));
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S32)mLoadedCallbackDesiredDiscardLevel);
|
||||
// <FS:minerjr> [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();
|
||||
}
|
||||
}
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
}
|
||||
else if (!mFullWidth || !mFullHeight)
|
||||
{
|
||||
|
|
@ -3415,11 +3439,23 @@ void LLViewerMediaTexture::initVirtualSize()
|
|||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// <FS:minerjr> [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<F32> texture_camera_boost(gSavedSettings, "TextureCameraBoost", 7.f);
|
||||
F32 vsize = 0.0f;
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
findFaces();
|
||||
for(std::list< LLFace* >::iterator iter = mMediaFaceList.begin(); iter!= mMediaFaceList.end(); ++iter)
|
||||
{
|
||||
addTextureStats((*iter)->getVirtualSize());
|
||||
// <FS:minerjr> [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);
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3479,6 +3515,10 @@ void LLViewerMediaTexture::addFace(U32 ch, LLFace* facep)
|
|||
}
|
||||
// [/SL:KB]
|
||||
|
||||
// <FS:minerjr> [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);
|
||||
// </FS:minerjr> [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
|
||||
}
|
||||
|
||||
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer
|
||||
static LLCachedControl<F32> texture_camera_boost(gSavedSettings, "TextureCameraBoost", 7.f);
|
||||
F32 vsize = 0.0f;
|
||||
// </FS:minerjr> [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());
|
||||
{
|
||||
// <FS:minerjr> [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);
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3747,7 +3798,15 @@ F32 LLViewerMediaTexture::getMaxVirtualSize()
|
|||
LLFace* facep = *iter;
|
||||
if(facep->getDrawable()->isRecentlyVisible())
|
||||
{
|
||||
addTextureStats(facep->getVirtualSize());
|
||||
// <FS:minerjr> [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);
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -396,6 +396,19 @@ void LLViewerTextureList::dump()
|
|||
for (image_list_t::iterator it = mImageList.begin(); it != mImageList.end(); ++it)
|
||||
{
|
||||
LLViewerFetchedTexture* image = *it;
|
||||
// <FS:minerjr> [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)) + " ";
|
||||
}
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
|
||||
LL_INFOS() << "priority " << image->getMaxVirtualSize()
|
||||
<< " boost " << image->getBoostLevel()
|
||||
|
|
@ -405,7 +418,10 @@ void LLViewerTextureList::dump()
|
|||
// <FS:minerjr> [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
|
||||
// </FS:minerjr> [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());
|
||||
|
||||
// <FS:minerjr> [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);
|
||||
// </FS:minerjr> [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<U32> 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));
|
||||
}
|
||||
// </FS:minerjr> [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))
|
||||
// <FS:minerjr> [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())
|
||||
// </FS:minerjr> [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,
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
// <FS:minerjr> [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));
|
||||
// <FS:minerjr> [FIRE-35081]
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
// <FS:minerjr> [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));
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
// <FS:minerjr> [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);
|
||||
// </FS:minerjr> [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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
// <FS:minerjr> [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;
|
||||
// </FS:minerjr> [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());
|
||||
|
||||
// <FS:minerjr> [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;
|
||||
}
|
||||
// </FS:minerjr> [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);
|
||||
// <FS:minerjr> [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);
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
if (mLightTexture.notNull())
|
||||
{
|
||||
F32 rad = getLightRadius();
|
||||
|
|
@ -1112,7 +1126,11 @@ void LLVOVolume::updateTextureVirtualSize(bool forced)
|
|||
setDebugText(output);
|
||||
}
|
||||
|
||||
if (mPixelArea == 0)
|
||||
// <FS:minerjr> [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)
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
{ //flexi phasing issues make this happen
|
||||
mPixelArea = old_area;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2275,7 +2275,6 @@ F32 LLPipeline::calcPixelArea(LLVector3 center, LLVector3 size, LLCamera &camera
|
|||
|
||||
//ramp down distance for nearby objects
|
||||
//shrink dist by dist/16.
|
||||
// <FS:minerjr> [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();
|
||||
}
|
||||
// </FS:minerjr> [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.
|
||||
// <FS:minerjr> [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();
|
||||
}
|
||||
// </FS:minerjr> [FIRE-35081]
|
||||
|
||||
//get area of circle around node
|
||||
F32 app_angle = atanf(size.getLength3().getF32() / dist);
|
||||
|
|
|
|||
Loading…
Reference in New Issue