From 3195a50114a4bb1d8dc57503368074c042bcb337 Mon Sep 17 00:00:00 2001 From: Lynix Date: Wed, 6 May 2015 13:50:04 +0200 Subject: [PATCH] Ndk/Camera: Invalidate when node invalidate Former-commit-id: bda6e1f8a5b64f593c9f4ef95a99f1b0198790e7 --- .../NDK/Components/CameraComponent.hpp | 4 ++- SDK/src/NDK/Components/CameraComponent.cpp | 29 +++++++++++++------ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/SDK/include/NDK/Components/CameraComponent.hpp b/SDK/include/NDK/Components/CameraComponent.hpp index 36610587e..587c869ac 100644 --- a/SDK/include/NDK/Components/CameraComponent.hpp +++ b/SDK/include/NDK/Components/CameraComponent.hpp @@ -11,13 +11,14 @@ #include #include #include +#include #include namespace Ndk { class Entity; - class NDK_API CameraComponent : public Component, NzRenderTarget::Listener + class NDK_API CameraComponent : public Component, NzNode::Listener, NzRenderTarget::Listener { public: CameraComponent(); @@ -62,6 +63,7 @@ namespace Ndk void OnComponentAttached(BaseComponent& component) override; void OnComponentDetached(BaseComponent& component) override; void OnDetached() override; + bool OnNodeInvalidated(const NzNode* node, void* userdata) override; void OnRenderTargetReleased(const NzRenderTarget* renderTarget, void* userdata) override; bool OnRenderTargetSizeChange(const NzRenderTarget* renderTarget, void* userdata) override; diff --git a/SDK/src/NDK/Components/CameraComponent.cpp b/SDK/src/NDK/Components/CameraComponent.cpp index 23053b217..457acbbbd 100644 --- a/SDK/src/NDK/Components/CameraComponent.cpp +++ b/SDK/src/NDK/Components/CameraComponent.cpp @@ -8,15 +8,6 @@ namespace Ndk { - /*void CameraComponent::InvalidateNode() - { - NzNode::InvalidateNode(); - - // Le frustum et la view matrix dépendent des paramètres du node, invalidons-les - m_frustumUpdated = false; - m_viewMatrixUpdated = false; - }*/ - void CameraComponent::OnAttached() { InvalidateViewMatrix(); @@ -25,13 +16,23 @@ namespace Ndk void CameraComponent::OnComponentAttached(BaseComponent& component) { if (IsComponent(component)) + { + NodeComponent& nodeComponent = static_cast(component); + nodeComponent.AddListener(this); + InvalidateViewMatrix(); + } } void CameraComponent::OnComponentDetached(BaseComponent& component) { if (IsComponent(component)) + { + NodeComponent& nodeComponent = static_cast(component); + nodeComponent.RemoveListener(this); + InvalidateViewMatrix(); + } } void CameraComponent::OnDetached() @@ -39,6 +40,16 @@ namespace Ndk InvalidateViewMatrix(); } + bool CameraComponent::OnNodeInvalidated(const NzNode* node, void* userdata) + { + NazaraUnused(node); + NazaraUnused(userdata); + + // La matrice de vue dépend directement des données du node, invalidons-là + InvalidateViewMatrix(); + return true; + } + void CameraComponent::OnRenderTargetReleased(const NzRenderTarget* renderTarget, void* userdata) { NazaraUnused(userdata);