Ndk/Camera: Invalidate when node invalidate

Former-commit-id: bda6e1f8a5b64f593c9f4ef95a99f1b0198790e7
This commit is contained in:
Lynix 2015-05-06 13:50:04 +02:00
parent fa2a269e5a
commit 3195a50114
2 changed files with 23 additions and 10 deletions

View File

@ -11,13 +11,14 @@
#include <Nazara/Math/Matrix4.hpp> #include <Nazara/Math/Matrix4.hpp>
#include <Nazara/Math/Vector3.hpp> #include <Nazara/Math/Vector3.hpp>
#include <Nazara/Renderer/RenderTarget.hpp> #include <Nazara/Renderer/RenderTarget.hpp>
#include <Nazara/Utility/Node.hpp>
#include <NDK/Component.hpp> #include <NDK/Component.hpp>
namespace Ndk namespace Ndk
{ {
class Entity; class Entity;
class NDK_API CameraComponent : public Component<CameraComponent>, NzRenderTarget::Listener class NDK_API CameraComponent : public Component<CameraComponent>, NzNode::Listener, NzRenderTarget::Listener
{ {
public: public:
CameraComponent(); CameraComponent();
@ -62,6 +63,7 @@ namespace Ndk
void OnComponentAttached(BaseComponent& component) override; void OnComponentAttached(BaseComponent& component) override;
void OnComponentDetached(BaseComponent& component) override; void OnComponentDetached(BaseComponent& component) override;
void OnDetached() override; void OnDetached() override;
bool OnNodeInvalidated(const NzNode* node, void* userdata) override;
void OnRenderTargetReleased(const NzRenderTarget* renderTarget, void* userdata) override; void OnRenderTargetReleased(const NzRenderTarget* renderTarget, void* userdata) override;
bool OnRenderTargetSizeChange(const NzRenderTarget* renderTarget, void* userdata) override; bool OnRenderTargetSizeChange(const NzRenderTarget* renderTarget, void* userdata) override;

View File

@ -8,15 +8,6 @@
namespace Ndk 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() void CameraComponent::OnAttached()
{ {
InvalidateViewMatrix(); InvalidateViewMatrix();
@ -25,20 +16,40 @@ namespace Ndk
void CameraComponent::OnComponentAttached(BaseComponent& component) void CameraComponent::OnComponentAttached(BaseComponent& component)
{ {
if (IsComponent<NodeComponent>(component)) if (IsComponent<NodeComponent>(component))
{
NodeComponent& nodeComponent = static_cast<NodeComponent&>(component);
nodeComponent.AddListener(this);
InvalidateViewMatrix(); InvalidateViewMatrix();
} }
}
void CameraComponent::OnComponentDetached(BaseComponent& component) void CameraComponent::OnComponentDetached(BaseComponent& component)
{ {
if (IsComponent<NodeComponent>(component)) if (IsComponent<NodeComponent>(component))
{
NodeComponent& nodeComponent = static_cast<NodeComponent&>(component);
nodeComponent.RemoveListener(this);
InvalidateViewMatrix(); InvalidateViewMatrix();
} }
}
void CameraComponent::OnDetached() void CameraComponent::OnDetached()
{ {
InvalidateViewMatrix(); 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) void CameraComponent::OnRenderTargetReleased(const NzRenderTarget* renderTarget, void* userdata)
{ {
NazaraUnused(userdata); NazaraUnused(userdata);