@@ -2251,13 +2251,14 @@ void LLSelectMgr::selectionRevertGLTFMaterials()
2251
2251
2252
2252
// Update material locally
2253
2253
objectp->setRenderMaterialID (te, asset_id, false /* wait for LLGLTFMaterialList update*/ );
2254
- objectp->setTEGLTFMaterialOverride (te, nodep->mSavedGLTFOverrideMaterials [te]);
2254
+ LLGLTFMaterial* material = new LLGLTFMaterial (*nodep->mSavedGLTFOverrideMaterials [te]);
2255
+ objectp->setTEGLTFMaterialOverride (te, material);
2255
2256
2256
2257
// Enqueue update to server
2257
2258
if (asset_id.notNull ())
2258
2259
{
2259
2260
// Restore overrides and base material
2260
- LLGLTFMaterialList::queueApply (objectp, te, asset_id, nodep-> mSavedGLTFOverrideMaterials [te] );
2261
+ LLGLTFMaterialList::queueApply (objectp, te, asset_id, material );
2261
2262
}
2262
2263
else
2263
2264
{
@@ -3151,15 +3152,20 @@ void LLSelectMgr::adjustTexturesByScale(bool send_to_sim, bool stretch)
3151
3152
material->mTextureTransform [i].mScale .set (scale_x, scale_y);
3152
3153
}
3153
3154
3154
- LLFetchedGLTFMaterial* render_mat = (LLFetchedGLTFMaterial*) tep->getGLTFRenderMaterial ();
3155
- if (render_mat )
3155
+ const LLGLTFMaterial* base_material = tep->getGLTFMaterial ();
3156
+ if (base_material )
3156
3157
{
3157
- render_mat->applyOverride (*material);
3158
+ LLGLTFMaterial* render_material = new LLFetchedGLTFMaterial ();
3159
+ *render_material = *base_material;
3160
+ render_material->applyOverride (*material);
3161
+ tep->setGLTFRenderMaterial (render_material);
3158
3162
}
3159
3163
3160
3164
if (send_to_sim)
3161
3165
{
3162
- LLGLTFMaterialList::queueModify (object, te_num, material);
3166
+ LLGLTFMaterial new_override;
3167
+ new_override = *material;
3168
+ LLGLTFMaterialList::queueModify (object, te_num, &new_override);
3163
3169
}
3164
3170
}
3165
3171
send = send_to_sim;
@@ -5957,12 +5963,12 @@ void LLSelectMgr::processObjectProperties(LLMessageSystem* msg, void** user_data
5957
5963
LLGLTFMaterial* old_override = node->getObject ()->getTE (i)->getGLTFMaterialOverride ();
5958
5964
if (old_override)
5959
5965
{
5960
- LLPointer<LLGLTFMaterial> mat = new LLGLTFMaterial (*old_override);
5961
- override_materials.push_back (mat );
5966
+ // saveGLTFMaterials will make a copy
5967
+ override_materials.emplace_back (old_override );
5962
5968
}
5963
5969
else
5964
5970
{
5965
- override_materials.push_back (nullptr );
5971
+ override_materials.emplace_back (nullptr );
5966
5972
}
5967
5973
}
5968
5974
// processObjectProperties does not include overrides so this
@@ -6870,16 +6876,22 @@ void LLSelectNode::saveGLTFMaterials(const uuid_vec_t& materials, const gltf_mat
6870
6876
mSavedGLTFMaterialIds .clear ();
6871
6877
mSavedGLTFOverrideMaterials .clear ();
6872
6878
6873
- for (uuid_vec_t ::const_iterator materials_it = materials.begin ();
6874
- materials_it != materials.end (); ++materials_it)
6879
+ for (const LLUUID& id : materials)
6875
6880
{
6876
- mSavedGLTFMaterialIds .push_back (*materials_it );
6881
+ mSavedGLTFMaterialIds .push_back (id );
6877
6882
}
6878
6883
6879
- for (gltf_materials_vec_t ::const_iterator mat_it = override_materials.begin ();
6880
- mat_it != override_materials.end (); ++mat_it)
6884
+ for (const LLPointer<LLGLTFMaterial> &mat : override_materials)
6881
6885
{
6882
- mSavedGLTFOverrideMaterials .push_back (*mat_it);
6886
+ if (mat.notNull ())
6887
+ {
6888
+ LLGLTFMaterial* copy = new LLGLTFMaterial (*mat);
6889
+ mSavedGLTFOverrideMaterials .emplace_back (copy);
6890
+ }
6891
+ else
6892
+ {
6893
+ mSavedGLTFOverrideMaterials .emplace_back (nullptr );
6894
+ }
6883
6895
}
6884
6896
}
6885
6897
}
0 commit comments