Skip to content

Commit

Permalink
Sdk/GraphicsComponent: Add Detach method
Browse files Browse the repository at this point in the history
  • Loading branch information
SirLynix committed Jun 20, 2016
1 parent a4dd050 commit 341d348
Show file tree
Hide file tree
Showing 10 changed files with 56 additions and 12 deletions.
18 changes: 18 additions & 0 deletions SDK/include/NDK/Components/GraphicsComponent.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ namespace Ndk

inline void Attach(Nz::InstancedRenderableRef renderable, int renderOrder = 0);

inline void Detach(Nz::InstancedRenderableRef renderable);

inline void EnsureBoundingVolumeUpdate() const;
inline void EnsureTransformMatrixUpdate() const;

Expand Down Expand Up @@ -63,6 +65,22 @@ namespace Ndk
{
}

Renderable(Renderable&& renderable) noexcept :
data(std::move(renderable.data)),
renderable(std::move(renderable.renderable)),
dataUpdated(renderable.dataUpdated)
{
}

Renderable& operator=(Renderable&& r) noexcept
{
data = std::move(r.data);
dataUpdated = r.dataUpdated;
renderable = std::move(r.renderable);

return *this;
}

NazaraSlot(Nz::InstancedRenderable, OnInstancedRenderableInvalidateData, renderableInvalidationSlot);

mutable Nz::InstancedRenderable::InstanceData data;
Expand Down
13 changes: 13 additions & 0 deletions SDK/include/NDK/Components/GraphicsComponent.inl
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp

#include <algorithm>
#include "GraphicsComponent.hpp"

namespace Ndk
{
Expand Down Expand Up @@ -46,6 +47,18 @@ namespace Ndk
InvalidateBoundingVolume();
}

inline void GraphicsComponent::Detach(Nz::InstancedRenderableRef renderable)
{
for (auto it = m_renderables.begin(); it != m_renderables.end(); ++it)
{
if (it->renderable == renderable)
{
m_renderables.erase(it);
break;
}
}
}

inline void GraphicsComponent::EnsureBoundingVolumeUpdate() const
{
if (!m_boundingVolumeUpdated)
Expand Down
17 changes: 15 additions & 2 deletions include/Nazara/Graphics/InstancedRenderable.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,14 +55,27 @@ namespace Nz
struct InstanceData
{
InstanceData(Matrix4f& referenceMatrix) :
transformMatrix(referenceMatrix),
transformMatrix(&referenceMatrix),
flags(0)
{
}

InstanceData(InstanceData&& instanceData) noexcept = default;

InstanceData& operator=(InstanceData&& instanceData) noexcept
{
data = std::move(instanceData.data);
flags = instanceData.flags;
renderOrder = instanceData.renderOrder;
transformMatrix = instanceData.transformMatrix;
volume = instanceData.volume;

return *this;
}

std::vector<UInt8> data;
BoundingVolumef volume;
Matrix4f& transformMatrix;
Matrix4f* transformMatrix;
UInt32 flags;
int renderOrder;
};
Expand Down
2 changes: 1 addition & 1 deletion src/Nazara/Core/String.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ namespace Nz
*/

String::String(const std::string& string) :
String(string.c_str(), string.size())
String(string.data(), string.size())
{
}

Expand Down
2 changes: 1 addition & 1 deletion src/Nazara/Graphics/Billboard.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ namespace Nz
if (!m_material)
return;

renderQueue->AddBillboard(instanceData.renderOrder, m_material, instanceData.transformMatrix.GetTranslation(), m_size, m_sinCos, m_color);
renderQueue->AddBillboard(instanceData.renderOrder, m_material, instanceData.transformMatrix->GetTranslation(), m_size, m_sinCos, m_color);
}

/*
Expand Down
2 changes: 1 addition & 1 deletion src/Nazara/Graphics/InstancedRenderable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ namespace Nz
NazaraAssert(instanceData, "Invalid instance data");
NazaraUnused(instanceData);

instanceData->volume.Update(instanceData->transformMatrix);
instanceData->volume.Update(*instanceData->transformMatrix);
}

/*!
Expand Down
2 changes: 1 addition & 1 deletion src/Nazara/Graphics/Model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ namespace Nz
meshData.primitiveMode = mesh->GetPrimitiveMode();
meshData.vertexBuffer = mesh->GetVertexBuffer();

renderQueue->AddMesh(instanceData.renderOrder, material, meshData, mesh->GetAABB(), instanceData.transformMatrix);
renderQueue->AddMesh(instanceData.renderOrder, material, meshData, mesh->GetAABB(), *instanceData.transformMatrix);
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/Nazara/Graphics/SkeletalModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ namespace Nz
meshData.primitiveMode = mesh->GetPrimitiveMode();
meshData.vertexBuffer = SkinningManager::GetBuffer(mesh, &m_skeleton);

renderQueue->AddMesh(instanceData.renderOrder, material, meshData, m_skeleton.GetAABB(), instanceData.transformMatrix);
renderQueue->AddMesh(instanceData.renderOrder, material, meshData, m_skeleton.GetAABB(), *instanceData.transformMatrix);
}
}

Expand Down
8 changes: 4 additions & 4 deletions src/Nazara/Graphics/Sprite.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,19 +58,19 @@ namespace Nz
SparsePtr<Vector2f> texCoordPtr(&vertices[0].uv, sizeof(VertexStruct_XYZ_Color_UV));

*colorPtr++ = m_color;
*posPtr++ = instanceData->transformMatrix.Transform(Vector3f(0.f));
*posPtr++ = instanceData->transformMatrix->Transform(Vector3f(0.f));
*texCoordPtr++ = m_textureCoords.GetCorner(RectCorner_LeftTop);

*colorPtr++ = m_color;
*posPtr++ = instanceData->transformMatrix.Transform(m_size.x*Vector3f::Right());
*posPtr++ = instanceData->transformMatrix->Transform(m_size.x*Vector3f::Right());
*texCoordPtr++ = m_textureCoords.GetCorner(RectCorner_RightTop);

*colorPtr++ = m_color;
*posPtr++ = instanceData->transformMatrix.Transform(m_size.y*Vector3f::Down());
*posPtr++ = instanceData->transformMatrix->Transform(m_size.y*Vector3f::Down());
*texCoordPtr++ = m_textureCoords.GetCorner(RectCorner_LeftBottom);

*colorPtr++ = m_color;
*posPtr++ = instanceData->transformMatrix.Transform(m_size.x*Vector3f::Right() + m_size.y*Vector3f::Down());
*posPtr++ = instanceData->transformMatrix->Transform(m_size.x*Vector3f::Right() + m_size.y*Vector3f::Down());
*texCoordPtr++ = m_textureCoords.GetCorner(RectCorner_RightBottom);
}

Expand Down
2 changes: 1 addition & 1 deletion src/Nazara/Graphics/TextSprite.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ namespace Nz
Vector3f localPos = localVertex->position.x*Vector3f::Right() + localVertex->position.y*Vector3f::Down();
localPos *= m_scale;

*pos++ = instanceData->transformMatrix.Transform(localPos);
*pos++ = instanceData->transformMatrix->Transform(localPos);
*color++ = m_color * localVertex->color;
*uv++ = localVertex->uv;

Expand Down

0 comments on commit 341d348

Please sign in to comment.