SDK/GraphicsComponent: Makes component watch over renderable destruction

Allows to use persistent (not using the internal counter)
InstancedRenderable


Former-commit-id: c0963eb7902dedad3c5eb139ac23a25a57a15487 [formerly 0ec3ca3b783c1c9fac45ff0c015bbc254ce4b375] [formerly f86b41d43bf8f77c2b0e8a91b0e4cd0cdc1a9a54 [formerly 2d454f93ced586e04f7d040bda2986fe631d64e4]]
Former-commit-id: 58c52cff93c0461f31b65346a4af90b135a7fed3 [formerly 5e20488509bc66e245fa85c478b32e6251bf3a0f]
Former-commit-id: 84fe715cc064885caa8a1c885bc2ef458bc08337
This commit is contained in:
Lynix 2016-08-11 01:07:46 +02:00
parent a0547ae576
commit 039447c127
2 changed files with 11 additions and 1 deletions

View File

@ -77,20 +77,29 @@ namespace Ndk
renderable(std::move(renderable.renderable)),
dataUpdated(renderable.dataUpdated),
renderableInvalidationSlot(std::move(renderable.renderableInvalidationSlot)),
renderableReleaseSlot(std::move(renderable.renderableReleaseSlot))
{
}
~Renderable()
{
// Disconnect release slot before releasing instanced renderable reference
renderableReleaseSlot.Disconnect();
}
Renderable& operator=(Renderable&& r) noexcept
{
data = std::move(r.data);
dataUpdated = r.dataUpdated;
renderable = std::move(r.renderable);
renderableInvalidationSlot = std::move(r.renderableInvalidationSlot);
renderableReleaseSlot = std::move(r.renderableReleaseSlot);
return *this;
}
NazaraSlot(Nz::InstancedRenderable, OnInstancedRenderableInvalidateData, renderableInvalidationSlot);
NazaraSlot(Nz::InstancedRenderable, OnInstancedRenderableRelease, renderableReleaseSlot);
mutable Nz::InstancedRenderable::InstanceData data;
Nz::InstancedRenderableRef renderable;

View File

@ -42,7 +42,8 @@ namespace Ndk
Renderable& r = m_renderables.back();
r.data.renderOrder = renderOrder;
r.renderable = std::move(renderable);
r.renderableInvalidationSlot.Connect(r.renderable->OnInstancedRenderableInvalidateData, std::bind(&GraphicsComponent::InvalidateRenderableData, this, std::placeholders::_1, std::placeholders::_2, m_renderables.size()-1));
r.renderableInvalidationSlot.Connect(r.renderable->OnInstancedRenderableInvalidateData, std::bind(&GraphicsComponent::InvalidateRenderableData, this, std::placeholders::_1, std::placeholders::_2, m_renderables.size() - 1));
r.renderableReleaseSlot.Connect(r.renderable->OnInstancedRenderableRelease, this, &GraphicsComponent::Detach);
InvalidateBoundingVolume();
}