Improve StaticModel to register for Scene Rendering once the model has any LOD streamed-in

This commit is contained in:
Wojciech Figat
2022-04-21 12:39:27 +02:00
parent 5345d1f685
commit b3d18f3b0e
4 changed files with 67 additions and 4 deletions

View File

@@ -6,6 +6,7 @@
#include "Engine/Graphics/RenderTask.h"
#include "Engine/Graphics/RenderView.h"
#include "Engine/Renderer/RenderList.h"
#include "Engine/Threading/Threading.h"
#if SCENE_RENDERING_USE_PROFILER
#include "Engine/Profiler/ProfilerCPU.h"
#endif
@@ -29,6 +30,7 @@ void ISceneRenderingListener::ListenSceneRendering(SceneRendering* scene)
void SceneRendering::Draw(RenderContext& renderContext)
{
ScopeLock lock(Locker);
auto& view = renderContext.View;
const BoundingFrustum frustum = view.CullingFrustum;
renderContext.List->Scenes.Add(this);
@@ -90,6 +92,7 @@ void SceneRendering::CollectPostFxVolumes(RenderContext& renderContext)
void SceneRendering::Clear()
{
ScopeLock lock(Locker);
for (auto* listener : _listeners)
{
listener->OnSceneRenderingClear(this);
@@ -104,6 +107,7 @@ void SceneRendering::Clear()
int32 SceneRendering::AddActor(Actor* a)
{
ScopeLock lock(Locker);
int32 key = 0;
// TODO: track removedCount and skip searching for free entry if there is none
for (; key < Actors.Count(); key++)
@@ -125,6 +129,7 @@ int32 SceneRendering::AddActor(Actor* a)
void SceneRendering::UpdateActor(Actor* a, int32 key)
{
ScopeLock lock(Locker);
if (Actors.IsEmpty())
return;
auto& e = Actors[key];
@@ -137,6 +142,7 @@ void SceneRendering::UpdateActor(Actor* a, int32 key)
void SceneRendering::RemoveActor(Actor* a, int32& key)
{
ScopeLock lock(Locker);
if (Actors.HasItems())
{
auto& e = Actors[key];