Optimize Scene Rendering (cache drawable bounds and layers for culling with less cache misses)

This commit is contained in:
Wojtek Figat
2021-06-28 22:04:25 +02:00
parent e61ebaa71b
commit d7332509f7
26 changed files with 335 additions and 130 deletions

View File

@@ -311,6 +311,8 @@ void ParticleEffect::UpdateBounds()
_box = bounds;
BoundingSphere::FromBox(bounds, _sphere);
if (_sceneRenderingKey != -1)
GetSceneRendering()->UpdateGeometry(this, _sceneRenderingKey);
}
void ParticleEffect::Sync()
@@ -515,6 +517,12 @@ void ParticleEffect::OnDebugDrawSelected()
#endif
void ParticleEffect::OnLayerChanged()
{
if (_sceneRenderingKey != -1)
GetSceneRendering()->UpdateGeometry(this, _sceneRenderingKey);
}
void ParticleEffect::Serialize(SerializeStream& stream, const void* otherObj)
{
// Base
@@ -691,7 +699,7 @@ void ParticleEffect::EndPlay()
void ParticleEffect::OnEnable()
{
GetScene()->Ticking.Update.AddTick<ParticleEffect, &ParticleEffect::Update>(this);
GetSceneRendering()->AddGeometry(this);
_sceneRenderingKey = GetSceneRendering()->AddGeometry(this);
#if USE_EDITOR
GetSceneRendering()->AddViewportIcon(this);
GetScene()->Ticking.Update.AddTickExecuteInEditor<ParticleEffect, &ParticleEffect::UpdateExecuteInEditor>(this);
@@ -707,7 +715,7 @@ void ParticleEffect::OnDisable()
GetScene()->Ticking.Update.RemoveTickExecuteInEditor(this);
GetSceneRendering()->RemoveViewportIcon(this);
#endif
GetSceneRendering()->RemoveGeometry(this);
GetSceneRendering()->RemoveGeometry(this, _sceneRenderingKey);
GetScene()->Ticking.Update.RemoveTick(this);
// Base