summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorCosmic Linden <cosmic@lindenlab.com>2022-09-19 14:20:00 -0700
committerCosmic Linden <cosmic@lindenlab.com>2022-09-19 16:55:57 -0700
commit3e807dbc29371218e48691a5c1cfd2384bd74030 (patch)
treef6c6b8886f747aaa1fca9f59e3d4b8dca8a77bd5 /indra/newview
parent03df9545092cc3917e1c3f947ce2270d0ba31134 (diff)
SL-18001: Update GLTF material when receiving LLRenderMaterialParams on updated object
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llviewerobject.cpp31
-rw-r--r--indra/newview/llviewerobject.h1
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;