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

@@ -895,3 +895,9 @@ void AnimatedModel::OnTransformChanged()
if (_sceneRenderingKey != -1)
GetSceneRendering()->UpdateActor(this, _sceneRenderingKey);
}
void AnimatedModel::WaitForModelLoad()
{
if (SkinnedModel)
SkinnedModel->WaitForLoaded();
}

View File

@@ -376,4 +376,5 @@ protected:
void OnDisable() override;
void OnActiveInTreeChanged() override;
void OnTransformChanged() override;
void WaitForModelLoad() override;
};

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)

View File

@@ -81,6 +81,9 @@ public:
return false;
}
protected:
virtual void WaitForModelLoad();
public:
// [Actor]
void OnLayerChanged() override;

View File

@@ -544,3 +544,9 @@ void StaticModel::OnDisable()
_residencyChangedModel = nullptr;
}
}
void StaticModel::WaitForModelLoad()
{
if (Model)
Model->WaitForLoaded();
}

View File

@@ -187,4 +187,5 @@ protected:
void OnTransformChanged() override;
void OnEnable() override;
void OnDisable() override;
void WaitForModelLoad() override;
};