Optimize asset references to support direct registration to reduce Delegate memory allocations and overhead

This commit is contained in:
Wojtek Figat
2025-06-08 00:58:15 +02:00
parent bffb175a9b
commit 73c30d3d89
26 changed files with 365 additions and 141 deletions

View File

@@ -27,16 +27,13 @@ AnimatedModel::AnimatedModel(const SpawnParams& params)
, _counter(0)
, _lastMinDstSqr(MAX_Real)
, _lastUpdateFrame(0)
, SkinnedModel(this)
, AnimationGraph(this)
{
_drawCategory = SceneRendering::SceneDrawAsync;
GraphInstance.Object = this;
_box = BoundingBox(Vector3::Zero);
_sphere = BoundingSphere(Vector3::Zero, 0.0f);
SkinnedModel.Changed.Bind<AnimatedModel, &AnimatedModel::OnSkinnedModelChanged>(this);
SkinnedModel.Loaded.Bind<AnimatedModel, &AnimatedModel::OnSkinnedModelLoaded>(this);
AnimationGraph.Changed.Bind<AnimatedModel, &AnimatedModel::OnGraphChanged>(this);
AnimationGraph.Loaded.Bind<AnimatedModel, &AnimatedModel::OnGraphLoaded>(this);
}
AnimatedModel::~AnimatedModel()
@@ -889,6 +886,26 @@ void AnimatedModel::OnGraphLoaded()
SyncParameters();
}
void AnimatedModel::OnAssetChanged(Asset* asset, void* caller)
{
if (caller == &SkinnedModel)
OnSkinnedModelChanged();
else if (caller == &AnimationGraph)
OnGraphChanged();
}
void AnimatedModel::OnAssetLoaded(Asset* asset, void* caller)
{
if (caller == &SkinnedModel)
OnSkinnedModelLoaded();
else if (caller == &AnimationGraph)
OnGraphLoaded();
}
void AnimatedModel::OnAssetUnloaded(Asset* asset, void* caller)
{
}
bool AnimatedModel::HasContentLoaded() const
{
return (SkinnedModel == nullptr || SkinnedModel->IsLoaded()) && Entries.HasContentLoaded();