diff options
author | cosmic-linden <111533034+cosmic-linden@users.noreply.github.com> | 2023-02-14 14:45:53 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-14 14:45:53 -0800 |
commit | 0dd4efea93ad96da3aab9030e3bfc78c36b2bb10 (patch) | |
tree | 26c5014e88f87a061cafb3d1a8e5fc340e29adee /indra/newview/llviewerobject.cpp | |
parent | ba7a3339697a906119520e23064dac2d7a5f31ff (diff) | |
parent | 917932549fe40f02bf393f22ec1af12aa2245264 (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.cpp | 35 |
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); } } } |