Phase 2 of fix for SL-18458 material overrides not being cached properly

master
Brad Linden 2023-03-21 13:40:00 -07:00
parent b30cde2a05
commit 6e6bac6b40
3 changed files with 22 additions and 3 deletions

View File

@ -46,6 +46,8 @@ public:
// media_tex - optional media texture that may override the base color texture
void bind(LLViewerTexture* media_tex = nullptr);
bool isFetching() const { return mFetching; }
// Textures used for fetching/rendering
LLPointer<LLViewerFetchedTexture> mBaseColorTexture;
LLPointer<LLViewerFetchedTexture> mNormalTexture;

View File

@ -157,8 +157,8 @@ public:
// receive override data from simulator via LargeGenericMessage
// message should have:
// object_id - UUID of LLViewerObject
// side - S32 index of texture entry
// gltf_json - String of GLTF json for override data
// sides - array of S32 indices of texture entries
// gltf_json - array of corresponding Strings of GLTF json for override data
LLSD message;
@ -380,11 +380,22 @@ void LLGLTFMaterialList::applyQueuedOverrides(LLViewerObject* obj)
{ // object doesn't have its base GLTF material yet, don't apply override (yet)
return;
}
obj->setTEGLTFMaterialOverride(i, overrides[i]);
S32 status = obj->setTEGLTFMaterialOverride(i, overrides[i]);
if (status == TEM_CHANGE_NONE)
{
// can't apply this yet, since failure to change the material override
// probably means the base material is still being fetched. leave in
// the queue for later
return;
}
if (obj->getTE(i)->isSelected())
{
handle_gltf_override_message.doSelectionCallbacks(id, i);
}
// success!
overrides[i] = nullptr;
}
}

View File

@ -5375,6 +5375,12 @@ S32 LLViewerObject::setTEGLTFMaterialOverride(U8 te, LLGLTFMaterial* override_ma
return retval;
}
if(src_mat->isFetching())
{
// if still fetching, we need to wait until it is done and try again
return retval;
}
tep->setGLTFMaterialOverride(override_mat);
// if override mat exists, we must also have a source mat