Add waiting for model to be loaded in SetMaterial

This commit is contained in:
Wojtek Figat
2022-07-23 15:33:04 +02:00
parent 0a1d8f6b3b
commit 8d6fa34108
6 changed files with 25 additions and 0 deletions

View File

@@ -11,6 +11,7 @@ ModelInstanceActor::ModelInstanceActor(const SpawnParams& params)
void ModelInstanceActor::SetEntries(const Array<ModelInstanceEntry>& value)
{
WaitForModelLoad();
bool anyChanged = false;
Entries.Resize(value.Count());
for (int32 i = 0; i < value.Count(); i++)
@@ -24,6 +25,7 @@ void ModelInstanceActor::SetEntries(const Array<ModelInstanceEntry>& value)
void ModelInstanceActor::SetMaterial(int32 entryIndex, MaterialBase* material)
{
WaitForModelLoad();
CHECK(entryIndex >= 0 && entryIndex < Entries.Count());
if (Entries[entryIndex].Material == material)
return;
@@ -34,6 +36,8 @@ void ModelInstanceActor::SetMaterial(int32 entryIndex, MaterialBase* material)
MaterialInstance* ModelInstanceActor::CreateAndSetVirtualMaterialInstance(int32 entryIndex)
{
WaitForModelLoad();
CHECK_RETURN(entryIndex >= 0 && entryIndex < Entries.Count(), nullptr);
auto material = Entries[entryIndex].Material.Get();
CHECK_RETURN(material && !material->WaitForLoaded(), nullptr);
const auto result = material->CreateVirtualInstance();
@@ -43,6 +47,10 @@ MaterialInstance* ModelInstanceActor::CreateAndSetVirtualMaterialInstance(int32
return result;
}
void ModelInstanceActor::WaitForModelLoad()
{
}
void ModelInstanceActor::OnLayerChanged()
{
if (_sceneRenderingKey != -1)