Graphics/Renderable: Add InstanceData

Former-commit-id: f30f011ae91a445d5b22f33150a88bbda218950c
This commit is contained in:
Lynix
2015-06-11 14:14:11 +02:00
parent 6f2f8d6390
commit 48a54dfa5c
13 changed files with 195 additions and 37 deletions

View File

@@ -6,16 +6,48 @@
namespace Ndk
{
inline void GraphicsComponent::AddToRenderQueue(NzAbstractRenderQueue* renderQueue, const NzMatrix4f& transformMatrix) const
inline GraphicsComponent::GraphicsComponent(const GraphicsComponent& graphicsComponent) :
Component(graphicsComponent),
m_transformMatrix(graphicsComponent.m_transformMatrix),
m_transformMatrixUpdated(graphicsComponent.m_transformMatrixUpdated)
{
m_renderables.reserve(graphicsComponent.m_renderables.size());
for (const Renderable& r : graphicsComponent.m_renderables)
Attach(r.renderable);
}
inline void GraphicsComponent::AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const
{
EnsureTransformMatrixUpdate();
for (const Renderable& object : m_renderables)
object.renderable->AddToRenderQueue(renderQueue, transformMatrix);
{
if (!object.dataUpdated)
{
object.renderable->UpdateData(&object.data);
object.dataUpdated = true;
}
object.renderable->AddToRenderQueue(renderQueue, object.data);
}
}
inline void GraphicsComponent::Attach(NzRenderableRef renderable)
{
m_renderables.resize(m_renderables.size() + 1);
m_renderables.emplace_back(m_transformMatrix);
Renderable& r = m_renderables.back();
r.renderable = std::move(renderable);
r.renderableInvalidationSlot.Connect(r.renderable->OnRenderableInvalidateInstanceData, std::bind(InvalidateRenderableData, this, std::placeholders::_1, std::placeholders::_2, m_renderables.size()-1));
}
inline void GraphicsComponent::EnsureTransformMatrixUpdate() const
{
if (!m_transformMatrixUpdated)
UpdateTransformMatrix();
}
inline void GraphicsComponent::InvalidateTransformMatrix()
{
m_transformMatrixUpdated = false;
}
}