Fix static model registering for rendering after streaming in even if disabled
This commit is contained in:
@@ -354,7 +354,7 @@ void Camera::OnEnable()
|
||||
{
|
||||
Cameras.Add(this);
|
||||
#if USE_EDITOR
|
||||
_sceneRenderingKey = GetSceneRendering()->AddActor(this);
|
||||
GetSceneRendering()->AddActor(this, _sceneRenderingKey);
|
||||
#endif
|
||||
|
||||
// Base
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -39,7 +39,7 @@ void ModelInstanceActor::OnLayerChanged()
|
||||
|
||||
void ModelInstanceActor::OnEnable()
|
||||
{
|
||||
_sceneRenderingKey = GetSceneRendering()->AddActor(this);
|
||||
GetSceneRendering()->AddActor(this, _sceneRenderingKey);
|
||||
|
||||
// Base
|
||||
Actor::OnEnable();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user