summaryrefslogtreecommitdiff
path: root/indra/newview/llselectmgr.cpp
diff options
context:
space:
mode:
authorRye <rye@alchemyviewer.org>2025-08-20 18:04:55 -0400
committerRye <rye@alchemyviewer.org>2025-08-20 18:04:55 -0400
commitba30737d8f4add8ddd8c77d18df6497b46583fe9 (patch)
tree81e5412a364ff80b5250fe6db9e653d35621c20e /indra/newview/llselectmgr.cpp
parentf0db568bf8d313a00e10c1c4ee4dd7f716a9d987 (diff)
parentd5f748c91c650a2ec534c497b9e098ccb317d70b (diff)
Merge branch 'develop' of github.com:secondlife/viewer into rye/infinitemac
Diffstat (limited to 'indra/newview/llselectmgr.cpp')
-rw-r--r--indra/newview/llselectmgr.cpp85
1 files changed, 52 insertions, 33 deletions
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index be1e64ce54..01fd5ae63c 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -252,6 +252,7 @@ LLSelectMgr::LLSelectMgr()
LLSelectMgr::~LLSelectMgr()
{
clearSelections();
+ mSlectionLodModChangedConnection.disconnect();
}
void LLSelectMgr::clearSelections()
@@ -2248,6 +2249,7 @@ void LLSelectMgr::selectionRevertGLTFMaterials()
{
// Restore base material
LLUUID asset_id = nodep->mSavedGLTFMaterialIds[te];
+ LLUUID old_asset_id = objectp->getRenderMaterialID(te);
// Update material locally
objectp->setRenderMaterialID(te, asset_id, false /*wait for LLGLTFMaterialList update*/);
@@ -2258,18 +2260,29 @@ void LLSelectMgr::selectionRevertGLTFMaterials()
objectp->setTEGLTFMaterialOverride(te, material);
}
- // Enqueue update to server
- if (asset_id.notNull() && material)
+ if (asset_id.isNull() || !material)
+ {
+ //blank override out
+ LLGLTFMaterialList::queueApply(objectp, te, asset_id);
+ }
+ if (old_asset_id != asset_id)
{
// Restore overrides and base material
+ // Note: might not work reliably if asset is already there, might
+ // have a server sided problem where servers applies override
+ // first then resets it by adding asset, in which case need
+ // to create a server ticket and chain asset then override
+ // application.
LLGLTFMaterialList::queueApply(objectp, te, asset_id, material);
}
else
{
- //blank override out
- LLGLTFMaterialList::queueApply(objectp, te, asset_id);
+ // Enqueue override update to server
+ // Note: this is suboptimal, better to send asset id as well
+ // but there seems to be a server problem with queueApply
+ // that ignores override in some cases
+ LLGLTFMaterialList::queueModify(objectp, te, material);
}
-
}
return true;
}
@@ -3142,36 +3155,43 @@ void LLSelectMgr::adjustTexturesByScale(bool send_to_sim, bool stretch)
F32 offset_x = 0;
F32 offset_y = 0;
- for (U32 i = 0; i < LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT; ++i)
+ if (te_num < selectNode->mGLTFScaleRatios.size())
{
- LLVector3 scale_ratio = selectNode->mGLTFScaleRatios[te_num][i];
-
- if (planar)
- {
- scale_x = scale_ratio.mV[s_axis] / object_scale.mV[s_axis];
- scale_y = scale_ratio.mV[t_axis] / object_scale.mV[t_axis];
- }
- else
- {
- scale_x = scale_ratio.mV[s_axis] * object_scale.mV[s_axis];
- scale_y = scale_ratio.mV[t_axis] * object_scale.mV[t_axis];
- }
- material->mTextureTransform[i].mScale.set(scale_x, scale_y);
-
- LLVector2 scales = selectNode->mGLTFScales[te_num][i];
- LLVector2 offsets = selectNode->mGLTFOffsets[te_num][i];
- F64 int_part = 0;
- offset_x = (F32)modf((offsets[VX] + (scales[VX] - scale_x)) / 2, &int_part);
- if (offset_x < 0)
- {
- offset_x++;
- }
- offset_y = (F32)modf((offsets[VY] + (scales[VY] - scale_y)) / 2, &int_part);
- if (offset_y < 0)
+ for (U32 i = 0; i < LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT; ++i)
{
- offset_y++;
+ LLVector3 scale_ratio = selectNode->mGLTFScaleRatios[te_num][i];
+
+ if (planar)
+ {
+ scale_x = scale_ratio.mV[s_axis] / object_scale.mV[s_axis];
+ scale_y = scale_ratio.mV[t_axis] / object_scale.mV[t_axis];
+ }
+ else
+ {
+ scale_x = scale_ratio.mV[s_axis] * object_scale.mV[s_axis];
+ scale_y = scale_ratio.mV[t_axis] * object_scale.mV[t_axis];
+ }
+ material->mTextureTransform[i].mScale.set(scale_x, scale_y);
+
+ LLVector2 scales = selectNode->mGLTFScales[te_num][i];
+ LLVector2 offsets = selectNode->mGLTFOffsets[te_num][i];
+ F64 int_part = 0;
+ offset_x = (F32)modf((offsets[VX] + (scales[VX] - scale_x)) / 2, &int_part);
+ if (offset_x < 0)
+ {
+ offset_x++;
+ }
+ offset_y = (F32)modf((offsets[VY] + (scales[VY] - scale_y)) / 2, &int_part);
+ if (offset_y < 0)
+ {
+ offset_y++;
+ }
+ material->mTextureTransform[i].mOffset.set(offset_x, offset_y);
}
- material->mTextureTransform[i].mOffset.set(offset_x, offset_y);
+ }
+ else
+ {
+ llassert(false); // make sure mGLTFScaleRatios is filled
}
const LLGLTFMaterial* base_material = tep->getGLTFMaterial();
@@ -6927,7 +6947,6 @@ void LLSelectNode::saveTextureScaleRatios(LLRender::eTexIndex index_to_query)
if (mObject.notNull())
{
-
LLVector3 scale = mObject->getScale();
for (U8 i = 0; i < mObject->getNumTEs(); i++)