Made scene propagation works with Node class
Former-commit-id: b587ea907f70dc08cd741f64e4e6f3201cd1783e
This commit is contained in:
parent
62afc9d5dc
commit
2fe693f24d
|
|
@ -15,6 +15,7 @@
|
||||||
class NzCamera;
|
class NzCamera;
|
||||||
class NzLight;
|
class NzLight;
|
||||||
class NzModel;
|
class NzModel;
|
||||||
|
class NzNode;
|
||||||
class NzRenderQueue;
|
class NzRenderQueue;
|
||||||
class NzSceneNode;
|
class NzSceneNode;
|
||||||
struct NzSceneImpl;
|
struct NzSceneImpl;
|
||||||
|
|
@ -47,7 +48,7 @@ class NAZARA_API NzScene
|
||||||
operator const NzSceneNode&() const;
|
operator const NzSceneNode&() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void RecursiveFrustumCull(NzRenderQueue& renderQueue, const NzFrustumf& frustum, NzSceneNode* node);
|
void RecursiveFrustumCull(NzRenderQueue& renderQueue, const NzFrustumf& frustum, NzNode* node);
|
||||||
void SetActiveCamera(const NzCamera* camera);
|
void SetActiveCamera(const NzCamera* camera);
|
||||||
|
|
||||||
NzSceneImpl* m_impl;
|
NzSceneImpl* m_impl;
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ class NAZARA_API NzSceneNode : public NzNode
|
||||||
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);
|
||||||
|
void RecursiveSetScene(NzScene* scene, NzNode* node);
|
||||||
virtual void Register();
|
virtual void Register();
|
||||||
void SetScene(NzScene* scene);
|
void SetScene(NzScene* scene);
|
||||||
virtual void Unregister();
|
virtual void Unregister();
|
||||||
|
|
|
||||||
|
|
@ -389,7 +389,7 @@ NzScene::operator const NzSceneNode&() const
|
||||||
return m_impl->root;
|
return m_impl->root;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NzScene::RecursiveFrustumCull(NzRenderQueue& renderQueue, const NzFrustumf& frustum, NzSceneNode* node)
|
void NzScene::RecursiveFrustumCull(NzRenderQueue& renderQueue, const NzFrustumf& frustum, NzNode* node)
|
||||||
{
|
{
|
||||||
for (NzNode* child : node->GetChilds())
|
for (NzNode* child : node->GetChilds())
|
||||||
{
|
{
|
||||||
|
|
@ -400,10 +400,10 @@ void NzScene::RecursiveFrustumCull(NzRenderQueue& renderQueue, const NzFrustumf&
|
||||||
sceneNode->UpdateVisibility(frustum);
|
sceneNode->UpdateVisibility(frustum);
|
||||||
if (sceneNode->IsVisible())
|
if (sceneNode->IsVisible())
|
||||||
sceneNode->AddToRenderQueue(renderQueue);
|
sceneNode->AddToRenderQueue(renderQueue);
|
||||||
|
|
||||||
if (sceneNode->HasChilds())
|
|
||||||
RecursiveFrustumCull(renderQueue, frustum, sceneNode);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (child->HasChilds())
|
||||||
|
RecursiveFrustumCull(renderQueue, frustum, child);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,21 @@ void NzSceneNode::OnVisibilityChange(bool visibility)
|
||||||
///TODO: Envoyer l'évènements aux listeners
|
///TODO: Envoyer l'évènements aux listeners
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NzSceneNode::RecursiveSetScene(NzScene* scene, NzNode* node)
|
||||||
|
{
|
||||||
|
for (NzNode* child : node->GetChilds())
|
||||||
|
{
|
||||||
|
if (child->GetNodeType() == nzNodeType_Scene)
|
||||||
|
{
|
||||||
|
NzSceneNode* sceneNode = static_cast<NzSceneNode*>(child);
|
||||||
|
sceneNode->SetScene(scene);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node->HasChilds())
|
||||||
|
RecursiveSetScene(scene, node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void NzSceneNode::Register()
|
void NzSceneNode::Register()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
@ -69,11 +84,7 @@ void NzSceneNode::SetScene(NzScene* scene)
|
||||||
if (m_scene)
|
if (m_scene)
|
||||||
Register();
|
Register();
|
||||||
|
|
||||||
for (NzNode* child : m_childs)
|
RecursiveSetScene(scene, this);
|
||||||
{
|
|
||||||
if (child->GetNodeType() == nzNodeType_Scene)
|
|
||||||
static_cast<NzSceneNode*>(child)->SetScene(scene);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue