diff options
author | Cosmic Linden <cosmic@lindenlab.com> | 2022-09-19 14:20:00 -0700 |
---|---|---|
committer | Cosmic Linden <cosmic@lindenlab.com> | 2022-09-19 16:55:57 -0700 |
commit | 3e807dbc29371218e48691a5c1cfd2384bd74030 (patch) | |
tree | f6c6b8886f747aaa1fca9f59e3d4b8dca8a77bd5 | |
parent | 03df9545092cc3917e1c3f947ce2270d0ba31134 (diff) |
SL-18001: Update GLTF material when receiving LLRenderMaterialParams on updated object
-rw-r--r-- | indra/newview/llviewerobject.cpp | 31 | ||||
-rw-r--r-- | indra/newview/llviewerobject.h | 1 |
2 files changed, 32 insertions, 0 deletions
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index bdc47e0c50..5829ccb6d8 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -6221,6 +6221,14 @@ void LLViewerObject::parameterChanged(U16 param_type, LLNetworkData* data, BOOL LL_WARNS() << "Failed to send object extra parameters: " << param_type << LL_ENDL; } } + else + { + if (param_type == LLNetworkData::PARAMS_RENDER_MATERIAL) + { + const LLRenderMaterialParams* params = in_use ? (LLRenderMaterialParams*)getParameterEntry(LLNetworkData::PARAMS_RENDER_MATERIAL) : nullptr; + setRenderMaterialIDs(params, local_origin); + } + } } void LLViewerObject::setDrawableState(U32 state, BOOL recursive) @@ -7083,6 +7091,29 @@ void LLViewerObject::setRenderMaterialID(U8 te, const LLUUID& id) } } +void LLViewerObject::setRenderMaterialIDs(const LLRenderMaterialParams* material_params, bool local_origin) +{ + if (!local_origin) + { + const S32 num_tes = llmin((S32)getNumTEs(), (S32)getNumFaces()); // avatars have TEs but no faces + for (S32 te = 0; te < num_tes; ++te) + { + const LLUUID& id = material_params ? material_params->getMaterial(te) : LLUUID::null; + if (id.notNull()) + { + getTE(te)->setGLTFMaterial(gGLTFMaterialList.getMaterial(id)); + setHasRenderMaterialParams(true); + } + else + { + getTE(te)->setGLTFMaterial(nullptr); + } + } + faceMappingChanged(); + gPipeline.markTextured(mDrawable); + } +} + class ObjectPhysicsProperties : public LLHTTPNode { public: diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index 109c96dc9c..680cfb9639 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -185,6 +185,7 @@ public: const LLUUID& getRenderMaterialID(U8 te) const; void setRenderMaterialID(U8 te, const LLUUID& id); + void setRenderMaterialIDs(const LLRenderMaterialParams* material_params, bool local_origin); virtual BOOL isHUDAttachment() const { return FALSE; } virtual BOOL isTempAttachment() const; |