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

@@ -354,7 +354,7 @@ void Camera::OnEnable()
{
Cameras.Add(this);
#if USE_EDITOR
_sceneRenderingKey = GetSceneRendering()->AddActor(this);
GetSceneRendering()->AddActor(this, _sceneRenderingKey);
#endif
// Base

View File

@@ -122,7 +122,7 @@ bool Decal::IntersectsItself(const Ray& ray, float& distance, Vector3& normal)
void Decal::OnEnable()
{
_sceneRenderingKey = GetSceneRendering()->AddActor(this);
GetSceneRendering()->AddActor(this, _sceneRenderingKey);
#if USE_EDITOR
GetSceneRendering()->AddViewportIcon(this);
#endif

View File

@@ -68,7 +68,7 @@ bool DirectionalLight::IntersectsItself(const Ray& ray, float& distance, Vector3
void DirectionalLight::OnEnable()
{
_sceneRenderingKey = GetSceneRendering()->AddActor(this);
GetSceneRendering()->AddActor(this, _sceneRenderingKey);
#if USE_EDITOR
GetSceneRendering()->AddViewportIcon(this);
#endif

View File

@@ -202,7 +202,7 @@ bool EnvironmentProbe::IntersectsItself(const Ray& ray, float& distance, Vector3
void EnvironmentProbe::OnEnable()
{
_sceneRenderingKey = GetSceneRendering()->AddActor(this);
GetSceneRendering()->AddActor(this, _sceneRenderingKey);
#if USE_EDITOR
GetSceneRendering()->AddViewportIcon(this);
#endif

View File

@@ -205,7 +205,7 @@ void ExponentialHeightFog::DrawFog(GPUContext* context, RenderContext& renderCon
void ExponentialHeightFog::OnEnable()
{
_sceneRenderingKey = GetSceneRendering()->AddActor(this);
GetSceneRendering()->AddActor(this, _sceneRenderingKey);
#if USE_EDITOR
GetSceneRendering()->AddViewportIcon(this);
#endif

View File

@@ -39,7 +39,7 @@ void ModelInstanceActor::OnLayerChanged()
void ModelInstanceActor::OnEnable()
{
_sceneRenderingKey = GetSceneRendering()->AddActor(this);
GetSceneRendering()->AddActor(this, _sceneRenderingKey);
// Base
Actor::OnEnable();

View File

@@ -71,7 +71,7 @@ void PointLight::UpdateBounds()
void PointLight::OnEnable()
{
_sceneRenderingKey = GetSceneRendering()->AddActor(this);
GetSceneRendering()->AddActor(this, _sceneRenderingKey);
#if USE_EDITOR
GetSceneRendering()->AddViewportIcon(this);
#endif

View File

@@ -239,7 +239,7 @@ void Sky::EndPlay()
void Sky::OnEnable()
{
_sceneRenderingKey = GetSceneRendering()->AddActor(this);
GetSceneRendering()->AddActor(this, _sceneRenderingKey);
#if USE_EDITOR
GetSceneRendering()->AddViewportIcon(this);
#endif

View File

@@ -171,7 +171,7 @@ bool SkyLight::HasContentLoaded() const
void SkyLight::OnEnable()
{
_sceneRenderingKey = GetSceneRendering()->AddActor(this);
GetSceneRendering()->AddActor(this, _sceneRenderingKey);
#if USE_EDITOR
GetSceneRendering()->AddViewportIcon(this);
#endif

View File

@@ -122,7 +122,7 @@ void Skybox::ApplySky(GPUContext* context, RenderContext& renderContext, const M
void Skybox::OnEnable()
{
_sceneRenderingKey = GetSceneRendering()->AddActor(this);
GetSceneRendering()->AddActor(this, _sceneRenderingKey);
#if USE_EDITOR
GetSceneRendering()->AddViewportIcon(this);
#endif

View File

@@ -119,7 +119,7 @@ void SpotLight::UpdateBounds()
void SpotLight::OnEnable()
{
_sceneRenderingKey = GetSceneRendering()->AddActor(this);
GetSceneRendering()->AddActor(this, _sceneRenderingKey);
#if USE_EDITOR
GetSceneRendering()->AddViewportIcon(this);
#endif

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);
}
}