From 4d136af7dd3de92a5685a0e000eb0d978d9c5737 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Fri, 16 Jul 2021 17:13:44 +0200 Subject: [PATCH] Add culling and render mask check for models rendered via Custom Actors list --- Source/Engine/Graphics/RenderTask.cpp | 13 ++++++++----- Source/Engine/Level/Actors/AnimatedModel.cpp | 5 ++++- Source/Engine/Level/Actors/StaticModel.cpp | 5 ++++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Source/Engine/Graphics/RenderTask.cpp b/Source/Engine/Graphics/RenderTask.cpp index f3edb4892..c5cd370cf 100644 --- a/Source/Engine/Graphics/RenderTask.cpp +++ b/Source/Engine/Graphics/RenderTask.cpp @@ -251,9 +251,10 @@ void SceneRenderTask::CollectPostFxVolumes(RenderContext& renderContext) } if ((ActorsSource & ActorsSources::CustomActors) != 0) { - for (int32 i = 0; i < CustomActors.Count(); i++) + for (auto a : CustomActors) { - if (auto* postFxVolume = dynamic_cast(CustomActors[i])) + auto* postFxVolume = dynamic_cast(a); + if (postFxVolume && a->GetIsActive()) { postFxVolume->Collect(renderContext); } @@ -266,10 +267,12 @@ void SceneRenderTask::OnCollectDrawCalls(RenderContext& renderContext) // Draw actors (collect draw calls) if ((ActorsSource & ActorsSources::CustomActors) != 0) { - for (int32 i = 0; i < CustomActors.Count(); i++) + for (auto a : CustomActors) { - if (CustomActors[i] && CustomActors[i]->GetIsActive()) - CustomActors[i]->DrawHierarchy(renderContext); + if (a && a->GetIsActive()) + { + a->DrawHierarchy(renderContext); + } } } if ((ActorsSource & ActorsSources::Scenes) != 0) diff --git a/Source/Engine/Level/Actors/AnimatedModel.cpp b/Source/Engine/Level/Actors/AnimatedModel.cpp index 7b85d8e72..2f1940d1f 100644 --- a/Source/Engine/Level/Actors/AnimatedModel.cpp +++ b/Source/Engine/Level/Actors/AnimatedModel.cpp @@ -623,7 +623,10 @@ void AnimatedModel::Draw(RenderContext& renderContext) void AnimatedModel::DrawGeneric(RenderContext& renderContext) { - Draw(renderContext); + if (renderContext.View.RenderLayersMask.Mask & GetLayerMask() && renderContext.View.CullingFrustum.Intersects(_box)) + { + Draw(renderContext); + } } #if USE_EDITOR diff --git a/Source/Engine/Level/Actors/StaticModel.cpp b/Source/Engine/Level/Actors/StaticModel.cpp index 1f8b29020..71996575e 100644 --- a/Source/Engine/Level/Actors/StaticModel.cpp +++ b/Source/Engine/Level/Actors/StaticModel.cpp @@ -268,7 +268,10 @@ void StaticModel::Draw(RenderContext& renderContext) void StaticModel::DrawGeneric(RenderContext& renderContext) { - Draw(renderContext); + if (renderContext.View.RenderLayersMask.Mask & GetLayerMask() && renderContext.View.CullingFrustum.Intersects(_box)) + { + Draw(renderContext); + } } bool StaticModel::IntersectsItself(const Ray& ray, float& distance, Vector3& normal)