Graphics/InstancedRenderable: Add Clone method
This commit is contained in:
parent
2f0c62df20
commit
bc2f6f67cc
|
|
@ -109,6 +109,8 @@ Nazara Engine:
|
||||||
- Fixed SocketPoller not be able to recover from some errors (like invalid sockets and such)
|
- Fixed SocketPoller not be able to recover from some errors (like invalid sockets and such)
|
||||||
- ⚠️ Replaced currentBitPos and currentByte fields by [read|write][BitPos][Byte] to handle properly bit reading/writing.
|
- ⚠️ Replaced currentBitPos and currentByte fields by [read|write][BitPos][Byte] to handle properly bit reading/writing.
|
||||||
- InstancedRenderable::SetMaterial methods are now public.
|
- InstancedRenderable::SetMaterial methods are now public.
|
||||||
|
- Fixed Model copy constructor not copying materials
|
||||||
|
- ⚠️ Added InstancedRenderable::Clone() method
|
||||||
|
|
||||||
Nazara Development Kit:
|
Nazara Development Kit:
|
||||||
- Added ImageWidget (#139)
|
- Added ImageWidget (#139)
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,11 @@ namespace Ndk
|
||||||
|
|
||||||
renderQueue->AddMesh(0, m_material, m_meshData, Nz::Boxf::Zero(), transformMatrix, scissorRect);
|
renderQueue->AddMesh(0, m_material, m_meshData, Nz::Boxf::Zero(), transformMatrix, scissorRect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<InstancedRenderable> Clone() const override
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class OBBDebugRenderable : public DebugRenderable
|
class OBBDebugRenderable : public DebugRenderable
|
||||||
|
|
@ -94,6 +99,11 @@ namespace Ndk
|
||||||
|
|
||||||
renderQueue->AddMesh(0, m_material, m_meshData, Nz::Boxf::Zero(), transformMatrix, scissorRect);
|
renderQueue->AddMesh(0, m_material, m_meshData, Nz::Boxf::Zero(), transformMatrix, scissorRect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<InstancedRenderable> Clone() const override
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,8 @@ namespace Nz
|
||||||
|
|
||||||
void AddToRenderQueue(AbstractRenderQueue* renderQueue, const InstanceData& instanceData, const Recti& scissorRect) const override;
|
void AddToRenderQueue(AbstractRenderQueue* renderQueue, const InstanceData& instanceData, const Recti& scissorRect) const override;
|
||||||
|
|
||||||
|
std::unique_ptr<InstancedRenderable> Clone() const override;
|
||||||
|
|
||||||
inline const Color& GetColor() const;
|
inline const Color& GetColor() const;
|
||||||
inline float GetRotation() const;
|
inline float GetRotation() const;
|
||||||
inline const Vector2f& GetSize() const;
|
inline const Vector2f& GetSize() const;
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,8 @@ namespace Nz
|
||||||
|
|
||||||
virtual void AddToRenderQueue(AbstractRenderQueue* renderQueue, const InstanceData& instanceData, const Recti& scissorRect) const = 0;
|
virtual void AddToRenderQueue(AbstractRenderQueue* renderQueue, const InstanceData& instanceData, const Recti& scissorRect) const = 0;
|
||||||
|
|
||||||
|
virtual std::unique_ptr<InstancedRenderable> Clone() const = 0;
|
||||||
|
|
||||||
virtual bool Cull(const Frustumf& frustum, const InstanceData& instanceData) const;
|
virtual bool Cull(const Frustumf& frustum, const InstanceData& instanceData) const;
|
||||||
|
|
||||||
inline void EnsureBoundingVolumeUpdated() const;
|
inline void EnsureBoundingVolumeUpdated() const;
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,8 @@ namespace Nz
|
||||||
void AddToRenderQueue(AbstractRenderQueue* renderQueue, const InstanceData& instanceData, const Recti& scissorRect) const override;
|
void AddToRenderQueue(AbstractRenderQueue* renderQueue, const InstanceData& instanceData, const Recti& scissorRect) const override;
|
||||||
inline void AddToRenderQueue(AbstractRenderQueue* renderQueue, const Matrix4f& transformMatrix, int renderOrder = 0, const Recti& scissorRect = Recti(-1, -1, -1, -1)) const;
|
inline void AddToRenderQueue(AbstractRenderQueue* renderQueue, const Matrix4f& transformMatrix, int renderOrder = 0, const Recti& scissorRect = Recti(-1, -1, -1, -1)) const;
|
||||||
|
|
||||||
|
std::unique_ptr<InstancedRenderable> Clone() const override;
|
||||||
|
|
||||||
using InstancedRenderable::GetMaterial;
|
using InstancedRenderable::GetMaterial;
|
||||||
const MaterialRef& GetMaterial(const String& subMeshName) const;
|
const MaterialRef& GetMaterial(const String& subMeshName) const;
|
||||||
const MaterialRef& GetMaterial(std::size_t skinIndex, const String& subMeshName) const;
|
const MaterialRef& GetMaterial(std::size_t skinIndex, const String& subMeshName) const;
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,8 @@ namespace Nz
|
||||||
*
|
*
|
||||||
* \param model Model to copy
|
* \param model Model to copy
|
||||||
*/
|
*/
|
||||||
inline Model::Model(const Model& model)
|
inline Model::Model(const Model& model) :
|
||||||
|
InstancedRenderable(model)
|
||||||
{
|
{
|
||||||
SetMesh(model.m_mesh);
|
SetMesh(model.m_mesh);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ namespace Nz
|
||||||
void AddToRenderQueue(AbstractRenderQueue* renderQueue, const InstanceData& instanceData, const Recti& scissorRect) const override;
|
void AddToRenderQueue(AbstractRenderQueue* renderQueue, const InstanceData& instanceData, const Recti& scissorRect) const override;
|
||||||
void AdvanceAnimation(float elapsedTime);
|
void AdvanceAnimation(float elapsedTime);
|
||||||
|
|
||||||
SkeletalModel* Clone() const;
|
std::unique_ptr<InstancedRenderable> Clone() const override;
|
||||||
SkeletalModel* Create() const;
|
SkeletalModel* Create() const;
|
||||||
|
|
||||||
void EnableAnimation(bool animation);
|
void EnableAnimation(bool animation);
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,8 @@ namespace Nz
|
||||||
|
|
||||||
void AddToRenderQueue(AbstractRenderQueue* renderQueue, const InstanceData& instanceData, const Recti& scissorRect) const override;
|
void AddToRenderQueue(AbstractRenderQueue* renderQueue, const InstanceData& instanceData, const Recti& scissorRect) const override;
|
||||||
|
|
||||||
|
std::unique_ptr<InstancedRenderable> Clone() const override;
|
||||||
|
|
||||||
inline const Color& GetColor() const;
|
inline const Color& GetColor() const;
|
||||||
inline const Color& GetCornerColor(RectCorner corner) const;
|
inline const Color& GetCornerColor(RectCorner corner) const;
|
||||||
inline const Vector3f& GetOrigin() const;
|
inline const Vector3f& GetOrigin() const;
|
||||||
|
|
|
||||||
|
|
@ -34,11 +34,14 @@ namespace Nz
|
||||||
|
|
||||||
inline void Clear();
|
inline void Clear();
|
||||||
|
|
||||||
|
std::unique_ptr<InstancedRenderable> Clone() const override;
|
||||||
|
|
||||||
inline const Color& GetColor() const;
|
inline const Color& GetColor() const;
|
||||||
inline float GetScale() const;
|
inline float GetScale() const;
|
||||||
|
|
||||||
inline void SetColor(const Color& color);
|
inline void SetColor(const Color& color);
|
||||||
inline void SetDefaultMaterial();
|
inline void SetDefaultMaterial();
|
||||||
|
using InstancedRenderable::SetMaterial;
|
||||||
inline void SetMaterial(MaterialRef material);
|
inline void SetMaterial(MaterialRef material);
|
||||||
inline void SetMaterial(std::size_t skinIndex, MaterialRef material);
|
inline void SetMaterial(std::size_t skinIndex, MaterialRef material);
|
||||||
inline void SetScale(float scale);
|
inline void SetScale(float scale);
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,8 @@ namespace Nz
|
||||||
|
|
||||||
void AddToRenderQueue(AbstractRenderQueue* renderQueue, const InstanceData& instanceData, const Recti& scissorRect) const override;
|
void AddToRenderQueue(AbstractRenderQueue* renderQueue, const InstanceData& instanceData, const Recti& scissorRect) const override;
|
||||||
|
|
||||||
|
std::unique_ptr<InstancedRenderable> Clone() const override;
|
||||||
|
|
||||||
inline void DisableTile(const Vector2ui& tilePos);
|
inline void DisableTile(const Vector2ui& tilePos);
|
||||||
inline void DisableTiles();
|
inline void DisableTiles();
|
||||||
inline void DisableTiles(const Vector2ui* tilesPos, std::size_t tileCount);
|
inline void DisableTiles(const Vector2ui* tilesPos, std::size_t tileCount);
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,14 @@ namespace Nz
|
||||||
renderQueue->AddBillboards(instanceData.renderOrder, GetMaterial(), 1, scissorRect, &position, &m_size, &m_sinCos, &m_color);
|
renderQueue->AddBillboards(instanceData.renderOrder, GetMaterial(), 1, scissorRect, &position, &m_size, &m_sinCos, &m_color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Clones this billboard
|
||||||
|
*/
|
||||||
|
std::unique_ptr<InstancedRenderable> Billboard::Clone() const
|
||||||
|
{
|
||||||
|
return std::make_unique<Billboard>(*this);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* \brief Makes the bounding volume of this billboard
|
* \brief Makes the bounding volume of this billboard
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,6 @@ namespace Nz
|
||||||
* \param renderQueue Queue to be added
|
* \param renderQueue Queue to be added
|
||||||
* \param instanceData Data used for this instance
|
* \param instanceData Data used for this instance
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void Model::AddToRenderQueue(AbstractRenderQueue* renderQueue, const InstanceData& instanceData, const Recti& scissorRect) const
|
void Model::AddToRenderQueue(AbstractRenderQueue* renderQueue, const InstanceData& instanceData, const Recti& scissorRect) const
|
||||||
{
|
{
|
||||||
unsigned int submeshCount = m_mesh->GetSubMeshCount();
|
unsigned int submeshCount = m_mesh->GetSubMeshCount();
|
||||||
|
|
@ -69,6 +68,14 @@ namespace Nz
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Clones this model
|
||||||
|
*/
|
||||||
|
std::unique_ptr<InstancedRenderable> Model::Clone() const
|
||||||
|
{
|
||||||
|
return std::make_unique<Model>(*this);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Gets the material of the named submesh
|
* \brief Gets the material of the named submesh
|
||||||
* \return Pointer to the current material
|
* \return Pointer to the current material
|
||||||
|
|
|
||||||
|
|
@ -126,10 +126,9 @@ namespace Nz
|
||||||
* \brief Clones this skeletal model
|
* \brief Clones this skeletal model
|
||||||
* \return Pointer to newly allocated SkeletalModel
|
* \return Pointer to newly allocated SkeletalModel
|
||||||
*/
|
*/
|
||||||
|
std::unique_ptr<InstancedRenderable> SkeletalModel::Clone() const
|
||||||
SkeletalModel* SkeletalModel::Clone() const
|
|
||||||
{
|
{
|
||||||
return new SkeletalModel(*this);
|
return std::make_unique<SkeletalModel>(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
|
||||||
|
|
@ -21,17 +21,23 @@ namespace Nz
|
||||||
* \param renderQueue Queue to be added
|
* \param renderQueue Queue to be added
|
||||||
* \param instanceData Data for the instance
|
* \param instanceData Data for the instance
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void Sprite::AddToRenderQueue(AbstractRenderQueue* renderQueue, const InstanceData& instanceData, const Recti& scissorRect) const
|
void Sprite::AddToRenderQueue(AbstractRenderQueue* renderQueue, const InstanceData& instanceData, const Recti& scissorRect) const
|
||||||
{
|
{
|
||||||
const VertexStruct_XYZ_Color_UV* vertices = reinterpret_cast<const VertexStruct_XYZ_Color_UV*>(instanceData.data.data());
|
const VertexStruct_XYZ_Color_UV* vertices = reinterpret_cast<const VertexStruct_XYZ_Color_UV*>(instanceData.data.data());
|
||||||
renderQueue->AddSprites(instanceData.renderOrder, GetMaterial(), vertices, 1, scissorRect);
|
renderQueue->AddSprites(instanceData.renderOrder, GetMaterial(), vertices, 1, scissorRect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Clones this sprite
|
||||||
|
*/
|
||||||
|
std::unique_ptr<InstancedRenderable> Sprite::Clone() const
|
||||||
|
{
|
||||||
|
return std::make_unique<Sprite>(*this);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Makes the bounding volume of this text
|
* \brief Makes the bounding volume of this text
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void Sprite::MakeBoundingVolume() const
|
void Sprite::MakeBoundingVolume() const
|
||||||
{
|
{
|
||||||
Vector3f origin(m_origin.x, -m_origin.y, m_origin.z);
|
Vector3f origin(m_origin.x, -m_origin.y, m_origin.z);
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,14 @@ namespace Nz
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Clones this text sprite
|
||||||
|
*/
|
||||||
|
std::unique_ptr<InstancedRenderable> TextSprite::Clone() const
|
||||||
|
{
|
||||||
|
return std::make_unique<TextSprite>(*this);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Updates the text
|
* \brief Updates the text
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,14 @@ namespace Nz
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Clones this tilemap
|
||||||
|
*/
|
||||||
|
std::unique_ptr<InstancedRenderable> TileMap::Clone() const
|
||||||
|
{
|
||||||
|
return std::make_unique<TileMap>(*this);
|
||||||
|
}
|
||||||
|
|
||||||
void TileMap::MakeBoundingVolume() const
|
void TileMap::MakeBoundingVolume() const
|
||||||
{
|
{
|
||||||
Nz::Vector2f size = GetSize();
|
Nz::Vector2f size = GetSize();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue