Fix static model registering for rendering after streaming in even if disabled

This commit is contained in:
Wojciech Figat
2022-04-22 18:33:22 +02:00
parent 42bb4483b3
commit 4524edb899
20 changed files with 49 additions and 44 deletions

View File

@@ -180,28 +180,28 @@ void StaticModel::OnModelLoaded()
{
Entries.SetupIfInvalid(Model);
UpdateBounds();
if (_sceneRenderingKey == -1 && _scene)
if (_sceneRenderingKey == -1 && _scene && _isActiveInHierarchy && _isEnabled && !_residencyChangedModel)
{
// Register for rendering but once the model has any LOD loaded
if (Model->GetLoadedLODs() == 0)
{
_residencyChangedModel = Model;
Model->ResidencyChanged.Bind<StaticModel, &StaticModel::OnModelResidencyChanged>(this);
_residencyChangedModel->ResidencyChanged.Bind<StaticModel, &StaticModel::OnModelResidencyChanged>(this);
}
else
{
_sceneRenderingKey = GetSceneRendering()->AddActor(this);
GetSceneRendering()->AddActor(this, _sceneRenderingKey);
}
}
}
void StaticModel::OnModelResidencyChanged()
{
if (_sceneRenderingKey == -1 && _scene && Model && Model->GetLoadedLODs() > 0)
if (_sceneRenderingKey == -1 && _scene && Model && Model->GetLoadedLODs() > 0 && _residencyChangedModel)
{
_sceneRenderingKey = GetSceneRendering()->AddActor(this);
GetSceneRendering()->AddActor(this, _sceneRenderingKey);
_residencyChangedModel->ResidencyChanged.Unbind<StaticModel, &StaticModel::OnModelResidencyChanged>(this);
_residencyChangedModel = nullptr;
Model->ResidencyChanged.Unbind<StaticModel, &StaticModel::OnModelResidencyChanged>(this);
}
}
@@ -517,8 +517,10 @@ void StaticModel::OnTransformChanged()
void StaticModel::OnEnable()
{
if (_scene && Model && Model->IsLoaded() && Model->GetLoadedLODs() > 0 && _sceneRenderingKey == -1)
_sceneRenderingKey = GetSceneRendering()->AddActor(this);
if (_scene && _sceneRenderingKey == -1 && !_residencyChangedModel && Model && Model->IsLoaded() && Model->GetLoadedLODs() != 0)
{
GetSceneRendering()->AddActor(this, _sceneRenderingKey);
}
// Skip ModelInstanceActor (add to SceneRendering manually)
Actor::OnEnable();
@@ -533,9 +535,9 @@ void StaticModel::OnDisable()
{
GetSceneRendering()->RemoveActor(this, _sceneRenderingKey);
}
else if (_residencyChangedModel)
if (_residencyChangedModel)
{
_residencyChangedModel->ResidencyChanged.Unbind<StaticModel, &StaticModel::OnModelResidencyChanged>(this);
_residencyChangedModel = nullptr;
Model->ResidencyChanged.Unbind<StaticModel, &StaticModel::OnModelResidencyChanged>(this);
}
}