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

@@ -170,6 +170,12 @@ void SpriteRender::Deserialize(DeserializeStream& stream, ISerializeModifier* mo
_paramColor->SetValue(_color);
}
void SpriteRender::OnLayerChanged()
{
if (_sceneRenderingKey != -1)
GetSceneRendering()->UpdateGeometry(this, _sceneRenderingKey);
}
void SpriteRender::OnEndPlay()
{
// Base
@@ -187,7 +193,7 @@ void SpriteRender::OnEndPlay()
void SpriteRender::OnEnable()
{
GetSceneRendering()->AddGeometry(this);
_sceneRenderingKey = GetSceneRendering()->AddGeometry(this);
// Base
Actor::OnEnable();
@@ -195,7 +201,7 @@ void SpriteRender::OnEnable()
void SpriteRender::OnDisable()
{
GetSceneRendering()->RemoveGeometry(this);
GetSceneRendering()->RemoveGeometry(this, _sceneRenderingKey);
// Base
Actor::OnDisable();
@@ -211,4 +217,6 @@ void SpriteRender::OnTransformChanged()
_transform.GetWorld(world);
BoundingSphere::Transform(localSphere, world, _sphere);
BoundingBox::FromSphere(_sphere, _box);
if (_sceneRenderingKey != -1)
GetSceneRendering()->UpdateGeometry(this, _sceneRenderingKey);
}