summaryrefslogtreecommitdiff
path: root/indra/newview/llviewerobject.cpp
diff options
context:
space:
mode:
authorcosmic-linden <111533034+cosmic-linden@users.noreply.github.com>2023-02-14 14:45:53 -0800
committerGitHub <noreply@github.com>2023-02-14 14:45:53 -0800
commit0dd4efea93ad96da3aab9030e3bfc78c36b2bb10 (patch)
tree26c5014e88f87a061cafb3d1a8e5fc340e29adee /indra/newview/llviewerobject.cpp
parentba7a3339697a906119520e23064dac2d7a5f31ff (diff)
parent917932549fe40f02bf393f22ec1af12aa2245264 (diff)
Merge pull request #85 from secondlife/SL-19002
SL-19002: Handle edge case in client networking which could cause material ID and overrides to become out-of-sync
Diffstat (limited to 'indra/newview/llviewerobject.cpp')
-rw-r--r--indra/newview/llviewerobject.cpp35
1 files changed, 14 insertions, 21 deletions
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 2d9614d5c3..e217ede067 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -6289,6 +6289,11 @@ void LLViewerObject::parameterChanged(U16 param_type, LLNetworkData* data, BOOL
{
if (local_origin)
{
+ // *NOTE: Do not send the render material ID in this way as it will get
+ // out-of-sync with other sent client data.
+ // See LLViewerObject::setRenderMaterialID and LLGLTFMaterialList
+ llassert(param_type != LLNetworkData::PARAMS_RENDER_MATERIAL);
+
LLViewerRegion* regionp = getRegion();
if(!regionp) return;
@@ -7245,18 +7250,6 @@ void LLViewerObject::setRenderMaterialID(S32 te_in, const LLUUID& id, bool updat
});
}
- if (update_server)
- {
- // update via ModifyMaterialParams cap (server will echo back changes)
- for (S32 te = start_idx; te < end_idx; ++te)
- {
- // This sends a cleared version of this object's current material
- // override, but the override should already be cleared due to
- // calling setBaseMaterial above.
- LLGLTFMaterialList::queueApply(this, te, id);
- }
- }
-
// predictively update LLRenderMaterialParams (don't wait for server)
if (param_block)
{ // update existing parameter block
@@ -7264,17 +7257,17 @@ void LLViewerObject::setRenderMaterialID(S32 te_in, const LLUUID& id, bool updat
{
param_block->setMaterial(te, id);
}
+ }
- if (update_server)
+ if (update_server)
+ {
+ // update via ModifyMaterialParams cap (server will echo back changes)
+ for (S32 te = start_idx; te < end_idx; ++te)
{
- // If 'in use' changes, it will send an update itself.
- bool in_use_changed = setParameterEntryInUse(LLNetworkData::PARAMS_RENDER_MATERIAL, !param_block->isEmpty(), true);
-
- if (!in_use_changed)
- {
- // In use didn't change, but the parameter did, send an update
- parameterChanged(LLNetworkData::PARAMS_RENDER_MATERIAL, param_block, !param_block->isEmpty(), true);
- }
+ // This sends a cleared version of this object's current material
+ // override, but the override should already be cleared due to
+ // calling setBaseMaterial above.
+ LLGLTFMaterialList::queueApply(this, te, id);
}
}
}