SDK/GraphicsComponent: Makes component watch over renderable destruction
Allows to use persistent (not using the internal counter) InstancedRenderable Former-commit-id: 84a84f6e175dd7afa69bfa68c0efdbae8023ceec [formerly 3239c8fe9289c5773b57b4026fa165a40fb594be] [formerly 3840928f4c52a72f6813f1e8480f8a9cb62da9a1 [formerly 3f5eb580f5cb8b0b80815780282bc08f06110f61]] Former-commit-id: 44f423605454c90a4fc3b186ec0e1da4073c7cbb [formerly a6a0affa8cd3e53553c09f3458ac8a40e316389b] Former-commit-id: ca295a898fe287407a6c9bdf1f1f72b040ff1335
This commit is contained in:
parent
7c2add0a65
commit
9bf253f09d
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue