Optimize Scene Rendering (cache drawable bounds and layers for culling with less cache misses)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ private:
|
||||
MaterialParameter* _paramImageMAD = nullptr;
|
||||
MaterialParameter* _paramColor = nullptr;
|
||||
AssetReference<Asset> _quadModel;
|
||||
int32 _sceneRenderingKey = -1;
|
||||
|
||||
public:
|
||||
|
||||
@@ -97,6 +98,7 @@ public:
|
||||
void DrawGeneric(RenderContext& renderContext) override;
|
||||
void Serialize(SerializeStream& stream, const void* otherObj) override;
|
||||
void Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) override;
|
||||
void OnLayerChanged() override;
|
||||
void OnEndPlay() override;
|
||||
|
||||
protected:
|
||||
|
||||
@@ -329,6 +329,8 @@ void TextRender::UpdateLayout()
|
||||
_localBox = box;
|
||||
BoundingBox::Transform(_localBox, _world, _box);
|
||||
BoundingSphere::FromBox(_box, _sphere);
|
||||
if (_sceneRenderingKey != -1)
|
||||
GetSceneRendering()->UpdateGeometry(this, _sceneRenderingKey);
|
||||
}
|
||||
|
||||
bool TextRender::HasContentLoaded() const
|
||||
@@ -421,6 +423,12 @@ void TextRender::OnDebugDrawSelected()
|
||||
|
||||
#endif
|
||||
|
||||
void TextRender::OnLayerChanged()
|
||||
{
|
||||
if (_sceneRenderingKey != -1)
|
||||
GetSceneRendering()->UpdateGeometry(this, _sceneRenderingKey);
|
||||
}
|
||||
|
||||
bool TextRender::IntersectsItself(const Ray& ray, float& distance, Vector3& normal)
|
||||
{
|
||||
#if USE_PRECISE_MESH_INTERSECTS
|
||||
@@ -480,8 +488,6 @@ void TextRender::Deserialize(DeserializeStream& stream, ISerializeModifier* modi
|
||||
|
||||
void TextRender::OnEnable()
|
||||
{
|
||||
GetSceneRendering()->AddGeometry(this);
|
||||
|
||||
// Base
|
||||
Actor::OnEnable();
|
||||
|
||||
@@ -489,6 +495,7 @@ void TextRender::OnEnable()
|
||||
{
|
||||
UpdateLayout();
|
||||
}
|
||||
_sceneRenderingKey = GetSceneRendering()->AddGeometry(this);
|
||||
}
|
||||
|
||||
void TextRender::OnDisable()
|
||||
@@ -498,7 +505,7 @@ void TextRender::OnDisable()
|
||||
_isLocalized = false;
|
||||
Localization::LocalizationChanged.Unbind<TextRender, &TextRender::UpdateLayout>(this);
|
||||
}
|
||||
GetSceneRendering()->RemoveGeometry(this);
|
||||
GetSceneRendering()->RemoveGeometry(this, _sceneRenderingKey);
|
||||
|
||||
// Base
|
||||
Actor::OnDisable();
|
||||
@@ -512,4 +519,6 @@ void TextRender::OnTransformChanged()
|
||||
_transform.GetWorld(_world);
|
||||
BoundingBox::Transform(_localBox, _world, _box);
|
||||
BoundingSphere::FromBox(_box, _sphere);
|
||||
if (_sceneRenderingKey != -1)
|
||||
GetSceneRendering()->UpdateGeometry(this, _sceneRenderingKey);
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ private:
|
||||
Color _color;
|
||||
TextLayoutOptions _layoutOptions;
|
||||
int32 _size;
|
||||
int32 _sceneRenderingKey = -1;
|
||||
|
||||
BoundingBox _localBox;
|
||||
Matrix _world;
|
||||
@@ -169,6 +170,7 @@ public:
|
||||
#if USE_EDITOR
|
||||
void OnDebugDrawSelected() override;
|
||||
#endif
|
||||
void OnLayerChanged() override;
|
||||
bool IntersectsItself(const Ray& ray, float& distance, Vector3& normal) override;
|
||||
void Serialize(SerializeStream& stream, const void* otherObj) override;
|
||||
void Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) override;
|
||||
|
||||
Reference in New Issue
Block a user