summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Linden <46733234+brad-linden@users.noreply.github.com>2023-04-19 09:41:07 -0700
committerGitHub <noreply@github.com>2023-04-19 09:41:07 -0700
commit45fdba8fd96ed714cbc0120b0a10a4c5b63ea706 (patch)
tree4b6704fd38b3355c10fd643409e6281487c85156
parentfcf9db88230a54b980a354faae9c2905b3b29582 (diff)
Implement SL-19605 handling of batched material overrides in LargeGenericMessage (#177)
-rw-r--r--indra/newview/llgltfmateriallist.cpp56
1 files changed, 25 insertions, 31 deletions
diff --git a/indra/newview/llgltfmateriallist.cpp b/indra/newview/llgltfmateriallist.cpp
index 08ce43434f..151d7fa969 100644
--- a/indra/newview/llgltfmateriallist.cpp
+++ b/indra/newview/llgltfmateriallist.cpp
@@ -162,49 +162,43 @@ public:
LLSD message;
-
- sparam_t::const_iterator it = strings.begin();
- if (it != strings.end())
+ bool success = true;
+ for(const std::string& llsdRaw : strings)
{
- const std::string& llsdRaw = *it++;
std::istringstream llsdData(llsdRaw);
if (!LLSDSerialize::deserialize(message, llsdData, llsdRaw.length()))
{
LL_WARNS() << "LLGLTFMaterialOverrideDispatchHandler: Attempted to read parameter data into LLSD but failed:" << llsdRaw << LL_ENDL;
+ success = false;
+ continue;
}
- }
- else
- {
- // malformed message, nothing we can do to handle it
- LL_DEBUGS("GLTF") << "Empty message" << LL_ENDL;
- return false;
- }
-
- LLGLTFOverrideCacheEntry object_override;
- if (!object_override.fromLLSD(message))
- {
- // malformed message, nothing we can do to handle it
- LL_DEBUGS("GLTF") << "Message without id:" << message << LL_ENDL;
- return false;
- }
-
- // Cache the data
- {
- LL_DEBUGS("GLTF") << "material overrides cache" << LL_ENDL;
-
- LLViewerRegion * region = LLWorld::instance().getRegionFromHandle(object_override.mRegionHandle);
- if (region)
+ LLGLTFOverrideCacheEntry object_override;
+ if (!object_override.fromLLSD(message))
{
- region->cacheFullUpdateGLTFOverride(object_override);
+ // malformed message, nothing we can do to handle it
+ LL_DEBUGS("GLTF") << "Message without id:" << message << LL_ENDL;
+ success = false;
+ continue;
}
- else
+
+ // Cache the data
{
- LL_WARNS("GLTF") << "could not access region for material overrides message cache, region_handle: " << LL_ENDL;
+ LLViewerRegion * region = LLWorld::instance().getRegionFromHandle(object_override.mRegionHandle);
+
+ if (region)
+ {
+ region->cacheFullUpdateGLTFOverride(object_override);
+ }
+ else
+ {
+ LL_WARNS("GLTF") << "could not access region for material overrides message cache, region_handle: " << LL_ENDL;
+ }
}
+ applyData(object_override);
}
- applyData(object_override);
- return true;
+
+ return success;
}
void doSelectionCallbacks(const LLUUID& object_id, S32 side)