Made SceneNodes non-movable

Fixed SceneNodes copy constructor not parenting the right object


Former-commit-id: 21a08e3bb0931af426d97399dab86dda9acdf172
This commit is contained in:
Lynix 2015-01-17 00:15:01 +01:00
parent 6d3228477f
commit fdb722ef14
7 changed files with 25 additions and 58 deletions

View File

@ -36,7 +36,6 @@ class NAZARA_API NzModel : public NzSceneNode
public: public:
NzModel(); NzModel();
NzModel(const NzModel& model); NzModel(const NzModel& model);
NzModel(NzModel&& model);
virtual ~NzModel(); virtual ~NzModel();
void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const override; void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const override;
@ -83,7 +82,6 @@ class NAZARA_API NzModel : public NzSceneNode
void SetSkinCount(unsigned int skinCount); void SetSkinCount(unsigned int skinCount);
NzModel& operator=(const NzModel& node); NzModel& operator=(const NzModel& node);
NzModel& operator=(NzModel&& node);
protected: protected:
void InvalidateNode() override; void InvalidateNode() override;

View File

@ -21,6 +21,7 @@ class NAZARA_API NzSceneNode : public NzNode
public: public:
NzSceneNode(); NzSceneNode();
NzSceneNode(const NzSceneNode& sceneNode); NzSceneNode(const NzSceneNode& sceneNode);
NzSceneNode(NzSceneNode& sceneNode) = delete;
virtual ~NzSceneNode(); virtual ~NzSceneNode();
virtual void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const = 0; virtual void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const = 0;
@ -43,7 +44,7 @@ class NAZARA_API NzSceneNode : public NzNode
bool IsVisible() const; bool IsVisible() const;
NzSceneNode& operator=(const NzSceneNode& sceneNode); NzSceneNode& operator=(const NzSceneNode& sceneNode);
NzSceneNode& operator=(NzSceneNode&& sceneNode); NzSceneNode& operator=(NzSceneNode&& sceneNode) = delete;
protected: protected:
virtual bool FrustumCull(const NzFrustumf& frustum) const; virtual bool FrustumCull(const NzFrustumf& frustum) const;

View File

@ -18,8 +18,7 @@ class NAZARA_API NzSprite : public NzSceneNode
NzSprite(); NzSprite();
NzSprite(NzTexture* texture); NzSprite(NzTexture* texture);
NzSprite(const NzSprite& sprite); NzSprite(const NzSprite& sprite);
NzSprite(NzSprite&& sprite); ~NzSprite() = default;
~NzSprite();
void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const override; void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const override;
@ -40,6 +39,8 @@ class NAZARA_API NzSprite : public NzSceneNode
void SetTextureCoords(const NzRectf& coords); void SetTextureCoords(const NzRectf& coords);
void SetTextureRect(const NzRectui& rect); void SetTextureRect(const NzRectui& rect);
NzSprite& operator=(const NzSprite& sprite);
private: private:
void InvalidateNode() override; void InvalidateNode() override;
void Register() override; void Register() override;

View File

@ -41,7 +41,7 @@ m_innerAngle(light.m_innerAngle),
m_outerAngle(light.m_outerAngle), m_outerAngle(light.m_outerAngle),
m_radius(light.m_radius) m_radius(light.m_radius)
{ {
SetParent(light); SetParent(light.GetParent());
} }
void NzLight::AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const void NzLight::AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const

View File

@ -35,20 +35,14 @@ m_skinCount(1)
NzModel::NzModel(const NzModel& model) : NzModel::NzModel(const NzModel& model) :
NzSceneNode(model), NzSceneNode(model),
m_materials(model.m_materials), m_materials(model.m_materials),
m_mesh(model.m_mesh),
m_boundingVolume(model.m_boundingVolume), m_boundingVolume(model.m_boundingVolume),
m_boundingVolumeUpdated(model.m_boundingVolumeUpdated), m_boundingVolumeUpdated(model.m_boundingVolumeUpdated),
m_matCount(model.m_matCount), m_matCount(model.m_matCount),
m_skin(model.m_skin), m_skin(model.m_skin),
m_skinCount(model.m_skinCount) m_skinCount(model.m_skinCount)
{ {
if (model.m_mesh) SetParent(model.GetParent());
{
// Nous n'avons des matériaux que si nous avons un mesh
m_mesh = model.m_mesh;
m_materials = model.m_materials;
}
SetParent(model);
} }
NzModel::~NzModel() NzModel::~NzModel()
@ -420,24 +414,6 @@ NzModel& NzModel::operator=(const NzModel& node)
return *this; return *this;
} }
NzModel& NzModel::operator=(NzModel&& node)
{
NzSceneNode::operator=(node);
// Ressources
m_mesh = std::move(node.m_mesh);
m_materials = std::move(node.m_materials);
// Paramètres
m_boundingVolume = node.m_boundingVolume;
m_boundingVolumeUpdated = node.m_boundingVolumeUpdated;
m_matCount = node.m_matCount;
m_skin = node.m_skin;
m_skinCount = node.m_skinCount;
return *this;
}
void NzModel::InvalidateNode() void NzModel::InvalidateNode()
{ {
NzSceneNode::InvalidateNode(); NzSceneNode::InvalidateNode();

View File

@ -140,17 +140,6 @@ NzSceneNode& NzSceneNode::operator=(const NzSceneNode& sceneNode)
return *this; return *this;
} }
NzSceneNode& NzSceneNode::operator=(NzSceneNode&& sceneNode)
{
NzNode::operator=(sceneNode);
// La scène est affectée via le parenting du node
m_drawingEnabled = sceneNode.m_drawingEnabled;
m_visible = sceneNode.m_visible;
return *this;
}
bool NzSceneNode::FrustumCull(const NzFrustumf& frustum) const bool NzSceneNode::FrustumCull(const NzFrustumf& frustum) const
{ {
return frustum.Contains(GetBoundingVolume()); return frustum.Contains(GetBoundingVolume());

View File

@ -53,23 +53,9 @@ m_vertices(sprite.m_vertices),
m_boundingVolumeUpdated(sprite.m_boundingVolumeUpdated), m_boundingVolumeUpdated(sprite.m_boundingVolumeUpdated),
m_verticesUpdated(sprite.m_verticesUpdated) m_verticesUpdated(sprite.m_verticesUpdated)
{ {
SetParent(sprite); SetParent(sprite.GetParent());
} }
NzSprite::NzSprite(NzSprite&& sprite) :
NzSceneNode(sprite),
m_boundingVolume(sprite.m_boundingVolume),
m_material(std::move(sprite.m_material)),
m_textureCoords(sprite.m_textureCoords),
m_size(sprite.m_size),
m_vertices(sprite.m_vertices),
m_boundingVolumeUpdated(sprite.m_boundingVolumeUpdated),
m_verticesUpdated(sprite.m_verticesUpdated)
{
}
NzSprite::~NzSprite() = default;
void NzSprite::AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const void NzSprite::AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const
{ {
if (!m_verticesUpdated) if (!m_verticesUpdated)
@ -189,6 +175,22 @@ void NzSprite::SetTextureRect(const NzRectui& rect)
SetTextureCoords(NzRectf(invWidth*rect.x, invHeight*rect.y, invWidth*rect.width, invHeight*rect.height)); SetTextureCoords(NzRectf(invWidth*rect.x, invHeight*rect.y, invWidth*rect.width, invHeight*rect.height));
} }
NzSprite& NzSprite::operator=(const NzSprite& sprite)
{
NzSceneNode::operator=(sprite);
m_color = sprite.m_color;
m_material = sprite.m_material;
m_textureCoords = sprite.m_textureCoords;
m_size = sprite.m_size;
// On ne copie pas les sommets finaux car il est très probable que nos paramètres soient modifiés et qu'ils doivent être régénérés de toute façon
m_boundingVolumeUpdated = false;
m_verticesUpdated = false;
return *this;
}
void NzSprite::InvalidateNode() void NzSprite::InvalidateNode()
{ {
NzSceneNode::InvalidateNode(); NzSceneNode::InvalidateNode();