Sdk/GraphicsComponent: Allows to setup an offset to renderables
Former-commit-id: a5e9ceb3f30e79a0d3b96b6866a06441cbc0b463 [formerly 8af071cedec0a6aca00ff9c12d66e8a0817049c6] [formerly cd7e7040fd68dd5a74a0b458a3a305c251257b51 [formerly 0f9382c169a260d5fa34fe9b1ab64c3d19dbd385]] Former-commit-id: 774af2326cb64824f85835c83464bc19884005e1 [formerly 4b676844f6dd56940b4f503c6a943905ea8a54c3] Former-commit-id: 0673e4d4cd88c99d24e0e153a61d2726e2e2c039
This commit is contained in:
@@ -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();
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -133,7 +133,7 @@ namespace Ndk
|
||||
|
||||
Ndk::RenderSystem& renderSystem = m_entity->GetWorld()->GetSystem<Ndk::RenderSystem>();
|
||||
|
||||
m_transformMatrix = Nz::Matrix4f::ConcatenateAffine(renderSystem.GetCoordinateSystemMatrix(), m_entity->GetComponent<NodeComponent>().GetTransformMatrix());
|
||||
m_transformMatrix = m_entity->GetComponent<NodeComponent>().GetTransformMatrix();
|
||||
m_transformMatrixUpdated = true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user