Ansariel 2025-09-30 17:27:19 +02:00
commit a41bf0f717
67 changed files with 266 additions and 904 deletions

View File

@ -35,10 +35,6 @@ LLCamera::LLCamera() :
LLCoordFrame(),
mView(DEFAULT_FIELD_OF_VIEW),
mAspect(DEFAULT_ASPECT_RATIO),
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
//mInverseAspect(1.0f / DEFAULT_ASPECT_RATIO),
mDrawDistanceMultiplier(1.0f),
// </FS:minerjr> [FIRE-35081]
mViewHeightInPixels( -1 ), // invalid height
mNearPlane(DEFAULT_NEAR_PLANE),
mFarPlane(DEFAULT_FAR_PLANE),
@ -67,18 +63,10 @@ LLCamera::LLCamera(F32 vertical_fov_rads, F32 aspect_ratio, S32 view_height_in_p
}
mAspect = llclamp(aspect_ratio, MIN_ASPECT_RATIO, MAX_ASPECT_RATIO);
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// Store the inverse of the aspect ratio, so we can remove it from texture calculations
//mInverseAspect = 1.0f / mAspect;
// </FS:minerjr> [FIRE-35081]
mNearPlane = llclamp(near_plane, MIN_NEAR_PLANE, MAX_NEAR_PLANE);
if(far_plane < 0) far_plane = DEFAULT_FAR_PLANE;
mFarPlane = llclamp(far_plane, MIN_FAR_PLANE, MAX_FAR_PLANE);
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// Store the draw distance multiplier based upon how much bigger/smaller the far plan is then the default (64.0f)
mDrawDistanceMultiplier = mFarPlane / DEFAULT_FAR_PLANE;
mDrawDistanceMultiplier = mDrawDistanceMultiplier < 1.0f ? 1.0f : mDrawDistanceMultiplier;
// </FS:minerjr> [FIRE-35081]
setView(vertical_fov_rads);
}
@ -141,10 +129,6 @@ void LLCamera::setViewHeightInPixels(S32 height)
void LLCamera::setAspect(F32 aspect_ratio)
{
mAspect = llclamp(aspect_ratio, MIN_ASPECT_RATIO, MAX_ASPECT_RATIO);
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// Store the inverse of the aspect ratio, so we can remove it from texture calculations
//mInverseAspect = 1.0f / mAspect;
// </FS:minerjr> [FIRE-35081]
calculateFrustumPlanes();
}
@ -159,11 +143,6 @@ void LLCamera::setNear(F32 near_plane)
void LLCamera::setFar(F32 far_plane)
{
mFarPlane = llclamp(far_plane, MIN_FAR_PLANE, MAX_FAR_PLANE);
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// Store the draw distance multiplier based upon how much bigger/smaller the far plan is then the default (64.0f)
mDrawDistanceMultiplier = mFarPlane / DEFAULT_FAR_PLANE;
mDrawDistanceMultiplier = mDrawDistanceMultiplier < 1.0f ? 1.0f : mDrawDistanceMultiplier;
// </FS:minerjr> [FIRE-35081]
calculateFrustumPlanes();
}

View File

@ -127,11 +127,6 @@ private:
F32 mView; // angle between top and bottom frustum planes in radians.
F32 mAspect; // width/height
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// Store the inverse of the aspect ratio, for the texture's sizes
//F32 mInverseAspect; // height/width
F32 mDrawDistanceMultiplier; // mFarPlane / DEFAULT_FAR_PLANE
// </FS:minerjr> [FIRE-35081]
S32 mViewHeightInPixels; // for ViewHeightInPixels() only
F32 mNearPlane;
F32 mFarPlane;
@ -166,10 +161,6 @@ public:
F32 getView() const { return mView; } // vertical FOV in radians
S32 getViewHeightInPixels() const { return mViewHeightInPixels; }
F32 getAspect() const { return mAspect; } // width / height
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
//F32 getInverseAspect() const { return mInverseAspect; } // width / height
F32 getDrawDistanceMultiplier() const { return mDrawDistanceMultiplier; } // mFarPlane / DEFAULT_FAR_PLANE (could also include near plane as well)
// </FS:minerjr> [FIRE-35081]
F32 getNear() const { return mNearPlane; } // meters
F32 getFar() const { return mFarPlane; } // meters

View File

@ -63,10 +63,6 @@ LLGLTexture::~LLGLTexture()
void LLGLTexture::init()
{
mBoostLevel = LLGLTexture::BOOST_NONE;
// <FS:minerjr>
// Added a previous boost level to allow for restorign boost after BOOST_SELECTED is applied
mPrevBoostLevel = LLGLTexture::BOOST_NONE;
// </FS:minerjr>
mFullWidth = 0;
mFullHeight = 0;
@ -104,12 +100,6 @@ 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
// 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() ;
@ -117,18 +107,6 @@ void LLGLTexture::setBoostLevel(S32 level)
}
}
// <FS:minerjr>
// Changes the current boost level to the previous value
void LLGLTexture::restoreBoostLevel()
{
mBoostLevel = mPrevBoostLevel;
}
// Stores the current boost level in a the previous boost.
void LLGLTexture::storeBoostLevel()
{
mPrevBoostLevel = mBoostLevel;
}
// </FS:minerjr>
void LLGLTexture::forceActive()
{
mTextureState = ACTIVE ;

View File

@ -53,11 +53,6 @@ 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
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 ,
@ -106,10 +101,6 @@ public:
void setBoostLevel(S32 level);
S32 getBoostLevel() { return mBoostLevel; }
// <FS:minerjr>
void restoreBoostLevel(); // Now restores the mBoostLevel with the mPrevBoostLevel
void storeBoostLevel(); // Stores the current mBoostLevel in mPrevBoostLevel
// </FS:minerjr>
S32 getFullWidth() const { return mFullWidth; }
S32 getFullHeight() const { return mFullHeight; }
@ -192,10 +183,6 @@ public:
protected:
S32 mBoostLevel; // enum describing priority level
// <FS:minerjr>
// Added previous value to allow for restoring of BOOST_SELECTED overriding current state
S32 mPrevBoostLevel; // enum describing priority level (Previous Value for BOOST_SELECTION restore)
// </FS:minerjr>
U32 mFullWidth;
U32 mFullHeight;
bool mUseMipMaps;

View File

@ -642,11 +642,6 @@ bool LLImageGL::setSize(S32 width, S32 height, S32 ncomponents, S32 discard_leve
if(discard_level > 0)
{
mMaxDiscardLevel = llmax(mMaxDiscardLevel, (S8)discard_level);
// <FS:minerjr> [FIRE-35361] RenderMaxTextureResolution caps texture resolution lower than intended
// 2K textures could set the mMaxDiscardLevel above MAX_DISCARD_LEVEL, which would
// cause them to not be down-scaled so they would get stuck at 0 discard all the time.
mMaxDiscardLevel = llmax(mMaxDiscardLevel, (S8)MAX_DISCARD_LEVEL);
// </FS:minerjr> [FIRE-35361]
}
}
else

View File

@ -565,13 +565,8 @@ void LLConsole::Paragraph::updateLines(F32 screen_width, const LLFontGL* font, L
{
if ( !force_resize )
{
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// if ( mMaxWidth >= 0.0f
//&& 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
if ( ((mMaxWidth >= 0.0f) && (mMaxWidth < screen_width)) || (screen_width <= 30) )
// </FS:minerjr> [FIRE-35081]
if ( mMaxWidth >= 0.0f
&& mMaxWidth < screen_width)
{
return; //No resize required.
}

View File

@ -611,6 +611,27 @@ LLInventoryItem* LLAgentWearables::getWearableInventoryItem(LLWearableType::ETyp
return item;
}
const S32 LLAgentWearables::getWearableIdxFromItem(const LLViewerInventoryItem* item) const
{
if (!item) return -1;
if (!item->isWearableType()) return -1;
LLWearableType::EType type = item->getWearableType();
U32 wearable_count = getWearableCount(type);
if (0 == wearable_count) return -1;
const LLUUID& asset_id = item->getAssetUUID();
for (U32 i = 0; i < wearable_count; ++i)
{
const LLViewerWearable* wearable = getViewerWearable(type, i);
if (!wearable) continue;
if (wearable->getAssetID() != asset_id) continue;
return i;
}
return -1;
}
const LLViewerWearable* LLAgentWearables::getWearableFromItemID(const LLUUID& item_id) const
{
const LLUUID& base_item_id = gInventory.getLinkedItemID(item_id);
@ -1650,7 +1671,7 @@ bool LLAgentWearables::moveWearable(const LLViewerInventoryItem* item, bool clos
LLWearableType::EType type = item->getWearableType();
U32 wearable_count = getWearableCount(type);
if (0 == wearable_count) return false;
if (wearable_count < 2) return false;
const LLUUID& asset_id = item->getAssetUUID();

View File

@ -110,6 +110,7 @@ public:
// [/RLVa:KB]
const LLUUID getWearableItemID(LLWearableType::EType type, U32 index /*= 0*/) const;
const LLUUID getWearableAssetID(LLWearableType::EType type, U32 index /*= 0*/) const;
const S32 getWearableIdxFromItem(const LLViewerInventoryItem* item) const;
const LLViewerWearable* getWearableFromItemID(const LLUUID& item_id) const;
LLViewerWearable* getWearableFromItemID(const LLUUID& item_id);
LLViewerWearable* getWearableFromAssetID(const LLUUID& asset_id);

View File

@ -4786,37 +4786,54 @@ bool LLAppearanceMgr::moveWearable(LLViewerInventoryItem* item, bool closer_to_b
if (item->getType() != LLAssetType::AT_CLOTHING) return false;
if (!gInventory.isObjectDescendentOf(item->getUUID(), getCOF())) return false;
S32 pos = gAgentWearables.getWearableIdxFromItem(item);
if (pos < 0) return false; // Not found
U32 count = gAgentWearables.getWearableCount(item->getWearableType());
if (count < 2) return false; // Nothing to swap with
if (closer_to_body)
{
if (pos == 0) return false; // already first
}
else
{
if (pos == count - 1) return false; // already last
}
U32 old_pos = (U32)pos;
U32 swap_with = closer_to_body ? old_pos - 1 : old_pos + 1;
LLUUID swap_item_id = gAgentWearables.getWearableItemID(item->getWearableType(), swap_with);
// Find link item from item id.
LLInventoryModel::cat_array_t cats;
LLInventoryModel::item_array_t items;
LLFindWearablesOfType filter_wearables_of_type(item->getWearableType());
gInventory.collectDescendentsIf(getCOF(), cats, items, true, filter_wearables_of_type);
if (items.empty()) return false;
// We assume that the items have valid descriptions.
std::sort(items.begin(), items.end(), WearablesOrderComparator(item->getWearableType()));
LLViewerInventoryItem* swap_item = nullptr;
for (auto iter : items)
{
if (iter->getLinkedUUID() == swap_item_id)
{
swap_item = iter.get();
break;
}
}
if (!swap_item)
{
return false;
}
if (closer_to_body && items.front() == item) return false;
if (!closer_to_body && items.back() == item) return false;
// Description is supposed to hold sort index, but user could have changed
// order rapidly and there might be a state mismatch between description
// and gAgentWearables, trust gAgentWearables over description.
// Generate new description.
std::string new_desc = build_order_string(item->getWearableType(), old_pos);
swap_item->setDescription(new_desc);
new_desc = build_order_string(item->getWearableType(), swap_with);
item->setDescription(new_desc);
LLInventoryModel::item_array_t::iterator it = std::find(items.begin(), items.end(), item);
if (items.end() == it) return false;
//swapping descriptions
closer_to_body ? --it : ++it;
LLViewerInventoryItem* swap_item = *it;
if (!swap_item) return false;
std::string tmp = swap_item->getActualDescription();
swap_item->setDescription(item->getActualDescription());
item->setDescription(tmp);
// LL_DEBUGS("Inventory") << "swap, item "
// << ll_pretty_print_sd(item->asLLSD())
// << " swap_item "
// << ll_pretty_print_sd(swap_item->asLLSD()) << LL_ENDL;
// FIXME switch to use AISv3 where supported.
//items need to be updated on a dataserver
item->setComplete(true);
item->updateServer(false);
gInventory.updateItem(item);

View File

@ -6046,13 +6046,7 @@ void LLAppViewer::idle()
// objects and camera should be in sync, do LOD calculations now
{
LL_RECORD_BLOCK_TIME(FTM_LOD_UPDATE);
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// 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.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]
gObjectList.updateApparentAngles(gAgent);
}
// Update AV render info

View File

@ -75,14 +75,6 @@ static LLStaticHashedString sColorIn("color_in");
bool LLFace::sSafeRenderSelect = true; // false
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// Moved to allow more code to access these values
const S8 FACE_IMPORTANCE_LEVEL = 4 ;
const F32 FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[FACE_IMPORTANCE_LEVEL][2] = //{distance, importance_weight}
{{16.1f, 1.0f}, {32.1f, 0.5f}, {48.1f, 0.2f}, {96.1f, 0.05f} } ;
const F32 FACE_IMPORTANCE_TO_CAMERA_OVER_ANGLE[FACE_IMPORTANCE_LEVEL][2] = //{cos(angle), importance_weight}
{{0.985f /*cos(10 degrees)*/, 1.0f}, {0.94f /*cos(20 degrees)*/, 0.8f}, {0.866f /*cos(30 degrees)*/, 0.64f}, {0.0f, 0.36f}} ;
// </FS:minerjr> [FIRE-35081]
#define DOTVEC(a,b) (a.mV[0]*b.mV[0] + a.mV[1]*b.mV[1] + a.mV[2]*b.mV[2])
@ -179,10 +171,7 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp)
mFaceColor = LLColor4(1,0,0,1);
mImportanceToCamera = 1.f ;
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
mCloseToCamera = 1.0f;
// </FS:minerjr> [FIRE-35081]
mImportanceToCamera = 0.f ;
mBoundingSphereRadius = 0.0f ;
mTexExtents[0].set(0, 0);
@ -1679,10 +1668,7 @@ bool LLFace::getGeometryVolume(const LLVolume& volume,
xforms = XFORM_NONE;
}
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// Removed check for turning off animations
//if (getVirtualSize() >= MIN_TEX_ANIM_SIZE) // || isState(LLFace::RIGGED))
// </FS:minerjr> [FIRE-35081]
if (getVirtualSize() >= MIN_TEX_ANIM_SIZE) // || isState(LLFace::RIGGED))
{ //don't override texture transform during tc bake
tex_mode = 0;
}
@ -2283,16 +2269,10 @@ F32 LLFace::getTextureVirtualSize()
F32 radius;
F32 cos_angle_to_view_dir;
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
//bool in_frustum = calcPixelArea(cos_angle_to_view_dir, radius);
// The mInFrustum value is now updated in calcPixelArea, so no longer need to accss the value
calcPixelArea(cos_angle_to_view_dir, radius);
bool in_frustum = calcPixelArea(cos_angle_to_view_dir, radius);
//if (mPixelArea < F_ALMOST_ZERO || !in_frustum)
// Use the stored value from calcPixelArea
if (mPixelArea < F_ALMOST_ZERO || !mInFrustum)
// </FS:minerjr> [FIRE-35081]
if (mPixelArea < F_ALMOST_ZERO || !in_frustum)
{
setVirtualSize(0.f) ;
return 0.f;
@ -2321,10 +2301,6 @@ F32 LLFace::getTextureVirtualSize()
}
face_area = LLFace::adjustPixelArea(mImportanceToCamera, face_area);
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// 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())
@ -2332,8 +2308,7 @@ F32 LLFace::getTextureVirtualSize()
face_area *= adjustPartialOverlapPixelArea(cos_angle_to_view_dir, radius );
}
}
*/
// </FS:minerjr> [FIRE-35081]
setVirtualSize(face_area) ;
return face_area;
@ -2417,10 +2392,6 @@ bool LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius)
// no rigged extents, zero out bounding box and skip update
mRiggedExtents[0] = mRiggedExtents[1] = LLVector4a(0.f, 0.f, 0.f);
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// Set the face to be out of the frustum as the object is invalid
mInFrustum = false;
// </FS:minerjr> [FIRE-35081]
return false;
}
@ -2467,14 +2438,6 @@ bool LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius)
LLVector4a x_axis;
x_axis.load3(camera->getXAxis().mV);
cos_angle_to_view_dir = lookAt.dot3(x_axis).getF32();
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// 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.
// 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.
if(hasMedia())
@ -2482,10 +2445,6 @@ bool LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius)
if(!camera->AABBInFrustum(center, size))
{
mImportanceToCamera = 0.f ;
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// Added real in frustum check value. Previous was only false for media textures off screen and invalid rig objects
mInFrustum = false;
// </FS:minerjr> [FIRE-35081]
return false ;
}
if(cos_angle_to_view_dir > camera->getCosHalfFov()) //the center is within the view frustum
@ -2508,10 +2467,6 @@ bool LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius)
{
cos_angle_to_view_dir = 1.0f ;
mImportanceToCamera = 1.0f ;
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
mInFrustum = true; // If the face is important to the camera, it is in the frustum
mCloseToCamera = 1.0f;
// </FS:minerjr> [FIRE-35081]
}
else
{
@ -2550,21 +2505,22 @@ F32 LLFace::adjustPartialOverlapPixelArea(F32 cos_angle_to_view_dir, F32 radius
return 1.0f ;
}
const S8 FACE_IMPORTANCE_LEVEL = 4 ;
const F32 FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[FACE_IMPORTANCE_LEVEL][2] = //{distance, importance_weight}
{{16.1f, 1.0f}, {32.1f, 0.5f}, {48.1f, 0.2f}, {96.1f, 0.05f} } ;
const F32 FACE_IMPORTANCE_TO_CAMERA_OVER_ANGLE[FACE_IMPORTANCE_LEVEL][2] = //{cos(angle), importance_weight}
{{0.985f /*cos(10 degrees)*/, 1.0f}, {0.94f /*cos(20 degrees)*/, 0.8f}, {0.866f /*cos(30 degrees)*/, 0.64f}, {0.0f, 0.36f}} ;
//static
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
// 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])
dist < FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[FACE_IMPORTANCE_LEVEL - 1][0] * camera->getDrawDistanceMultiplier())
if(cos_angle_to_view_dir > LLViewerCamera::getInstance()->getCosHalfFov() &&
dist < FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[FACE_IMPORTANCE_LEVEL - 1][0])
{
//LLViewerCamera* camera = LLViewerCamera::getInstance();
// </FS:minerjr> [FIRE-35081]
LLViewerCamera* camera = LLViewerCamera::getInstance();
F32 camera_moving_speed = camera->getAverageSpeed() ;
F32 camera_angular_speed = camera->getAverageAngularSpeed();
@ -2575,10 +2531,7 @@ F32 LLFace::calcImportanceToCamera(F32 cos_angle_to_view_dir, F32 dist)
}
S32 i = 0 ;
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// Added draw distance multiplier to the distance
for(i = 0; i < FACE_IMPORTANCE_LEVEL && dist > FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[i][0] * camera->getDrawDistanceMultiplier(); ++i);
// </FS:minerjr> [FIRE-35081]
for(i = 0; i < FACE_IMPORTANCE_LEVEL && dist > FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[i][0]; ++i);
i = llmin(i, FACE_IMPORTANCE_LEVEL - 1) ;
F32 dist_factor = FACE_IMPORTANCE_TO_CAMERA_OVER_DISTANCE[i][1] ;

View File

@ -52,11 +52,7 @@ class LLDrawInfo;
class LLMeshSkinInfo;
const F32 MIN_ALPHA_SIZE = 1024.f;
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
//const F32 MIN_TEX_ANIM_SIZE = 512.f;
// Change the min size to
const F32 MIN_TEX_ANIM_SIZE = 10.f;
// </FS:minerjr> [FIRE-35081]
const F32 MIN_TEX_ANIM_SIZE = 512.f;
const U8 FACE_DO_NOT_BATCH_TEXTURES = 255;
class alignas(16) LLFace
@ -127,8 +123,6 @@ public:
void setPixelArea(F32 area) { mPixelArea = area; }
F32 getVirtualSize() const { return mVSize; }
F32 getPixelArea() const { return mPixelArea; }
F32 getImportanceToCamera() const { return mImportanceToCamera; }
F32 getCloseToCamera() const { return mCloseToCamera; }
S32 getIndexInTex(U32 ch) const { llassert(ch < LLRender::NUM_TEXTURE_CHANNELS); return mIndexInTex[ch]; }
void setIndexInTex(U32 ch, S32 index) { llassert(ch < LLRender::NUM_TEXTURE_CHANNELS); mIndexInTex[ch] = index; }
@ -335,7 +329,6 @@ private:
//1.0: the most important.
//based on the distance from the face to the view point and the angle from the face center to the view direction.
F32 mImportanceToCamera ;
F32 mCloseToCamera;
F32 mBoundingSphereRadius ;
bool mHasMedia ;
bool mIsMediaAllowed;

View File

@ -2095,30 +2095,6 @@ LLPointer<LLImageRaw> LLTextureCache::readFromFastCache(const LLUUID& id, S32& d
}
LLPointer<LLImageRaw> raw = new LLImageRaw(data, head[0], head[1], head[2], true);
// <FS:minerjr>
// This fixes the invalid discard values from being created which cause the decoder code to fail when trying to handle 6 and 7's which are above the MAX_DISCARD_LEVEL of 5
// especially on load
// We will expand the 16x16 texture to the actual MAX_DISCARD_LEVEL texture size, it may be blurry until the user gets closer but 5 discard value should be objects far from the camera.
// So a 1024x1024 texture with a dicard of 6 will become 32x32 and a 2048x2048 texture with a discard of 7 will become a 64x64 texture.
if (discardlevel > MAX_DISCARD_LEVEL)
{
LL_PROFILE_ZONE_NAMED_CATEGORY_TEXTURE("FixBadDiscardLevel");
S32 w = head[0]; // Get the current width from the header (16)
S32 h = head[1]; // Get the current height from the header (16)
// Expand the width and height by teh difference between the discard and MAX_DISCARD_LEVEL bit shifted to the left. (Expand power of 2 textures)
w <<= discardlevel - MAX_DISCARD_LEVEL;
h <<= discardlevel - MAX_DISCARD_LEVEL;
// Set the discard level to the MAX_DISCARD_LEVEL
discardlevel = MAX_DISCARD_LEVEL;
// Scale up the texture and scale the actual data, as we just created it above, it should be fine.
raw->scale(w, h, true);
}
// </FS:minerjr>
return raw;
}

View File

@ -427,7 +427,9 @@ void LLViewerInventoryItem::updateServer(bool is_new) const
LLNotificationsUtil::add("IncompleteInventoryItem");
return;
}
if(gAgent.getID() != mPermissions.getOwner())
LLUUID owner = mPermissions.getOwner();
if(gAgent.getID() != owner
&& owner.notNull()) // incomplete?
{
// *FIX: deal with this better.
LL_WARNS(LOG_INV) << "LLViewerInventoryItem::updateServer() - for unowned item "

View File

@ -12998,9 +12998,6 @@ void initialize_menus()
// Develop (Fonts debugging)
commit.add("Develop.Fonts.Dump", boost::bind(&LLFontGL::dumpFonts));
commit.add("Develop.Fonts.DumpTextures", boost::bind(&LLFontGL::dumpFontTextures));
//Develop (dump data)
commit.add("Develop.TextureList.Dump", boost::bind(&LLViewerTextureList::dumpTexturelist));
// <FS:Beq/> Add telemetry controls to the viewer Develop menu (Toggle profiling)
view_listener_t::addMenu(new FSProfilerToggle(), "Develop.ToggleProfiling");

View File

@ -4336,14 +4336,6 @@ void LLViewerObject::boostTexturePriority(bool boost_children /* = true */)
S32 tex_count = getNumTEs();
for (i = 0; i < tex_count; i++)
{
// <FS:minerjr>
// This isused to fix the textures becoming blury when object interacted with by the user and unselected.
// If this is changing the boost level for the TEImage for the first time, store the boost level before modifying it.
if (getTEImage(i)->getBoostLevel() != LLGLTexture::BOOST_SELECTED)
{
getTEImage(i)->storeBoostLevel();
}
// </FS:minerjr>
getTEImage(i)->setBoostLevel(LLGLTexture::BOOST_SELECTED);
}
@ -4352,19 +4344,9 @@ void LLViewerObject::boostTexturePriority(bool boost_children /* = true */)
LLSculptParams *sculpt_params = (LLSculptParams *)getParameterEntry(LLNetworkData::PARAMS_SCULPT);
if (sculpt_params)
{
LLUUID sculpt_id = sculpt_params->getSculptTexture();
// <FS:minerjr>
//LLViewerTextureManager::getFetchedTexture(sculpt_id, FTT_DEFAULT, true, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)->setBoostLevel(LLGLTexture::BOOST_SELECTED);
// This isused to fix the textures becoming blury when object interacted with by the user and unselected.
// If this is changing the boost level for the sculpted for the first time, store the boost level before modifying it.
LLViewerFetchedTexture* sculptedTexture = LLViewerTextureManager::getFetchedTexture(sculpt_id, FTT_DEFAULT, true, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
if (sculptedTexture->getBoostLevel() != LLGLTexture::BOOST_SELECTED)
{
sculptedTexture->storeBoostLevel();
}
sculptedTexture->setBoostLevel(LLGLTexture::BOOST_SELECTED);
// </FS:minerjr>
}
LLUUID sculpt_id = sculpt_params->getSculptTexture();
LLViewerTextureManager::getFetchedTexture(sculpt_id, FTT_DEFAULT, true, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)->setBoostLevel(LLGLTexture::BOOST_SELECTED);
}
}
if (boost_children)

View File

@ -835,20 +835,13 @@ void LLViewerObjectList::setAllObjectDefaultTextures(U32 nChannel, bool fShowDef
}
}
// [/SL:KB]
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
//void LLViewerObjectList::updateApparentAngles(LLAgent &agent)
// Added time limit on processing of objects as they affect the texture system (They also calcuate mMaxVirtualSize and mPixelArea)
void LLViewerObjectList::updateApparentAngles(LLAgent &agent, F32 max_time)
// </FS:minerjr> [FIRE-35081]
void LLViewerObjectList::updateApparentAngles(LLAgent &agent)
{
S32 i;
LLViewerObject *objectp;
S32 num_updates, max_value;
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// Remove the old code as it worked on fixed number of updates (Total # of Object / 128) per frame
// and some objects had nothing to do while others were avatars or volumes and could t
/*
if (NUM_BINS - 1 == mCurBin)
{
// Remainder (mObjects.size() could have changed)
@ -884,46 +877,7 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent, F32 max_time)
{
mCurBin = (mCurBin + 1) % NUM_BINS;
}
*/
num_updates = 0;
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)
{
mCurLazyUpdateIndex = 0;
}
// Store the index for the current lazy update index as we will loop over the index
i = mCurLazyUpdateIndex;
// 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())
{
//LL_DEBUGS() << objectp->getID() << " Update Textures" << LL_ENDL;
// Update distance & gpw
objectp->setPixelAreaAndAngle(agent); // Also sets the approx. pixel area
objectp->updateTextures(); // Update the image levels of textures for this object.
}
i++;
num_updates++;
// Escape either if we run out of time, or loop back onto ourselves.
if (timer.getElapsedTimeF32() > max_time || i == mCurLazyUpdateIndex)
{
break;
}
}
// Update the current lazy update index with the current index, so we can continue next frame from where we left off
mCurLazyUpdateIndex = i;
// </FS:minerjr> [FIRE-35081]
#if 0
// Slam priorities for textures that we care about (hovered, selected, and focused)
// Hovered

View File

@ -89,11 +89,7 @@ public:
void processObjectUpdate(LLMessageSystem *mesgsys, void **user_data, EObjectUpdateType update_type, bool compressed=false);
void processCompressedObjectUpdate(LLMessageSystem *mesgsys, void **user_data, EObjectUpdateType update_type);
void processCachedObjectUpdate(LLMessageSystem *mesgsys, void **user_data, EObjectUpdateType update_type);
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
//void updateApparentAngles(LLAgent &agent);
// Added time limit on processing of objects as they affect the texture system
void updateApparentAngles(LLAgent &agent, F32 max_time);
// </FS:minerjr> [FIRE-35081]
void updateApparentAngles(LLAgent &agent);
void update(LLAgent &agent);
void fetchObjectCosts();

View File

@ -820,12 +820,6 @@ 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
// 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)
{
@ -837,13 +831,6 @@ 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
// 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]
}
}
@ -1250,9 +1237,6 @@ void LLViewerFetchedTexture::init(bool firstinit)
mKeptSavedRawImageTime = 0.f;
mLastCallBackActiveTime = 0.f;
mForceCallbackFetch = false;
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
mCloseToCamera = 1.0f; // Store if the camera is close to the camera (0.0f or 1.0f)
// </FS:minerjr> [FIRE-35081]
mFTType = FTT_UNKNOWN;
}
@ -1325,7 +1309,7 @@ void LLViewerFetchedTexture::loadFromFastCache()
record(LLTextureFetch::sCacheHitRate, LLUnits::Ratio::fromValue(1));
sample(LLTextureFetch::sCacheReadLatency, cachReadTime);
mFullWidth = mRawImage->getWidth() << mRawDiscardLevel;
mFullWidth = mRawImage->getWidth() << mRawDiscardLevel;
mFullHeight = mRawImage->getHeight() << mRawDiscardLevel;
setTexelsPerImage();
@ -3126,23 +3110,8 @@ void LLViewerLODTexture::processTextureStats()
else if (mBoostLevel < LLGLTexture::BOOST_HIGH && mMaxVirtualSize <= 10.f)
{
// If the image has not been significantly visible in a while, we don't want it
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
//mDesiredDiscardLevel = llmin(mMinDesiredDiscardLevel, (S8)(MAX_DISCARD_LEVEL + 1));
// Off screen textures at 6 would not downscale.
mDesiredDiscardLevel = llmin(mMinDesiredDiscardLevel, (S8)(MAX_DISCARD_LEVEL));
// </FS:minerjr> [FIRE-35081]
mDesiredDiscardLevel = llmin(mMinDesiredDiscardLevel, (S8)(MAX_DISCARD_LEVEL + 1));
mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S32)mLoadedCallbackDesiredDiscardLevel);
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// 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)
{
@ -3151,8 +3120,6 @@ void LLViewerLODTexture::processTextureStats()
}
else
{
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
/*
//static const F64 log_2 = log(2.0);
static const F64 log_4 = log(4.0);
@ -3180,28 +3147,10 @@ void LLViewerLODTexture::processTextureStats()
discard_level = floorf(discard_level);
F32 min_discard = 0.f;
*/
// Use a S32 instead of a float
S32 min_discard = 0;
if (mFullWidth > max_tex_res || mFullHeight > max_tex_res)
min_discard = 1;
min_discard = 1.f;
// Use a S32 value for the discard level
S32 discard_level = min_discard;
// Find the best discard that covers the entire mMaxVirtualSize of the on screen texture (Use MAX_DISCARD_LEVEL as a max discard instead of MAX_DISCARD_LEVEL+1)
for (; discard_level < MAX_DISCARD_LEVEL; discard_level++) // <FS:minerjr> [FIRE-35361] RenderMaxTextureResolution caps texture resolution lower than intended
{
// If the max virtual size is greater then or equal to the current discard level, then break out of the loop and use the current discard level
if (mMaxVirtualSize >= getWidth(discard_level) * getHeight(discard_level)) // <FS:minerjr> [FIRE-35361] RenderMaxTextureResolution caps texture resolution lower than intended
{
break;
}
}
//discard_level = llclamp(discard_level, min_discard, (F32)MAX_DISCARD_LEVEL);
// </FS:minerjr> [FIRE-35081]
discard_level = llclamp(discard_level, min_discard, (F32)MAX_DISCARD_LEVEL);
// Can't go higher than the max discard level
mDesiredDiscardLevel = llmin(getMaxDiscardLevel() + 1, (S32)discard_level);
@ -3242,10 +3191,7 @@ void LLViewerLODTexture::processTextureStats()
// unset it immediately after we consume it
if (getBoostLevel() == BOOST_SELECTED)
{
// <FS:minerjr>
//setBoostLevel(BOOST_NONE);
restoreBoostLevel();
// </FS:minerjr>
setBoostLevel(BOOST_NONE);
}
}
@ -3496,23 +3442,11 @@ void LLViewerMediaTexture::initVirtualSize()
{
return;
}
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// 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)
{
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
//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]
addTextureStats((*iter)->getVirtualSize());
}
}
@ -3571,11 +3505,6 @@ void LLViewerMediaTexture::addFace(U32 ch, LLFace* facep)
return;
}
// [/SL:KB]
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// 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;
}
@ -3817,10 +3746,7 @@ F32 LLViewerMediaTexture::getMaxVirtualSize()
{
addTextureStats(0.f, false);//reset
}
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
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)
@ -3830,16 +3756,8 @@ F32 LLViewerMediaTexture::getMaxVirtualSize()
{
LLFace* facep = mFaceList[ch][i];
if(facep->getDrawable()->isRecentlyVisible())
{
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
//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]
{
addTextureStats(facep->getVirtualSize());
}
}
}
@ -3855,15 +3773,7 @@ F32 LLViewerMediaTexture::getMaxVirtualSize()
LLFace* facep = *iter;
if(facep->getDrawable()->isRecentlyVisible())
{
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
//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]
addTextureStats(facep->getVirtualSize());
}
}
}

View File

@ -441,11 +441,6 @@ public:
void setInFastCacheList(bool in_list) { mInFastCacheList = in_list; }
bool isInFastCacheList() { return mInFastCacheList; }
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
F32 getCloseToCamera() const {return mCloseToCamera ;} // Get close to camera value
void setCloseToCamera(F32 value) {mCloseToCamera = value ;} // Set the close to camera value (0.0f or 1.0f)
// </FS:minerjr> [FIRE-35081]
/*virtual*/bool isActiveFetching() override; //is actively in fetching by the fetching pipeline.
virtual bool scaleDown() { return false; };
@ -547,9 +542,6 @@ protected:
bool mForSculpt ; //a flag if the texture is used as sculpt data.
bool mIsFetched ; //is loaded from remote or from cache, not generated locally.
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
F32 mCloseToCamera; // Float (0.0f or 1.0f) to indicate if the texture is close to the camera
// </FS:minerjr> [FIRE-35081]
public:
static F32 sMaxVirtualSize; //maximum possible value of mMaxVirtualSize

View File

@ -372,187 +372,23 @@ void LLViewerTextureList::shutdown()
mInitialized = false ; //prevent loading textures again.
}
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// static
// Allows the menu to call the dump method of the texture list
void LLViewerTextureList::dumpTexturelist()
{
gTextureList.dump();
}
// </FS:minerjr> [FIRE-35081]
void LLViewerTextureList::dump()
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_TEXTURE;
LL_INFOS() << "LLViewerTextureList::dump()" << LL_ENDL;
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
S32 texture_count = 0;
S32 textures_close_to_camera = 0;
std::array<S32, MAX_DISCARD_LEVEL * 2 + 2> image_counts{0}; // Double the size for higher discards from textures < 1024 (2048 can make a 7 and 4096 could make an 8)
std::array<S32, 12 * 12> size_counts{0}; // Track the 12 possible sizes (1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048)
std::array<S32, (MAX_DISCARD_LEVEL * 2 + 2) * 12> discard_counts{0}; // Also need to an 1 additional as -1 is a valid discard level (not loaded by reported as a 1x1 texture)
std::array<S32, (MAX_DISCARD_LEVEL * 2 + 2) * 12> fullsize_discard_counts{0}; // Also need to an 1 additional as -1 is a valid discard level (not loaded by reported as a 1x1 texture)
std::array<S32, LLViewerTexture::BOOST_MAX_LEVEL * 12> boost_counts{0}; // Track the # of textures at boost levels by 12 possible sizes
// Don't Init the buffers with 0's like it's the the 1980's...
// </FS:minerjr> [FIRE-35081]
for (image_list_t::iterator it = mImageList.begin(); it != mImageList.end(); ++it)
{
LLViewerFetchedTexture* image = *it;
LL_INFOS() << "priority " << image->getMaxVirtualSize()
<< " boost " << image->getBoostLevel()
<< " size " << image->getWidth() << "x" << image->getHeight()
<< " discard " << image->getDiscardLevel()
<< " desired " << image->getDesiredDiscardLevel()
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
<< " 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)
<< " Sculpted " << (image->forSculpt() ? "Y" : "N")
<< " # of Faces ";
for (S32 index = 0; index < LLRender::NUM_TEXTURE_CHANNELS; index++)
{
LL_CONT << image->getNumFaces(index) << " ";
}
LL_CONT << " # of Volumes ";
for (S32 index = 0; index < LLRender::NUM_VOLUME_TEXTURE_CHANNELS; index++)
{
LL_CONT << image->getNumVolumes(index) << " ";
}
// </FS:minerjr> [FIRE-35081]
LL_CONT << " " << image->getID().asString().substr(0, 7)
<< " http://asset.siva.lindenlab.com/" << image->getID() << ".texture"
<< LL_ENDL;
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
image_counts[(image->getDiscardLevel() + 1)] += 1; // Need to add +1 to make up for -1 being a possible value
S32 x_index = (S32)log2(image->getWidth()); // Convert the width into a 0 based index by taking the Log2 of the size to get the exponent of the size. (1 = 2^0, 2 = 2^1, 4 = 2^2...)
S32 y_index = (S32)log2(image->getHeight()); // Convert the height into a 0 based index by taking the Log2 of the size to get the exponent of the size. (1 = 2^0, 2 = 2^1, 4 = 2^2...)
size_counts[x_index + y_index * 12] += 1; // Add this texture's dimensions to the size count
// Onlyuse the largest size for the texture's discard level(for non-square textures)
S32 max_dimension = (y_index > x_index ? y_index : x_index);
discard_counts[(image->getDiscardLevel() + 1) + max_dimension * (MAX_DISCARD_LEVEL * 2 + 2)] += 1;
boost_counts[image->getBoostLevel() + max_dimension * (LLViewerTexture::BOOST_MAX_LEVEL)] += 1;
S32 full_x_index = (S32)log2(image->getFullWidth());
S32 full_y_index = (S32)log2(image->getFullHeight());
S32 full_max_dimension = (full_y_index > full_x_index ? full_y_index : full_x_index);
fullsize_discard_counts[(image->getDiscardLevel() + 1) + full_max_dimension * (MAX_DISCARD_LEVEL * 2 + 2)] += 1;
texture_count++;
textures_close_to_camera += S32(image->getCloseToCamera());
// </FS:minerjr> [FIRE-35081]
}
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// Add overal texture totals
LL_INFOS() << "Texture Stats: Textures in Close to Camera " << textures_close_to_camera << " of " << texture_count << " : " << LL_ENDL;
// Fix for the -1 discard level as well as higher possible discard levels (for 2048+ size textures)
for (S32 index = 0; index < MAX_DISCARD_LEVEL * 2 + 2; index++)
{
LL_INFOS() << " Discard Level: " << (index - 1) << " Number of Textures: " << image_counts[index] << LL_ENDL;
}
// Create a line to break up the header from the content of the table
std::string header_break(13 * 8, '-');
LL_INFOS() << "Size vs Size" << LL_ENDL;
LL_INFOS() << header_break << LL_ENDL;
// Create a header that for the Sizes
LL_INFOS() << std::setw(8) << "Size";
for (S32 x = 1; x <= 2048; x <<= 1)
{
LL_CONT << std::setw(8) << x;
}
LL_CONT << LL_ENDL;
LL_INFOS() << header_break << LL_ENDL;
// Y Axis is the size of the height of the texture
for (S32 y = 0; y < 12; y++)
{
LL_INFOS() << std::setw(8) << (1 << y);
//X Axis is the size of the width of the texture
for (S32 x = 0; x < 12; x++)
{
LL_CONT << std::setw(8) << size_counts[x + y * 12];
}
LL_CONT << LL_ENDL;
}
LL_INFOS() << LL_ENDL;
// This is the Discard Level Vs Size counts table
LL_INFOS() << "Discard Level Vs Size" << LL_ENDL;
LL_INFOS() << header_break << LL_ENDL;
LL_INFOS() << std::setw(8) << "Discard";
for (S32 x = 0; x < MAX_DISCARD_LEVEL * 2 + 2; x++)
{
LL_CONT << std::setw(8) << (x - 1);
}
LL_CONT << LL_ENDL;
LL_INFOS() << header_break << LL_ENDL;
// Y Axis is the current possible max dimension of the textures (X or Y, which ever is larger is used)
for (S32 y = 0; y < 12; y++)
{
LL_INFOS() << std::setw(8) << (1 << y);
// X Axis is the discard level starging from -1 up to 10 (2 x MAX_DISCARD_LEVEL + 1 (for negative number) + 1 additional for the fact that the last value actuauly used on not < but <=)
for (S32 x = 0; x < (MAX_DISCARD_LEVEL * 2 + 2); x++)
{
LL_CONT << std::setw(8) << discard_counts[x + y * (MAX_DISCARD_LEVEL * 2 + 2)];
}
LL_CONT << LL_ENDL;
}
LL_INFOS() << LL_ENDL;
// This is the Discard Level Vs Full Size counts table
LL_INFOS() << "Discard Level Vs Full Size" << LL_ENDL;
LL_INFOS() << header_break << LL_ENDL;
LL_INFOS() << std::setw(8) << "Discard";
for (S32 x = 0; x < MAX_DISCARD_LEVEL * 2 + 2; x++)
{
LL_CONT << std::setw(8) << (x - 1);
}
LL_CONT << LL_ENDL;
LL_INFOS() << header_break << LL_ENDL;
// Y Axis is the current possible max dimension of the textures (X or Y, which ever is larger is used)
for (S32 y = 0; y < 12; y++)
{
LL_INFOS() << std::setw(8) << (1 << y);
// X Axis is the discard level starging from -1 up to 10 (2 x MAX_DISCARD_LEVEL + 1 (for negative number) + 1 additional for the fact that the last value actuauly used on not < but <=)
for (S32 x = 0; x < (MAX_DISCARD_LEVEL * 2 + 2); x++)
{
LL_CONT << std::setw(8) << fullsize_discard_counts[x + y * (MAX_DISCARD_LEVEL * 2 + 2)];
}
LL_CONT << LL_ENDL;
}
LL_INFOS() << LL_ENDL;
// This is the Boost Level Vs Size counts table
LL_INFOS() << "Boost Level Vs Size" << LL_ENDL;
header_break.append((LLViewerTexture::BOOST_MAX_LEVEL * 8) - (12 * 8), '-');
LL_INFOS() << header_break << LL_ENDL;
LL_INFOS() << std::setw(8) << "Discard";
for (S32 x = 0; x < LLViewerTexture::BOOST_MAX_LEVEL; x++)
{
LL_CONT << std::setw(8) << x;
}
LL_CONT << LL_ENDL;
LL_INFOS() << header_break << LL_ENDL;
// Y Axis is the current possible max dimension of the textures (X or Y, which ever is larger is used)
for (S32 y = 0; y < 12; y++)
{
LL_INFOS() << std::setw(8) << (1 << y);
// X Axis is the boost level starging from BOOST_NONE up to BOOST_MAX_LEVEL
for (S32 x = 0; x < (LLViewerTexture::BOOST_MAX_LEVEL); x++)
{
LL_CONT << std::setw(8) << boost_counts[x + y * (LLViewerTexture::BOOST_MAX_LEVEL)];
}
LL_CONT << LL_ENDL;
}
LL_INFOS() << LL_ENDL;
// </FS:minerjr> [FIRE-35081]
}
void LLViewerTextureList::destroyGL()
@ -808,14 +644,6 @@ LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id,
imagep->setExplicitFormat(internal_format, primary_format);
}
// <FS:minerjr> [FIRE-35428] - Mega prim issue - fix compressed sculpted textures
// Sculpted textures use the RGBA data for coodinates, so any compression can cause artifacts.
if (boost_priority == LLViewerFetchedTexture::BOOST_SCULPTED)
{
// Disable the compression of BOOST_SCULPTED textures
if (imagep->getGLTexture())imagep->getGLTexture()->setAllowCompression(false);
}
// </FS:minerjr> [FIRE-35428]
addImage(imagep, get_element_type(boost_priority));
if (boost_priority != 0)
@ -843,11 +671,7 @@ LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id,
}
// <FS:Ansariel> Keep Fast Cache option
// <FS:minerjr> [FIRE-35428] - Mega prim issue - fix compressed sculpted textures
//if(fast_cache_fetching_enabled)
// If the texture is Sculpted, don't allow it to be added to fast cache as it can affect the texture.
if(fast_cache_fetching_enabled && boost_priority != LLViewerFetchedTexture::BOOST_SCULPTED)
// </FS:minerjr> [FIRE-35428]
if (fast_cache_fetching_enabled)
{
mFastCacheList.insert(imagep);
imagep->setInFastCacheList(true);
@ -1108,38 +932,8 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
F32 bias = llclamp(max_discard - 2.f, 1.f, LLViewerTexture::sDesiredDiscardBias);
// convert bias into a vsize scaler
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
//bias = (F32) llroundf(powf(4, bias - 1.f));
// Pre-divide the bias so you can just use multiply in the loop
bias = (F32) 1.0f / llroundf(powf(4, bias - 1.f));
bias = (F32) llroundf(powf(4, bias - 1.f));
// Apply new rules to bias discard, there are now 2 bias, off-screen and on-screen.
// On-screen Bias
// Only applied to LOD Textures and one that have Discard > 1 (0, 1 protected)
//
// Off-screen Bias
// Will be using the old method of applying the mMaxVirtualSize, however
// only on LOD textures and fetched textures get bias applied.
//
// Local (UI & Icons), Media and Dynamic textures should not have any discard applied to them.
//
// Without this, textures will become blurry that are on screen, which is one of the #1
// user complaints.
// Store a seperate max on screen vsize without bias applied.
F32 max_on_screen_vsize = 0.0f;
S32 on_screen_count = 0;
// Moved all the variables outside of the loop
bool current_on_screen = false;
F32 vsize = 0.0f; // Moved outside the loop to save reallocation every loop
F32 important_to_camera = 0.0f;
F32 close_to_camera = 0.0f; // Track if the texture is close to the cameras
F64 animated = 0; // U64 used to track if a pointer is set for the animations. (The texture matrix of the face is null if no animation assigned to the texture)
// So if you keep adding and the final result is 0, there is no animation
// </FS:minerjr> [FIRE-35081]
// boost resolution of textures that are important to the camera
// Can instead of using max for a min of 1.0, just subtract 1 from the boost and just do a 1 + (TextureCameraBoost - 1) * importanceToCamera)
static LLCachedControl<F32> texture_camera_boost(gSavedSettings, "TextureCameraBoost", 7.f);
LL_PROFILE_ZONE_SCOPED_CATEGORY_TEXTURE;
for (U32 i = 0; i < LLRender::NUM_TEXTURE_CHANNELS; ++i)
{
@ -1152,42 +946,21 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
if (face && face->getViewerObject())
{
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// No longer needed as we no longer re-calculate the face's virtual texture size, we use it directly from the face
//F32 radius;
//F32 cos_angle_to_view_dir;
// </FS:minerjr> [FIRE-35081]
F32 radius;
F32 cos_angle_to_view_dir;
if ((gFrameCount - face->mLastTextureUpdate) > 10)
{ // only call calcPixelArea at most once every 10 frames for a given face
// this helps eliminate redundant calls to calcPixelArea for faces that have multiple textures
// assigned to them, such as is the case with GLTF materials or Blinn-Phong materials
//face->calcPixelArea(cos_angle_to_view_dir, radius);
// The face already has a function to calculate the Texture Virtual Size, which already calls the calcPixelArea method
// so just call this instead. This can be called from outside this loop by LLVolume objects
face->getTextureVirtualSize();
face->mInFrustum = face->calcPixelArea(cos_angle_to_view_dir, radius);
face->mLastTextureUpdate = gFrameCount;
}
// Also moved allocation outside the loop
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
//F32 vsize = face->getPixelArea();
//on_screen |= face->mInFrustum;
// Get the already calculated face's virtual size, instead of re-calculating it
vsize = face->getVirtualSize();
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
// 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());
F32 vsize = face->getPixelArea();
on_screen |= face->mInFrustum;
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings (It is)
/*
// Scale desired texture resolution higher or lower depending on texture scale
//
// Minimum usage examples: a 1024x1024 texture with aplhabet (texture atlas),
@ -1196,7 +969,6 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
//
// Maximum usage examples: huge chunk of terrain repeats texture
// TODO: make this work with the GLTF texture transforms
S32 te_offset = face->getTEOffset(); // offset is -1 if not inited
LLViewerObject* objp = face->getViewerObject();
const LLTextureEntry* te = (te_offset < 0 || te_offset >= objp->getNumTEs()) ? nullptr : objp->getTE(te_offset);
@ -1226,46 +998,17 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
{
break;
}
*/
// Use math to skip having to use a conditaional check
// Bools are stored as 0 false, 1 true, use to cheat
// Lerp instead of doing conditional input
// If the image is import to the camera, even a little then make the on screen true
on_screen_count += S32(important_to_camera * 1000.0f);
//vsize = vsize + (vsize * (1.0f + important_to_camera * texture_camera_boost) - vsize) * F32(current_on_screen);
// Apply boost of size based upon importance to camera
vsize = vsize + (vsize * important_to_camera * 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 * face->mCloseToCamera * texture_camera_boost);
// Update the max on screen vsize based upon the on screen vsize
close_to_camera += face->mCloseToCamera;
// 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]
}
}
// <FS> [FIRE-35081] Blurry prims not changing with graphics settings
//if (max_vsize >= LLViewerFetchedTexture::sMaxVirtualSize
// && (on_screen || LLViewerTexture::sDesiredDiscardBias <= BIAS_TRS_ON_SCREEN))
//{
// break;
//}
// </FS>
if (max_vsize >= LLViewerFetchedTexture::sMaxVirtualSize
&& (on_screen || LLViewerTexture::sDesiredDiscardBias <= BIAS_TRS_ON_SCREEN))
{
break;
}
}
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// Replaced all the checks for this bool to be only in this 1 place instead of in the loop.
// If the on screen counter is greater then 0, then there was at least 1 on screen texture
on_screen = bool(on_screen_count);
imagep->setCloseToCamera(close_to_camera > 0.0f ? 1.0f : 0.0f);
//if (face_count > max_faces_to_check)
// Add check for if the image is animated to boost to high as well
if (face_count > max_faces_to_check || animated != 0)
// </FS:minerjr> [FIRE-35081]
if (face_count > max_faces_to_check)
{ // 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
max_vsize = MAX_IMAGE_AREA;
@ -1283,33 +1026,7 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
}
}
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
//imagep->addTextureStats(max_vsize);
// New logic block for the bias system
// Then depending on the type of texture, the higher resolution on_screen_max_vsize is applied.
// On Screen (Without Bias applied:
// LOD/Fetch Texture: Discard Levels 0, 1
// Fetch Texture 2, 3, 5 with bias < 2.0
// BoostLevel = Boost_High
// Local, Media, Dynamic Texture
// If the textures are on screen and either 1 are the first 2 levels of discard and are either fetched or LOD textures
if (on_screen && ((imagep->getDiscardLevel() < 2 && imagep->getType() >= LLViewerTexture::FETCHED_TEXTURE) || (imagep->getType() == LLViewerTexture::FETCHED_TEXTURE && LLViewerTexture::sDesiredDiscardBias < 2.0f)))
{
// Always use the best quality of the texture
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)
{
// Always use the best quality of the texture
imagep->addTextureStats(max_on_screen_vsize);
}
// All other texture cases will use max_vsize with bias applied.
else
{
imagep->addTextureStats(max_vsize);
}
// </FS:minerjr> [FIRE-35081]
imagep->addTextureStats(max_vsize);
}
#if 0
@ -1410,11 +1127,7 @@ F32 LLViewerTextureList::updateImagesCreateTextures(F32 max_time)
mCreateTextureList.pop();
if (imagep->hasGLTexture() && imagep->getDiscardLevel() < imagep->getDesiredDiscardLevel() &&
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
//(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]
(imagep->getDesiredDiscardLevel() <= MAX_DISCARD_LEVEL))
{
// 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,
@ -1423,7 +1136,7 @@ F32 LLViewerTextureList::updateImagesCreateTextures(F32 max_time)
imagep->scaleDown();
}
if (create_timer.getElapsedTimeF32() > max_time * 0.5f)
if (create_timer.getElapsedTimeF32() > max_time)
{
break;
}
@ -1447,7 +1160,7 @@ F32 LLViewerTextureList::updateImagesCreateTextures(F32 max_time)
// freeze.
S32 min_count = (S32)mCreateTextureList.size() / 20 + 5;
//create_timer.reset();
create_timer.reset();
while (!mDownScaleQueue.empty())
{
LLViewerFetchedTexture* image = mDownScaleQueue.front();

View File

@ -111,9 +111,6 @@ public:
static void receiveImageHeader(LLMessageSystem *msg, void **user_data);
static void receiveImagePacket(LLMessageSystem *msg, void **user_data);
// </FS:Ansariel>
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
static void dumpTexturelist(); // Added code to handle dumping texture information
// </FS:minerjr> [FIRE-35081]
public:
LLViewerTextureList();

View File

@ -3003,19 +3003,12 @@ 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(
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
//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);
// <FS:minerjr> [FIRE-35081]
uuid, FTT_HOST_BAKE, true, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host);
// </FS:Ansariel> [Legacy Bake]
}
LL_DEBUGS("Avatar") << avString() << "get server-bake image from URL " << url << LL_ENDL;
result = LLViewerTextureManager::getFetchedTextureFromUrl(
// <FS:minerjr>
//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);
// </FS:minerjr> [FIRE-35081]
url, FTT_SERVER_BAKE, true, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, uuid);
if (result->isMissingAsset())
{
result->setIsMissingAsset(false);
@ -11071,11 +11064,7 @@ 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,
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
//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]
LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[baked_index].mLastTextureID, FTT_DEFAULT, true, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
}
else
{

View File

@ -99,11 +99,7 @@ void LLVOGrass::updateSpecies()
SpeciesMap::const_iterator it = sSpeciesTable.begin();
mSpecies = (*it).first;
}
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
//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]
setTEImage(0, LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, FTT_DEFAULT, true, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
}

View File

@ -330,11 +330,7 @@ U32 LLVOTree::processUpdateMessage(LLMessageSystem *mesgsys,
// Load Species-Specific data
//
static const S32 MAX_TREE_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL = 32 ; //frames.
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
//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 = LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, FTT_DEFAULT, true, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
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;

View File

@ -745,10 +745,7 @@ void LLVOVolume::animateTextures()
{
LLFace* facep = mDrawable->getFace(i);
if (!facep) continue;
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// Removed check for turning off animations
//if(facep->getVirtualSize() <= MIN_TEX_ANIM_SIZE && facep->mTextureMatrix) continue;
// </FS:minerjr> [FIRE-35081]
if(facep->getVirtualSize() <= MIN_TEX_ANIM_SIZE && facep->mTextureMatrix) continue;
const LLTextureEntry* te = facep->getTextureEntry();
@ -773,10 +770,7 @@ void LLVOVolume::animateTextures()
if (!facep->mTextureMatrix)
{
facep->mTextureMatrix = new LLMatrix4();
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// Removed check for turning off animations
//if (facep->getVirtualSize() > MIN_TEX_ANIM_SIZE)
// </FS:minerjr> [FIRE-35081]
if (facep->getVirtualSize() > MIN_TEX_ANIM_SIZE)
{
// Fix the one edge case missed in
// LLVOVolume::updateTextureVirtualSize when the
@ -929,10 +923,6 @@ 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
// 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);
@ -981,13 +971,6 @@ void LLVOVolume::updateTextureVirtualSize(bool forced)
mPixelArea = llmax(mPixelArea, face->getPixelArea());
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// 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
@ -1071,10 +1054,7 @@ void LLVOVolume::updateTextureVirtualSize(bool forced)
{
LLLightImageParams* params = (LLLightImageParams*) getParameterEntry(LLNetworkData::PARAMS_LIGHT_IMAGE);
LLUUID id = params->getLightTexture();
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// 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]
mLightTexture = LLViewerTextureManager::getFetchedTexture(id, FTT_DEFAULT, true, LLGLTexture::BOOST_NONE);
if (mLightTexture.notNull())
{
F32 rad = getLightRadius();
@ -1124,11 +1104,7 @@ void LLVOVolume::updateTextureVirtualSize(bool forced)
setDebugText(output);
}
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
//if (mPixelArea == 0)
// If there is a legit change to 0.0, don't dismiss it.
if (mPixelArea == 0 && !changed)
// </FS:minerjr> [FIRE-35081]
if (mPixelArea == 0)
{ //flexi phasing issues make this happen
mPixelArea = old_area;
}
@ -5490,10 +5466,7 @@ bool can_batch_texture(LLFace* facep)
return false;
}
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// Removed check for turning off animations
if (facep->isState(LLFace::TEXTURE_ANIM))//&& facep->getVirtualSize() > MIN_TEX_ANIM_SIZE)
// </FS:minerjr> [FIRE-35081]
if (facep->isState(LLFace::TEXTURE_ANIM) && facep->getVirtualSize() > MIN_TEX_ANIM_SIZE)
{ //texture animation breaks batches
return false;
}
@ -5640,10 +5613,7 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,
}
const LLMatrix4* tex_mat = NULL;
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings
// Removed check for turning off animations
if (facep->isState(LLFace::TEXTURE_ANIM)) //&& facep->getVirtualSize() > MIN_TEX_ANIM_SIZE)
// </FS:minerjr> [FIRE-35081]
if (facep->isState(LLFace::TEXTURE_ANIM) && facep->getVirtualSize() > MIN_TEX_ANIM_SIZE)
{
tex_mat = facep->mTextureMatrix;
}

View File

@ -5881,20 +5881,6 @@
<menu_item_check.on_click
function="Advanced.ToggleViewAdminOptions" />
</menu_item_check>
<menu_item_separator/>
<menu
create_jump_keys="true"
label="Dump"
name="Dump"
tear_off="true">
<menu_item_call
label="LLViewerTexturelist"
name="LLViewerTexturelist">
<menu_item_call.on_click
function="Develop.TextureList.Dump" />
</menu_item_call>
</menu>
</menu>
<menu
create_jump_keys="true"

View File

@ -635,7 +635,6 @@
<menu_item_call label="Demander le statut Admin" name="Request Admin Options"/>
<menu_item_call label="Quitter le statut Admin" name="Leave Admin Options"/>
<menu_item_check label="Afficher le menu Admin" name="View Admin Options"/>
<menu label="Vidage" name="Dump"/>
</menu>
<menu label="Admin" name="Admin">
<menu label="Objet" name="AdminObject">

View File

@ -384,7 +384,7 @@
<text name="Teleport Routing: ">
テレポート経路:
</text>
<combo_box name="landing type" tool_tip="テレポート経路あなたの土地へのテレポート経路を選択してください。">
<combo_box name="landing type" tool_tip="テレポート経路あなたの土地へのテレポート経路を選択してください。">
<combo_box.item label="不可" name="Blocked"/>
<combo_box.item label="ランディング地点のみ" name="LandingPoint"/>
<combo_box.item label="どこでも可能" name="Anywhere"/>

View File

@ -4,16 +4,16 @@
[OBJECT]をハードディスクにバックアップ…
</floater.string>
<floater.string name="title_working">
[OBJECT]のバックアップ情報を集めています…
[OBJECT]のバックアップ情報を集めています…
</floater.string>
<floater.string name="title_inventory">
[OBJECT]のバックアップインベントリを取得しています…
[OBJECT]のバックアップインベントリを取得しています…
</floater.string>
<floater.string name="title_assets">
[OBJECT]のバックアップアセットを取得しています…
[OBJECT]のバックアップアセットを取得しています…
</floater.string>
<floater.string name="title_textures">
[OBJECT]のバックアップテクスチャを取得しています…
[OBJECT]のバックアップテクスチャを取得しています…
</floater.string>
<layout_stack name="resizing_stack">
<layout_panel name="control_panel">

View File

@ -4,9 +4,9 @@
新しいグループを作成…
</floater.string>
<floater.string name="title_loading">
グループのプロフィール読み込んでいます…
グループのプロフィール読み込んでいます…
</floater.string>
<floater.string name="title">
グループのプロフィール[NAME]
グループのプロフィール[NAME]
</floater.string>
</floater>

View File

@ -6,7 +6,7 @@
<name_list.columns name="amount" label="金額" />
</name_list>
<text name="summary">
支払ったL$ [PAID]受け取ったL$ [RECEIVED]
支払ったL$ [PAID]受け取ったL$ [RECEIVED]
</text>
<check_box label="閉じている時も記録" name="FSAlwaysTrackPayments" tool_tip="入金記録のウィンドウが閉じている場合でも、常に入金を記録するようにします。" />
<button name="Clear" label="クリア" />

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="performance" title="グラフィックの最適化">
<floater.string name="frame_stats">
フレーム:[TOT_FRAME_TIME]㎳背景:[SCENERY_FRAME_PCT]% アバター:[AV_FRAME_PCT] [UI_FRAME_PCT] [HUDS_FRAME_PCT]% スワップ:[SWAP_FRAME_PCT]% タスク:[IDLE_FRAME_PCT]
フレーム:[TOT_FRAME_TIME]㎳背景:[SCENERY_FRAME_PCT]% アバター:[AV_FRAME_PCT] [UI_FRAME_PCT] [HUDS_FRAME_PCT]% スワップ:[SWAP_FRAME_PCT]% タスク:[IDLE_FRAME_PCT]
</floater.string>
<floater.string name="limit_fps">
ユーザによる制限@[FPSCAP]
@ -54,7 +54,7 @@
<text name="targetfps_desc">
目標フレームレート(fps)
</text>
<spinner name="target_fps" tool_tip="目標FPS希望するFPSのレベルです。ビューアはグラフィック設定を調整することでこれを達成しようとします。"/>
<spinner name="target_fps" tool_tip="目標FPS希望するFPSのレベルです。ビューアはグラフィック設定を調整することでこれを達成しようとします。"/>
<button label="開始" label_selected="停止" name="AutoTuneFPS" tool_tip="ビューアは目標FPSを満たすように設定を調整しようとします。"/>
<check_box label="継続的に" name="AutoTuneContinuous" tool_tip="ビューアは、フローターが閉じられても停止するまで、目標FPSを満たすように設定を継続的に調整します。無効にすると、「自動調整」ボタンをクリックすると、現在の設定に合わせて調整され停止します。"/>
<button name="PrefSaveButton" tool_tip="将来使用するために、現在の設定をデフォルトとして保存します。"/>

View File

@ -29,7 +29,7 @@
<check_box label="他のユーザーが作成" name="check_created_by_others"/>
<check_box label="ログオフ以降" name="check_since_logoff"/>
<text name="- OR -">
‐または‐
-または-
</text>
<radio_group name="date_search_direction">
<radio_item label="より新しい" name="newer"/>

View File

@ -4,7 +4,7 @@
物理と一緒にメッシュをアップロードします。
</string>
<string name="status_parse_error">
エラーDAEファイルに問題が見つかりました。詳細につきましてはログをご確認ください。
エラーDAEファイルに問題が見つかりました。詳細につきましてはログをご確認ください。
</string>
<string name="status_bind_shape_orientation">
警告:バインドシェイプマトリックスは、標準のX軸正方向にはありません。
@ -137,7 +137,7 @@
シーンを解析できませんでした。
</string>
<string name="ParsingErrorCorrupt">
DAEファイルでエラーが見つかりました。ファイルが破損しているようです。
DAEファイルでエラーが見つかりました。ファイルが破損しているようです。
</string>
<string name="ParsingErrorNoController">
コントローラーを確認できませんでした。

View File

@ -1,39 +1,39 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="object_weights" title="高度な情報">
<floater.string name="nothing_selected" value=""/>
<floater.string name="nothing_selected" value=""/>
<floater.string name="lowest_lod" value="最低"/>
<floater.string name="low_lod" value="低"/>
<floater.string name="medium_lod" value="中"/>
<floater.string name="high_lod" value="高"/>
<floater.string name="multiple_lods" value="複数"/>
<text name="selected_text" value="選択済"/>
<text name="objects" value=""/>
<text name="objects" value=""/>
<text name="objects_label" value="オブジェクト"/>
<text name="prims" value=""/>
<text name="prims" value=""/>
<text name="prims_label" value="プリム"/>
<text name="weights_of_selected_text" value="選択済みアイテムのウエイト"/>
<text name="download" value=""/>
<text name="download" value=""/>
<text name="download_label" value="ダウンロード"/>
<text name="physics" value=""/>
<text name="physics" value=""/>
<text name="physics_label" value="物理効果"/>
<text name="server" value=""/>
<text name="server" value=""/>
<text name="server_label" value="サーバー"/>
<text name="display" value=""/>
<text name="display" value=""/>
<text name="display_label" value="ディスプレイ"/>
<text name="land_impacts_text" value="ランドインパクト"/>
<text name="selected" value=""/>
<text name="selected" value=""/>
<text name="selected_label" value="選択済"/>
<text name="rezzed_on_land" value=""/>
<text name="rezzed_on_land" value=""/>
<text name="rezzed_on_land_label" value="土地にRez済み"/>
<text name="remaining_capacity" value=""/>
<text name="remaining_capacity" value=""/>
<text name="remaining_capacity_label" value="残りの許容数"/>
<text name="total_capacity" value=""/>
<text name="total_capacity" value=""/>
<text name="total_capacity_label" value="許容数合計"/>
<text name="rendering_info_text" value="レンダリング情報"/>
<text name="lod_level" value=""/>
<text name="lod_level" value=""/>
<text name="lod_level_label" value="LoD(詳細レベル)"/>
<text name="triangles_shown" value="" />
<text name="triangles_shown" value="" />
<text name="triangles_shown_label" value="表示される三角形"/>
<text name="pixel_area" value=""/>
<text name="pixel_area" value=""/>
<text name="pixel_area_label" value="ピクセルエリア"/>
</floater>

View File

@ -56,10 +56,10 @@
<combo_box.item label="ブレンド0" name="blend_zero"/>
<combo_box.item label="終了色にブレンド" name="blend_dest_color"/>
<combo_box.item label="開始色にブレンド" name="blend_src_color"/>
<combo_box.item label="ブレンド1終了色" name="blend_one_minus_dest_color"/>
<combo_box.item label="ブレンド1開始色" name="blend_one_minus_src_color"/>
<combo_box.item label="ブレンド1終了色" name="blend_one_minus_dest_color"/>
<combo_box.item label="ブレンド1開始色" name="blend_one_minus_src_color"/>
<combo_box.item label="開始色アルファ" name="blend_src_alpha"/>
<combo_box.item label="ブレンド1開始色アルファ" name="blend_one_minus_src_alpha"/>
<combo_box.item label="ブレンド1開始色アルファ" name="blend_one_minus_src_alpha"/>
</combo_box>
<text name="End_Glow_Label">
終了グロー:
@ -69,10 +69,10 @@
<combo_box.item label="ブレンド0" name="blend_zero"/>
<combo_box.item label="終了色にブレンド" name="blend_dest_color"/>
<combo_box.item label="開始色にブレンド" name="blend_src_color"/>
<combo_box.item label="ブレンド1終了色" name="blend_one_minus_dest_color"/>
<combo_box.item label="ブレンド1開始色" name="blend_one_minus_src_color"/>
<combo_box.item label="ブレンド1終了色" name="blend_one_minus_dest_color"/>
<combo_box.item label="ブレンド1開始色" name="blend_one_minus_src_color"/>
<combo_box.item label="開始色アルファ" name="blend_src_alpha"/>
<combo_box.item label="ブレンド1開始色アルファ" name="blend_one_minus_src_alpha"/>
<combo_box.item label="ブレンド1開始色アルファ" name="blend_one_minus_src_alpha"/>
</combo_box>
<text name="Scale_Start_Label">
開始スケール:

View File

@ -22,19 +22,19 @@
このリージョンは経路探索に対応していません。
</floater.string>
<floater.string name="linkset_terrain_description">
</floater.string>
<floater.string name="linkset_terrain_owner">
</floater.string>
<floater.string name="linkset_terrain_scripted">
</floater.string>
<floater.string name="linkset_terrain_land_impact">
</floater.string>
<floater.string name="linkset_terrain_dist_from_you">
</floater.string>
<floater.string name="linkset_owner_loading">
[読み込んでいます]

View File

@ -424,7 +424,7 @@
<check_box tool_tip="透明なオブジェクトを赤で強調表示して、識別しやすくします。これは、シーンの構築時やトラブルシューティング時に、非表示のプリムや非表示のオブジェクトを見つけるのに特に役立ちます。" label="透明なオブジェクトを赤で強調表示" name="Highlight Transparent"/>
<check_box tool_tip="シーン全体をワイヤフレームモードでレンダリングし、テクスチャやシェーディングなしでオブジェクトの基になるジオメトリを表示します。オブジェクトの構造、LOD(詳細レベル)、メッシュトポロジを分析するのに役立ちます。" label="シーンをワイヤーフレーム表示する" name="Wireframe"/>
<check_box tool_tip="アバターが現在装着しているすべてのHUD(ヘッドアップディスプレイ)装着物を表示します。これを無効にするとHUDが非表示になり、画面の乱雑さを軽減したりパフォーマンスを向上させたりするのに役立ちます。" label="アバターに装着されたHUDを表示する" name="Show HUD Attachments"/>
<check_box label="スローアニメーション自分のアバターとビューアのみ" tool_tip="ビューアー内のアバターアニメーションを遅くして、動きを詳細に観察できるようにします。この設定は、他の人があなたのアバターをどのように見るかには影響しません。" name="Slow Motion Animations"/>
<check_box label="スローアニメーション自分のアバターとビューアのみ" tool_tip="ビューアー内のアバターアニメーションを遅くして、動きを詳細に観察できるようにします。この設定は、他の人があなたのアバターをどのように見るかには影響しません。" name="Slow Motion Animations"/>
<button name="Rebake Texture" tool_tip="ビューアにアバターの外観テクスチャのリベイクまたは更新を強制します。これにより、肌がぼやけたり、衣服が適切に読み込まれなかったり、その他のテクスチャ関連の問題を修正できます。" label="外観の強制アップデート(リベイク)"/>
<button name="Set Window Size..." label="ビューアのウィンドウサイズを設定…" tool_tip="ビューア ウィンドウの正確な寸法を設定するためのダイアログを開きます。特定の解像度でスクリーンショットを作成したり、マシニマのウィンドウサイズ要件に一致させたりするのに役立ちます。"/>
<button name="Debug Settings" label="デバッグ設定メニューを表示" tool_tip="デバッグ設定メニューを開き、標準の設定では利用できない高度なビューア設定にアクセスできるようにします。変更はパフォーマンスと安定性に影響を与える可能性があるため、注意して使用してください。"/>

View File

@ -43,7 +43,7 @@
<text name="HardwareText">
ハードウェア
</text>
<check_box label="違法構成フィルタリング(有効にすると遅くなります)" name="ani" />
<check_box label="異方向性フィルタリング(有効にすると遅くなります)" name="ani"/>
<check_box control_name="RenderCompressTextures" label="テクスチャ圧縮の有効化 (再起動後に反映)" name="texture compression" tool_tip="ビデオメモリ内のテクスチャを圧縮し、色の品質をある程度犠牲にして、より高解像度のテクスチャを読み込むようにします。"/>
<check_box label="HiDPIディスプレイのサポートを有効にする再起動後に反映" name="use HiDPI" tool_tip="OpenGLの高解像描画を有効化します。"/>
<text name="antialiasing label">

View File

@ -19,7 +19,7 @@
プレビュー
</floater.string>
<floater.string name="none_text">
‐なし‐
-なし-
</floater.string>
<floater.string name="Title">
ジェスチャー:[NAME]

View File

@ -11,7 +11,7 @@
</string>
<panel name="layout_panel_1">
<text name="region_name">
現在あなたがいるリージョン「‐最長リージョン名‐」は再起動しようとしています。
現在あなたがいるリージョン「-最長リージョン名-」は再起動しようとしています。
このまま、この場所にいるとログアウトされます。
</text>

View File

@ -26,7 +26,7 @@
<text name="select_object_label">
ボタンをクリックしてから、悪意のあるオブジェクトをクリック:
</text>
<button name="pick_btn" tool_tip="オブジェクトピッカー報告対象のオブジェクトを選択してください。"/>
<button name="pick_btn" tool_tip="オブジェクトピッカー報告対象のオブジェクトを選択してください。"/>
<text name="object_name_label">
オブジェクト:
</text>
@ -39,7 +39,7 @@
<text name="owner_name">
ヘンドレリット・ヴルプターテ、かまわしの長い名前
</text>
<combo_box name="category_combo" tool_tip="カテゴリこの報告に最も適したカテゴリを選択してください">
<combo_box name="category_combo" tool_tip="カテゴリこの報告に最も適したカテゴリを選択してください">
<combo_box.item label="カテゴリを選択してください" name="Select_category"/>
<combo_box.item label="年齢>年齢偽証" name="Age__Age_play"/>
<combo_box.item label="攻撃>安全エリアで他の住人を銃撃、プッシュ、または突き飛ばす" name="Assault__Safe_area"/>

View File

@ -33,7 +33,7 @@
販売先を特定の人物に限定するか、しないかを選択してください。
</text>
<combo_box name="sell_to">
<combo_box.item label="‐1つ選択‐" name="--selectone--"/>
<combo_box.item label="-1つ選択-" name="--selectone--"/>
<combo_box.item label="指定なし・誰にでも販売" name="Anyone"/>
<combo_box.item label="特定の人物:" name="Specificuser:"/>
</combo_box>

View File

@ -17,7 +17,7 @@
<text name="lod_suffix_label">
LODサフィックス:
</text>
<combo_box name="lod_suffix_combo" tool_tip="標準を選択するか、手動で編集します…。||SLのデフォルト最低はLOD0、最高はサフィックスなし)ゲームエンジンUnityUE5など最低=LOD3、最高=LOD0英語のLOD名(最低=「LOWEST」、最高=「HIGH」">
<combo_box name="lod_suffix_combo" tool_tip="標準を選択するか、手動で編集します…。||SLのデフォルト最低はLOD0、最高はサフィックスなし)ゲームエンジンUnityUE5など最低=LOD3、最高=LOD0英語のLOD名(最低=「LOWEST」、最高=「HIGH」">
<combo_item name="choose_one">
現在
</combo_item>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="Settings">
<menu_item_call label="選択的に読み込む" tool_tip="オフになっているジョイントのみを読み込み、オンにします。" name="load_selective"/>
<menu_item_call label="選択的に読み込む回転のみ" tool_tip="回転のみをオフになっているジョイントにのみ読み込み、オンにします" name="rotations_positions"/>
<menu_item_call label="読み込む回転のみ" tool_tip="回転のみを読み込みます。他のアバター/シェイプ用に作成されたポーズに適しています。" name="rotations"/>
<menu_item_call label="選択的に読み込む回転のみ" tool_tip="回転のみをオフになっているジョイントにのみ読み込み、オンにします" name="rotations_positions"/>
<menu_item_call label="読み込む回転のみ" tool_tip="回転のみを読み込みます。他のアバター/シェイプ用に作成されたポーズに適しています。" name="rotations"/>
<menu_item_call label="読み込む" tool_tip="回転、位置、スケールを読み込みます。" name="load_all"/>
</toggleable_menu>

View File

@ -141,5 +141,5 @@
</menu>
<menu_item_call label="マーケットプレイスの出品リストにコピー" name="Marketplace Copy"/>
<menu_item_call label="マーケットプレイスの出品リストに移動" name="Marketplace Move"/>
<menu_item_call label="‐オプション無し‐" name="--no options--"/>
<menu_item_call label="-オプション無し-" name="--no options--"/>
</menu>

View File

@ -241,7 +241,7 @@
<menu_item_check label="反射プローブの影響範囲を表示する" name="Show Reflection Probe Volumes"/>
<menu_item_check label="選択ビームを表示する" name="Show Selection Beam"/>
<menu_item_check label="透過をハイライトする" name="Highlight Transparent"/>
<menu_item_check label="透過リグを含む" name="Include Transparent Rigged" />
<menu_item_check label="透過リグを含む" name="Include Transparent Rigged" />
<menu_item_check label="ポストプロセッシングを無効化" name="No Post"/>
<menu label="LoD(詳細レベル)の選択" name="Selection level of detail">
<menu_item_check label="デフォルト" name="Default lod setting"/>
@ -696,9 +696,6 @@
<menu_item_call label="管理者ステータスの呼び出し" name="Request Admin Options"/>
<menu_item_call label="管理者ステータス解除" name="Leave Admin Options"/>
<menu_item_check label="管理者メニューを表示する" name="View Admin Options"/>
<menu label="ダンプ" name="Dump">
<menu_item_call label="LLViewerTexturelistを実行" name="LLViewerTexturelist"/>
</menu>
</menu>
<menu label="管理" name="Admin">
<menu label="オブジェクト" name="AdminObject">

View File

@ -16,5 +16,5 @@
<menu_item_call label="オリジナルを表示" name="show_original"/>
<menu_item_call label="アウトフィットから削除" name="delete_from_outfit"/>
<menu_item_call label="新規作成" name="create_new"/>
<menu_item_call label="‐オプションなし‐" name="--no options--"/>
<menu_item_call label="-オプションなし-" name="--no options--"/>
</context_menu>

View File

@ -75,12 +75,12 @@
</scheme>
<mimetype name="blank">
<label name="blank_label">
‐なし‐
-なし-
</label>
</mimetype>
<mimetype name="none/none">
<label name="none/none_label">
‐なし‐
-なし-
</label>
</mimetype>
<mimetype name="audio/*">

View File

@ -65,12 +65,12 @@
</scheme>
<mimetype name="blank">
<label name="blank_label">
‐なし‐
-なし-
</label>
</mimetype>
<mimetype name="none/none">
<label name="none/none_label">
‐なし‐
-なし-
</label>
</mimetype>
<mimetype name="audio/*">

View File

@ -65,12 +65,12 @@
</scheme>
<mimetype name="blank">
<label name="blank_label">
‐なし‐
-なし-
</label>
</mimetype>
<mimetype name="none/none">
<label name="none/none_label">
‐なし‐
-なし-
</label>
</mimetype>
<mimetype name="audio/*">

View File

@ -3238,7 +3238,7 @@ Webページにリンクすると、他人がこの場所に簡単にアクセ
[NAME_SLURL] は、テレポートであなたを呼んでいます。
[MESSAGE]
&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt;[MATURITY_STR]
&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt;[MATURITY_STR]
<form name="form">
<button name="Teleport" text="テレポート"/>
<button name="Cancel" text="キャンセル"/>
@ -3248,7 +3248,7 @@ Webページにリンクすると、他人がこの場所に簡単にアクセ
[NAME_SLURL] は、テレポートであなたを呼んでいます。
[MESSAGE]
&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt;[MATURITY_STR]
&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt;[MATURITY_STR]
このリージョンには[REGION_CONTENT_MATURITY]コンテンツが含まれていますが、現在の初期設定は[REGION_CONTENT_MATURITY]コンテンツを除外するように設定されています。初期設定を変更してテレポートを続けるか、このテレポートを取り消すことができます。
<form name="form">
@ -3260,7 +3260,7 @@ Webページにリンクすると、他人がこの場所に簡単にアクセ
[NAME_SLURL] は、テレポートであなたを呼んでいます。
[MESSAGE]
&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt;[MATURITY_STR]
&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt;[MATURITY_STR]
ただし、このリージョンには成人のみアクセスできるコンテンツが含まれています。
</notification>
@ -3268,7 +3268,7 @@ Webページにリンクすると、他人がこの場所に簡単にアクセ
[NAME_SLURL]があなたを自分の場所へのテレポートのオファーを出しました([POS_SLURL]
[MESSAGE]
&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt;[MATURITY_STR]
&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt;[MATURITY_STR]
<form name="form">
<button name="Teleport" text="テレポート"/>
<button name="Cancel" text="キャンセル"/>
@ -3278,7 +3278,7 @@ Webページにリンクすると、他人がこの場所に簡単にアクセ
[NAME_SLURL]があなたを自分の場所へのテレポートのオファーを出しました([POS_SLURL]
[MESSAGE]
&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt;[MATURITY_STR]
&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt;[MATURITY_STR]
このリージョンには[REGION_CONTENT_MATURITY]コンテンツが含まれていますが、現在の設定では[REGION_CONTENT_MATURITY]コンテンツを除外するように設定されています。設定を変更してテレポートを続行するか、このテレポートをキャンセルすることができます。
<form name="form">
@ -3290,7 +3290,7 @@ Webページにリンクすると、他人がこの場所に簡単にアクセ
[NAME_SLURL]があなたを自分の場所へのテレポートのオファーを出しました([POS_SLURL]
[MESSAGE]
&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt;[MATURITY_STR]
&lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt;[MATURITY_STR]
ただし、この領域にはAdultのみがアクセスできるコンテンツが含まれています。
</notification>
@ -4133,13 +4133,13 @@ https://wiki.firestormviewer.org/fs_voice
<usetemplate ignoretext="選択したオブジェクトをフレキシブルパスに変更する際にナビメッシュから削除されることの確認" name="okcancelignore" notext="キャンセル" yestext=""/>
</notification>
<global name="UnsupportedGPU">
あなたのグラフィックカードは、必須動作環境の条件を満たしていません。
あなたのグラフィックカードは、必須動作環境の条件を満たしていません。
</global>
<global name="UnsupportedCPU">
あなたのCPUは、必須動作環境の条件を満たしていません。
あなたのCPUは、必須動作環境の条件を満たしていません。
</global>
<global name="UnsupportedRAM">
あなたのシステムメモリは、必須動作環境の条件を満たしていません。
あなたのシステムメモリは、必須動作環境の条件を満たしていません。
</global>
<global name="LLLeapUpdaterFailure">
アップデーターサービス[UPDATER_APP]の起動に失敗しました。ビューアが正しくインストールされ、実行に必要な権限があることを確認してください。引き続き問題が発生する場合は、[SUPPORT_SITE]をご覧ください。
@ -4720,31 +4720,31 @@ https://wiki.firestormviewer.org/fs_voice
リージョンが埋まっているため、このリージョンに入場できません。
</notification>
<notification name="LinkFailedOwnersDiffer">
リンクエラー所有者が違います。
リンクエラー所有者が違います。
</notification>
<notification name="LinkFailedNoModNavmeshAcrossRegions">
リンクエラーリージョンの境界をまたぐナビメッシュは変更できません。
リンクエラーリージョンの境界をまたぐナビメッシュは変更できません。
</notification>
<notification name="LinkFailedNoPermToEdit">
リンクエラー編集権限がありません。
リンクエラー編集権限がありません。
</notification>
<notification name="LinkFailedTooManyPrims">
リンクエラープリミティブが多すぎます。
リンクエラープリミティブが多すぎます。
</notification>
<notification name="LinkFailedCantLinkNoCopyNoTrans">
リンクエラーコピー不可と譲渡不可のオブジェクトをリンクできません。
リンクエラーコピー不可と譲渡不可のオブジェクトをリンクできません。
</notification>
<notification name="LinkFailedNothingLinkable">
リンクエラーリンクできるものがありません。
リンクエラーリンクできるものがありません。
</notification>
<notification name="LinkFailedTooManyPathfindingChars">
リンクエラー経路探索の文字数が多すぎます。
リンクエラー経路探索の文字数が多すぎます。
</notification>
<notification name="LinkFailedInsufficientLand">
リンクエラー土地のリソースが足りません。
リンクエラー土地のリソースが足りません。
</notification>
<notification name="LinkFailedTooMuchPhysics">
オブジェクトが使用する物理リソースが多すぎますそのダイナミクスが無効になっています。
オブジェクトが使用する物理リソースが多すぎますそのダイナミクスが無効になっています。
</notification>
<notification name="EstateManagerFailedllTeleportHome">
[SLURL] のオブジェクト「[OBJECT_NAME]」で不動産マネージャーのホームをテレポートできません。
@ -5673,6 +5673,10 @@ https://wiki.firestormviewer.org/antivirus_whitelisting
「[POSE_NAME]」を上書きしてもよろしいですか?
<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="はい"/>
</notification>
<notification name="FSLargeOutfitsWarningInThisSession">
アウトフィットの数が多すぎます:[AMOUNT]個。これにより、ビューアがハングしたり、接続が切断されたりする可能性があります。パフォーマンスを向上させるには、アウトフィットの数を減らすことをご検討ください。([MAX]個未満)
<usetemplate ignoretext="アウトフィット数の警告" name="okignore" yestext=""/>
</notification>
<notification name="PrimfeedLoginRequestFailed">
Primfeedへのログインリクエストが拒否されました。
</notification>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_radar">
<string name="MiniMapToolTipMsg" value="[REGION] (ダブルクリックでワールドマップを開きます。Shiftドラッグで水平・垂直移動します。)"/>
<string name="AltMiniMapToolTipMsg" value="[REGION] (ダブルクリックでテレポートします。Shiftドラッグで水平・垂直移動します。)"/>
<string name="MiniMapToolTipMsg" value="[REGION] (ダブルクリックでワールドマップを開きます。Shiftドラッグで水平・垂直移動します。)"/>
<string name="AltMiniMapToolTipMsg" value="[REGION] (ダブルクリックでテレポートします。Shiftドラッグで水平・垂直移動します。)"/>
<string name="avatar_name_count" value="名前 [[TOTAL][IN_REGION][IN_CHAT_RANGE]]"/>
<panel name="nearby_panel">
<panel label="bottom_panel" name="nearby_buttons_panel">

View File

@ -20,7 +20,7 @@
</text>
</panel>
<panel name="P_Cloud_Density">
<text name="cloud_density_label" tool_tip="雲のXY/密度XおよびYスライダーを使用して、空にあるすべての雲の水平位置を変更します。Dスライダーは、個々の雲の全体的な密度に影響します。低い設定では薄くて細い雲が表示され、高い設定では厚くてしっかりした雲が表示されます。">
<text name="cloud_density_label" tool_tip="雲のXY/密度XおよびYスライダーを使用して、空にあるすべての雲の水平位置を変更します。Dスライダーは、個々の雲の全体的な密度に影響します。低い設定では薄くて細い雲が表示され、高い設定では厚くてしっかりした雲が表示されます。">
雲の密度:
</text>
<text name="Cloud_XY_Density_X">

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel label="水面" name="panel_fs_settings_water">
<panel name="P_Wave_Fog" label="フォグ">
<text name="water_fog_label" tool_tip="水のフォグの色水のボリュームの色合いを変更し、基本的に水自体の色を定義します。水にフォグがない場合、水は透明で無色に見えます。">
<text name="water_fog_label" tool_tip="水のフォグの色水のボリュームの色合いを変更し、基本的に水自体の色を定義します。水にフォグがない場合、水は透明で無色に見えます。">
水のフォグの色
</text>
<text name="normal_map_label" tool_tip="法線(ノーマル)マップ反射と屈折を決定するために使用される画像。この設定には任意のテクスチャを使用できますが、真の法線マップが最適です。蛇皮、タイル、またはその他の法線マップを試して、奇抜な効果を出しましょう。">
<text name="normal_map_label" tool_tip="法線(ノーマル)マップ反射と屈折を決定するために使用される画像。この設定には任意のテクスチャを使用できますが、真の法線マップが最適です。蛇皮、タイル、またはその他の法線マップを試して、奇抜な効果を出しましょう。">
法線マップ
</text>
</panel>

View File

@ -25,7 +25,7 @@
<spinner name="spin_enrollment_fee" tool_tip="入会費にチェックされている場合、新しいメンバーはグループに加入するためにこの料金を支払う必要があります。"/>
<combo_box name="group_mature_check" tool_tip="レーティングは、グループで許可されるコンテンツと活動内容の種類を指定します。">
<combo_item name="select_mature">
‐レーティングの選択‐
-レーティングの選択-
</combo_item>
<combo_box.item label="「Moderate」コンテンツ" name="mature"/>
<combo_box.item label="「General」コンテンツ" name="pg"/>

View File

@ -57,7 +57,7 @@
<spinner name="spin_enrollment_fee" tool_tip="「入会費」にチェックが入っている場合、新規メンバーは指定された入会費を支払わなければグループに入れません。" />
<combo_box name="group_mature_check" tool_tip="レーティング区分は、グループ内でどのようなコンテンツや行動が許されるかを指定するものです。">
<combo_item name="select_mature">
‐レーティング区分を指定‐
-レーティング区分を指定-
</combo_item>
<combo_box.item label="「Moderate」コンテンツ" name="mature"/>
<combo_box.item label="「General」コンテンツ" name="pg"/>

View File

@ -73,7 +73,7 @@
<button name="new_inv_btn" tool_tip="新しいインベントリウィンドウを表示します。"/>
</panel>
<panel name="show_filters_panel">
<button name="show_filters_inv_btn" tool_tip="フィルタを表示選択するとフィルタサイドメニューが表示されます。フィルタが有効になっている場合は強調表示されます。"/>
<button name="show_filters_inv_btn" tool_tip="フィルタを表示選択するとフィルタサイドメニューが表示されます。フィルタが有効になっている場合は強調表示されます。"/>
</panel>
<panel name="view_mode_panel">
<button name="view_mode_btn" tool_tip="表示モードを切り替えます。"/>

View File

@ -1853,7 +1853,7 @@ https://support.secondlife.com よりSecond Lifeのサポートまでお問い
<!-- use value="" because they have preceding spaces -->
<string name="Chat Message" value=" チャット:"/>
<string name="Sound" value=" サウンド:"/>
<string name="Wait" value=" 待機:"/>
<string name="Wait" value=" 待機:"/>
<string name="AnimFlagStop" value=" アニメーションを停止:"/>
<string name="AnimFlagStart" value=" アニメーションを開始:"/>
<string name="Wave" value=" 手を振る"/>
@ -1885,7 +1885,7 @@ https://support.secondlife.com よりSecond Lifeのサポートまでお問い
<string name="Modifiable" value="修正可"/>
<string name="Copyable" value="コピー可"/>
<string name="Transferable" value="再販可"/>
<string name="PermissionsFilter" value="[PERMISSIONS]のみ"/>
<string name="PermissionsFilter" value="[PERMISSIONS]のみ"/>
<!-- </FS:Zi> -->
<!-- inventory folder -->
<string name="InvFolder My Inventory">
@ -3207,7 +3207,7 @@ https://support.secondlife.com よりSecond Lifeのサポートまでお問い
<string name="MBFatalError">
致命的なエラー
</string>
<string name="MBApplicationError">アプリケーションエラー慌てないでください</string>
<string name="MBApplicationError">アプリケーションエラー慌てないでください</string>
<string name="MBApplicationErrorDetails">申し訳ございませんが、[APP_NAME]はクラッシュしたため、終了する必要があります。この問題が繰り返し発生する場合は、サポートチームに連絡して次のメッセージを送信してください:
[ERROR_DETAILS]
@ -4810,7 +4810,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
</string>
<!-- IM system messages -->
<string name="IM_logging_string">
‐インスタントメッセージの保存開始‐
-インスタントメッセージの保存開始-
</string>
<string name="IM_typing_start_string">
[NAME]は入力しています…
@ -4849,10 +4849,10 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
オフライン
</string>
<string name="not_online_msg">
ユーザーがオンラインでありませんメッセージは保存され、後で配信されます。
ユーザーがオンラインでありませんメッセージは保存され、後で配信されます。
</string>
<string name="not_online_inventory">
ユーザーがオンラインでありませんインベントリに保存されました。
ユーザーがオンラインでありませんインベントリに保存されました。
</string>
<!-- Additional IM messages -->
<string name="IM_announce_incoming">[NAME]からメッセージが届いています</string>
@ -5192,91 +5192,91 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
</string>
<!-- gestures -->
<string name="Male - Excuse me">
男性すみません
男性すみません
</string>
<string name="Male - Get lost">
男性あっち行けよ
男性あっち行けよ
</string>
<string name="Male - Blow kiss">
男性投げキッス
男性投げキッス
</string>
<string name="Male - Boo">
男性ぶー
男性ぶー
</string>
<string name="Male - Bored">
男性退屈
男性退屈
</string>
<string name="Male - Hey">
男性やぁ
男性やぁ
</string>
<string name="Male - Laugh">
男性笑う
男性笑う
</string>
<string name="Male - Repulsed">
男性拒絶
男性拒絶
</string>
<string name="Male - Shrug">
男性肩をすくめる
男性肩をすくめる
</string>
<string name="Male - Stick tougue out">
男性舌を出す
男性舌を出す
</string>
<string name="Male - Wow">
男性わぁ
男性わぁ
</string>
<string name="Female - Chuckle">
女性クスクス
女性クスクス
</string>
<string name="Female - Cry">
女性泣く
女性泣く
</string>
<string name="Female - Embarrassed">
女性恥ずかしい
女性恥ずかしい
</string>
<string name="Female - Excuse me">
女性すみません
女性すみません
</string>
<string name="Female - Get lost">
女性あっち行ってよ
女性あっち行ってよ
</string>
<string name="Female - Blow kiss">
女性投げキッス
女性投げキッス
</string>
<string name="Female - Boo">
女性ぶー
女性ぶー
</string>
<string name="Female - Bored">
女性退屈
女性退屈
</string>
<string name="Female - Hey">
女性やぁ
女性やぁ
</string>
<string name="Female - Hey baby">
女性ヘイ、ベィビー!
女性ヘイ、ベィビー!
</string>
<string name="Female - Laugh">
女性笑う
女性笑う
</string>
<string name="Female - Looking good">
女性いい感じ
女性いい感じ
</string>
<string name="Female - Over here">
女性こっちよ
女性こっちよ
</string>
<string name="Female - Please">
女性プリーズ
女性プリーズ
</string>
<string name="Female - Repulsed">
女性拒絶
女性拒絶
</string>
<string name="Female - Shrug">
女性肩をすくめる
女性肩をすくめる
</string>
<string name="Female - Stick tougue out">
女性舌を出す
女性舌を出す
</string>
<string name="Female - Wow">
女性わぁ
女性わぁ
</string>
<!-- settings -->
<string name="New Day">
@ -5876,7 +5876,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
<string name="Command_Group_Titles_Tooltip">アクティブなグループタグを変更します。</string>
<string name="Command_Wearable_Favorites_Tooltip">お気に入りの着用物のリストを開きます。</string>
<string name="Command_RFO_Tooltip">ビューアにはフレンドのアバターのみが表示され、他のすべてのアバターは削除されます。有効にすると、他のユーザを見えるようにするTPが必要になります。</string>
<string name="Command_DAO_Tooltip">アニメーションオブジェクトの描画解除(別名アニメッシュ)現在表示されているすべてのアニメッシュ(アタッチされているもの、フリーローミングのもの)を一時的に描画解除します。描画解除されたアニメッシュは、TP後に再び表示されます。</string>
<string name="Command_DAO_Tooltip">アニメーションオブジェクトの描画解除(別名アニメッシュ)現在表示されているすべてのアニメッシュ(アタッチされているもの、フリーローミングのもの)を一時的に描画解除します。描画解除されたアニメッシュは、TP後に再び表示されます。</string>
<string name="Command_Beacons_Tooltip">ビーコンを表示します。</string>
<string name="Toolbar_Bottom_Tooltip">
現在、下部のツールバー(↓)にあります。
@ -6207,7 +6207,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
該当なし
</string>
<string name="preset_combo_label">
‐空のリスト‐
-空のリスト-
</string>
<string name="Default">
デフォルト

View File

@ -683,7 +683,6 @@
<menu_item_call label="Zażądaj statusu administratora" name="Request Admin Options"/>
<menu_item_call label="Porzuć status administratora" name="Leave Admin Options"/>
<menu_item_check label="Pokaż menu administratora" name="View Admin Options"/>
<menu label="Zrzuć" name="Dump" />
</menu>
<menu label="Administrator" name="Admin">
<menu label="Obiekt" name="AdminObject">

View File

@ -5,11 +5,13 @@
<no_visible_tabs_text name="no_outfits_msg" value="Nie masz jeszcze żadnych strojów. Spróbuj [secondlife:///app/search/all/ wyszukać]"/>
</accordion>
<panel name="bottom_panel">
<menu_button tool_tip="Pokaż opcje dodatkowe" name="options_gear_btn" />
<text name="OutfitcountText">
[COUNT] strojów
</text>
<text name="avatar_complexity_label">
Złożoność: [WEIGHT]
</text>
<button name="trash_btn" tool_tip="Usuń wybrany strój" />
</panel>
</panel>

View File

@ -8,6 +8,7 @@
<accordion_tab name="tab_temp_attachments" title="Dodatki tymczasowe" />
</accordion>
<panel name="bottom_panel">
<menu_button name="options_gear_btn" tool_tip="Pokaż opcje dodatkowe" />
<text name="avatar_complexity_label">
Złożoność: [WEIGHT]
</text>

View File

@ -729,7 +729,6 @@
<menu_item_call label="Запрос статуса администратора" name="Request Admin Options"/>
<menu_item_call label="Выход из статуса администратора" name="Leave Admin Options"/>
<menu_item_check label="Показать меню администратора" name="View Admin Options"/>
<menu label="Дамп" name="Dump" />
</menu>
<menu label="Администратор" name="Admin">
<menu label="Объект" name="AdminObject">

View File

@ -664,9 +664,6 @@
<menu_item_call label="要求管理員狀態" name="Request Admin Options" />
<menu_item_call label="離開管理員狀態" name="Leave Admin Options" />
<menu_item_check label="顯示管理員選項" name="View Admin Options" />
<menu label="轉儲" name="Dump">
<menu_item_call label="林登檢視器紋理清單" name="LLViewerTexturelist"/>
</menu>
</menu>
<menu label="管理員" name="Admin">
<menu label="物件" name="AdminObject">

View File

@ -5784,6 +5784,10 @@ https://wiki.firestormviewer.org/antivirus_whitelisting
是否覆蓋現有的姿勢「[POSE_NAME]」?
<usetemplate name="okcancelbuttons" notext="取消" yestext="確定"/>
</notification>
<notification name="FSLargeOutfitsWarningInThisSession">
检测到大量装扮:[AMOUNT]。这可能会导致查看器卡顿或连接断开。请考虑将装扮数量限制在[MAX]以内,以提升性能。
<usetemplate ignoretext="装扮过多警告" name="okignore" yestext="确定" />
</notification>
<notification name="PrimfeedLoginRequestFailed">
Primfeed 登錄請求被拒絕。
</notification>

View File

@ -99,7 +99,7 @@ https://accounts.secondlife.com/change_email/
<tab_container
follows="all"
halign="left"
height="440"
height="480"
layout="topleft"
left="0"
name="pref core"