Moved Model::EnableDraw to SceneNode::EnableDrawing

Same goes for Model::IsDrawEnabled() => SceneNode::IsDrawingEnabled()
Is Drawable is now a pure virtual method from SceneNode


Former-commit-id: 217c6a21a98206ee0b283aaa216d419696a70faf
This commit is contained in:
Lynix 2013-08-23 13:16:42 +02:00
parent fe6816b089
commit 7fa8f3dafd
10 changed files with 87 additions and 39 deletions

View File

@ -36,6 +36,8 @@ class NAZARA_API NzLight : public NzSceneNode
nzSceneNodeType GetSceneNodeType() const; nzSceneNodeType GetSceneNodeType() const;
NzColor GetSpecularColor() const; NzColor GetSpecularColor() const;
bool IsDrawable() const;
void SetAmbientColor(const NzColor& ambient); void SetAmbientColor(const NzColor& ambient);
void SetAttenuation(float attenuation); void SetAttenuation(float attenuation);
void SetDiffuseColor(const NzColor& diffuse); void SetDiffuseColor(const NzColor& diffuse);

View File

@ -45,7 +45,6 @@ class NAZARA_API NzModel : public NzSceneNode, public NzUpdatable
void AdvanceAnimation(float elapsedTime); void AdvanceAnimation(float elapsedTime);
void EnableAnimation(bool animation); void EnableAnimation(bool animation);
void EnableDraw(bool draw);
NzAnimation* GetAnimation() const; NzAnimation* GetAnimation() const;
const NzBoundingVolumef& GetBoundingVolume() const; const NzBoundingVolumef& GetBoundingVolume() const;
@ -65,7 +64,6 @@ class NAZARA_API NzModel : public NzSceneNode, public NzUpdatable
bool IsAnimationEnabled() const; bool IsAnimationEnabled() const;
bool IsDrawable() const; bool IsDrawable() const;
bool IsDrawEnabled() const;
bool LoadFromFile(const NzString& filePath, const NzModelParameters& params = NzModelParameters()); bool LoadFromFile(const NzString& filePath, const NzModelParameters& params = NzModelParameters());
bool LoadFromMemory(const void* data, std::size_t size, const NzModelParameters& params = NzModelParameters()); bool LoadFromMemory(const void* data, std::size_t size, const NzModelParameters& params = NzModelParameters());
@ -103,7 +101,6 @@ class NAZARA_API NzModel : public NzSceneNode, public NzUpdatable
const NzSequence* m_currentSequence; const NzSequence* m_currentSequence;
bool m_animationEnabled; bool m_animationEnabled;
mutable bool m_boundingVolumeUpdated; mutable bool m_boundingVolumeUpdated;
bool m_drawEnabled;
float m_interpolation; float m_interpolation;
unsigned int m_currentFrame; unsigned int m_currentFrame;
unsigned int m_matCount; unsigned int m_matCount;

View File

@ -20,18 +20,25 @@ class NAZARA_API NzSceneNode : public NzNode
public: public:
NzSceneNode(); NzSceneNode();
NzSceneNode(const NzSceneNode& node); NzSceneNode(const NzSceneNode& sceneNode);
virtual ~NzSceneNode(); virtual ~NzSceneNode();
virtual void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const = 0; virtual void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const = 0;
void EnableDrawing(bool drawingEnabled);
virtual const NzBoundingVolumef& GetBoundingVolume() const = 0; virtual const NzBoundingVolumef& GetBoundingVolume() const = 0;
nzNodeType GetNodeType() const final; nzNodeType GetNodeType() const final;
NzScene* GetScene() const; NzScene* GetScene() const;
virtual nzSceneNodeType GetSceneNodeType() const = 0; virtual nzSceneNodeType GetSceneNodeType() const = 0;
virtual bool IsDrawable() const = 0;
bool IsDrawingEnabled() const;
bool IsVisible() const; bool IsVisible() const;
NzSceneNode& operator=(const NzSceneNode& sceneNode);
NzSceneNode& operator=(NzSceneNode&& sceneNode);
protected: protected:
virtual void OnParenting(const NzNode* parent) override; virtual void OnParenting(const NzNode* parent) override;
virtual void OnVisibilityChange(bool visibility); virtual void OnVisibilityChange(bool visibility);
@ -43,6 +50,7 @@ class NAZARA_API NzSceneNode : public NzNode
virtual void Update(); virtual void Update();
NzScene* m_scene; NzScene* m_scene;
bool m_drawingEnabled;
bool m_visible; bool m_visible;
private: private:

View File

@ -20,6 +20,8 @@ class NAZARA_API NzSceneRoot : public NzSceneNode
const NzBoundingVolumef& GetBoundingVolume() const override; const NzBoundingVolumef& GetBoundingVolume() const override;
nzSceneNodeType GetSceneNodeType() const override; nzSceneNodeType GetSceneNodeType() const override;
bool IsDrawable() const;
private: private:
NzSceneRoot(NzScene* scene); NzSceneRoot(NzScene* scene);
virtual ~NzSceneRoot(); virtual ~NzSceneRoot();

View File

@ -27,6 +27,8 @@ class NAZARA_API NzSprite : public NzSceneNode
const NzVector2f& GetSize() const; const NzVector2f& GetSize() const;
const NzRectf& GetTextureCoords() const; const NzRectf& GetTextureCoords() const;
bool IsDrawable() const;
void SetMaterial(NzMaterial* material); void SetMaterial(NzMaterial* material);
void SetSize(const NzVector2f& size); void SetSize(const NzVector2f& size);
void SetTextureCoords(const NzRectf& coords); void SetTextureCoords(const NzRectf& coords);

View File

@ -171,6 +171,11 @@ NzColor NzLight::GetSpecularColor() const
return m_specularColor; return m_specularColor;
} }
bool NzLight::IsDrawable() const
{
return true;
}
void NzLight::SetAmbientColor(const NzColor& ambient) void NzLight::SetAmbientColor(const NzColor& ambient)
{ {
m_ambientColor = ambient; m_ambientColor = ambient;

View File

@ -26,7 +26,6 @@ NzModel::NzModel() :
m_currentSequence(nullptr), m_currentSequence(nullptr),
m_animationEnabled(true), m_animationEnabled(true),
m_boundingVolumeUpdated(true), m_boundingVolumeUpdated(true),
m_drawEnabled(true),
m_matCount(0), m_matCount(0),
m_skin(0), m_skin(0),
m_skinCount(1) m_skinCount(1)
@ -40,7 +39,6 @@ m_boundingVolume(model.m_boundingVolume),
m_currentSequence(model.m_currentSequence), m_currentSequence(model.m_currentSequence),
m_animationEnabled(model.m_animationEnabled), m_animationEnabled(model.m_animationEnabled),
m_boundingVolumeUpdated(model.m_boundingVolumeUpdated), m_boundingVolumeUpdated(model.m_boundingVolumeUpdated),
m_drawEnabled(model.m_drawEnabled),
m_interpolation(model.m_interpolation), m_interpolation(model.m_interpolation),
m_currentFrame(model.m_currentFrame), m_currentFrame(model.m_currentFrame),
m_matCount(model.m_matCount), m_matCount(model.m_matCount),
@ -116,11 +114,6 @@ void NzModel::EnableAnimation(bool animation)
m_animationEnabled = animation; m_animationEnabled = animation;
} }
void NzModel::EnableDraw(bool draw)
{
m_drawEnabled = draw;
}
NzAnimation* NzModel::GetAnimation() const NzAnimation* NzModel::GetAnimation() const
{ {
return m_animation; return m_animation;
@ -280,11 +273,6 @@ bool NzModel::IsDrawable() const
return m_mesh != nullptr && m_mesh->GetSubMeshCount() >= 1; return m_mesh != nullptr && m_mesh->GetSubMeshCount() >= 1;
} }
bool NzModel::IsDrawEnabled() const
{
return m_drawEnabled;
}
bool NzModel::LoadFromFile(const NzString& filePath, const NzModelParameters& params) bool NzModel::LoadFromFile(const NzString& filePath, const NzModelParameters& params)
{ {
return NzModelLoader::LoadFromFile(this, filePath, params); return NzModelLoader::LoadFromFile(this, filePath, params);
@ -590,7 +578,6 @@ NzModel& NzModel::operator=(const NzModel& node)
m_boundingVolumeUpdated = node.m_boundingVolumeUpdated; m_boundingVolumeUpdated = node.m_boundingVolumeUpdated;
m_currentFrame = node.m_currentFrame; m_currentFrame = node.m_currentFrame;
m_currentSequence = node.m_currentSequence; m_currentSequence = node.m_currentSequence;
m_drawEnabled = node.m_drawEnabled;
m_interpolation = node.m_interpolation; m_interpolation = node.m_interpolation;
m_matCount = node.m_matCount; m_matCount = node.m_matCount;
m_materials = node.m_materials; m_materials = node.m_materials;
@ -609,40 +596,31 @@ NzModel& NzModel::operator=(NzModel&& node)
{ {
NzSceneNode::operator=(node); NzSceneNode::operator=(node);
// Ressources
m_animation = std::move(node.m_animation); m_animation = std::move(node.m_animation);
m_mesh = std::move(node.m_mesh);
m_materials = std::move(node.m_materials);
if (m_mesh->GetAnimationType() == nzAnimationType_Skeletal)
m_skeleton = std::move(node.m_skeleton);
// Paramètres
m_animationEnabled = node.m_animationEnabled; m_animationEnabled = node.m_animationEnabled;
m_boundingVolume = node.m_boundingVolume; m_boundingVolume = node.m_boundingVolume;
m_boundingVolumeUpdated = node.m_boundingVolumeUpdated; m_boundingVolumeUpdated = node.m_boundingVolumeUpdated;
m_currentFrame = node.m_currentFrame; m_currentFrame = node.m_currentFrame;
m_currentSequence = node.m_currentSequence; m_currentSequence = node.m_currentSequence;
m_drawEnabled = node.m_drawEnabled;
m_interpolation = node.m_interpolation; m_interpolation = node.m_interpolation;
m_matCount = node.m_matCount; m_matCount = node.m_matCount;
m_materials = std::move(node.m_materials);
m_mesh = std::move(node.m_mesh);
m_nextFrame = node.m_nextFrame; m_nextFrame = node.m_nextFrame;
m_skin = node.m_skin; m_skin = node.m_skin;
m_skinCount = node.m_skinCount; m_skinCount = node.m_skinCount;
if (m_mesh->GetAnimationType() == nzAnimationType_Skeletal)
m_skeleton = std::move(node.m_skeleton);
return *this; return *this;
} }
bool NzModel::FrustumCull(const NzFrustumf& frustum) bool NzModel::FrustumCull(const NzFrustumf& frustum)
{ {
#if NAZARA_GRAPHICS_SAFE
if (!IsDrawable())
{
NazaraError("Model is not drawable");
return false;
}
#endif
if (!m_drawEnabled)
return false;
if (!m_boundingVolumeUpdated) if (!m_boundingVolumeUpdated)
UpdateBoundingVolume(); UpdateBoundingVolume();

View File

@ -3,24 +3,32 @@
// For conditions of distribution and use, see copyright notice in Config.hpp // For conditions of distribution and use, see copyright notice in Config.hpp
#include <Nazara/Graphics/SceneNode.hpp> #include <Nazara/Graphics/SceneNode.hpp>
#include <Nazara/Graphics/Config.hpp>
#include <Nazara/Graphics/Scene.hpp> #include <Nazara/Graphics/Scene.hpp>
#include <Nazara/Graphics/Debug.hpp> #include <Nazara/Graphics/Debug.hpp>
NzSceneNode::NzSceneNode() : NzSceneNode::NzSceneNode() :
m_scene(nullptr), m_scene(nullptr),
m_drawingEnabled(true),
m_visible(false) m_visible(false)
{ {
} }
NzSceneNode::NzSceneNode(const NzSceneNode& node) : NzSceneNode::NzSceneNode(const NzSceneNode& sceneNode) :
NzNode(node), NzNode(sceneNode),
m_scene(node.m_scene), m_scene(sceneNode.m_scene),
m_drawingEnabled(sceneNode.m_drawingEnabled),
m_visible(false) m_visible(false)
{ {
} }
NzSceneNode::~NzSceneNode() = default; NzSceneNode::~NzSceneNode() = default;
void NzSceneNode::EnableDrawing(bool drawingEnabled)
{
m_drawingEnabled = drawingEnabled;
}
nzNodeType NzSceneNode::GetNodeType() const nzNodeType NzSceneNode::GetNodeType() const
{ {
return nzNodeType_Scene; return nzNodeType_Scene;
@ -31,11 +39,34 @@ NzScene* NzSceneNode::GetScene() const
return m_scene; return m_scene;
} }
bool NzSceneNode::IsDrawingEnabled() const
{
return m_drawingEnabled;
}
bool NzSceneNode::IsVisible() const bool NzSceneNode::IsVisible() const
{ {
return m_visible; return m_visible;
} }
NzSceneNode& NzSceneNode::operator=(const NzSceneNode& sceneNode)
{
m_drawingEnabled = sceneNode.m_drawingEnabled;
m_scene = sceneNode.m_scene;
m_visible = false;
return *this;
}
NzSceneNode& NzSceneNode::operator=(NzSceneNode&& sceneNode)
{
m_drawingEnabled = sceneNode.m_drawingEnabled;
m_scene = sceneNode.m_scene;
m_visible = sceneNode.m_visible;
return *this;
}
void NzSceneNode::OnParenting(const NzNode* parent) void NzSceneNode::OnParenting(const NzNode* parent)
{ {
if (parent) if (parent)
@ -101,7 +132,20 @@ void NzSceneNode::UpdateVisibility(const NzFrustumf& frustum)
{ {
bool wasVisible = m_visible; bool wasVisible = m_visible;
if (m_drawingEnabled)
{
#if NAZARA_GRAPHICS_SAFE
if (!IsDrawable())
{
NazaraError("SceneNode is not drawable");
return;
}
#endif
m_visible = FrustumCull(frustum); m_visible = FrustumCull(frustum);
}
else
m_visible = false;
if (m_visible != wasVisible) if (m_visible != wasVisible)
OnVisibilityChange(m_visible); OnVisibilityChange(m_visible);

View File

@ -31,6 +31,11 @@ nzSceneNodeType NzSceneRoot::GetSceneNodeType() const
return nzSceneNodeType_Root; return nzSceneNodeType_Root;
} }
bool NzSceneRoot::IsDrawable() const
{
return true;
}
bool NzSceneRoot::FrustumCull(const NzFrustumf& frustum) bool NzSceneRoot::FrustumCull(const NzFrustumf& frustum)
{ {
NazaraUnused(frustum); NazaraUnused(frustum);

View File

@ -66,6 +66,11 @@ const NzRectf& NzSprite::GetTextureCoords() const
return m_textureCoords; return m_textureCoords;
} }
bool NzSprite::IsDrawable() const
{
return m_material != nullptr;
}
void NzSprite::SetMaterial(NzMaterial* material) void NzSprite::SetMaterial(NzMaterial* material)
{ {
m_material = material; m_material = material;
@ -132,7 +137,7 @@ void NzSprite::Unregister()
void NzSprite::UpdateBoundingVolume() const void NzSprite::UpdateBoundingVolume() const
{ {
if (m_boundingVolume.IsNull()) if (m_boundingVolume.IsNull())
m_boundingVolume.Set(-m_size.x*0.5f, -m_size.y*0.5f, 0, m_size.x, m_size.y, 1.f); m_boundingVolume.Set(-m_size.x*0.5f, -m_size.y*0.5f, 0, m_size.x, m_size.y, 0.f);
if (!m_transformMatrixUpdated) if (!m_transformMatrixUpdated)
UpdateTransformMatrix(); UpdateTransformMatrix();