Sdk/GraphicsComponent: Allows to setup an offset to renderables

Former-commit-id: fd1f70010f950dd4a4194e049ddff317c0d8b4b9 [formerly 8fee96f11b7bef08351110bef74643fa0be8b17d] [formerly ec5d6ad819cf325dac0ae61d983003cf99c78aac [formerly 2610a17ba67d61080254ce4bc3e9176e315dfbe5]]
Former-commit-id: 7683be7fa9a565dc3fb59be401ecff5580a6de15 [formerly 80ac7628f5119f58cf4518b5b1a44aff5b6d6b20]
Former-commit-id: d1604af612715688e7b1fc451d8561f79e100541
This commit is contained in:
Lynix
2016-09-04 20:02:23 +02:00
parent c5ece59597
commit f2aa4e0e19
12 changed files with 34 additions and 19 deletions

View File

@@ -32,6 +32,7 @@ namespace Ndk
inline void AddToRenderQueue(Nz::AbstractRenderQueue* renderQueue) const;
inline void Attach(Nz::InstancedRenderableRef renderable, int renderOrder = 0);
inline void Attach(Nz::InstancedRenderableRef renderable, const Nz::Matrix4f& localMatrix, int renderOrder = 0);
inline void Clear();

View File

@@ -2,8 +2,10 @@
// This file is part of the "Nazara Development Kit"
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
#include <NDK/Components/GraphicsComponent.hpp>
#include <NDK/World.hpp>
#include <NDK/Systems/RenderSystem.hpp>
#include <algorithm>
#include "GraphicsComponent.hpp"
namespace Ndk
{
@@ -36,10 +38,13 @@ namespace Ndk
{
EnsureTransformMatrixUpdate();
Ndk::RenderSystem& renderSystem = m_entity->GetWorld()->GetSystem<Ndk::RenderSystem>();
for (const Renderable& object : m_renderables)
{
if (!object.dataUpdated)
{
object.data.transformMatrix = Nz::Matrix4f::ConcatenateAffine(renderSystem.GetCoordinateSystemMatrix(), Nz::Matrix4f::ConcatenateAffine(object.data.localMatrix, m_transformMatrix));
object.renderable->UpdateData(&object.data);
object.dataUpdated = true;
}
@@ -56,9 +61,15 @@ namespace Ndk
*/
inline void GraphicsComponent::Attach(Nz::InstancedRenderableRef renderable, int renderOrder)
{
return Attach(renderable, Nz::Matrix4f::Identity(), renderOrder);
}
inline void GraphicsComponent::Attach(Nz::InstancedRenderableRef renderable, const Nz::Matrix4f& localMatrix, int renderOrder)
{
m_renderables.emplace_back(m_transformMatrix);
Renderable& r = m_renderables.back();
r.data.localMatrix = localMatrix;
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));