// Copyright (C) 2015 Jérôme Leclercq // This file is part of the "Nazara Engine - Graphics module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_RENDERABLE_HPP #define NAZARA_RENDERABLE_HPP #include #include #include #include #include #include #include #include #include class NzAbstractRenderQueue; class NzRenderable; using NzRenderableConstListener = NzObjectListenerWrapper; using NzRenderableConstRef = NzObjectRef; using NzRenderableLibrary = NzObjectLibrary; using NzRenderableListener = NzObjectListenerWrapper; using NzRenderableRef = NzObjectRef; class NAZARA_API NzRenderable : public NzRefCounted { public: NzRenderable() = default; NzRenderable(const NzRenderable& renderable); virtual ~NzRenderable(); void EnsureBoundingVolumeUpdated() const; virtual void AddToRenderQueue(NzAbstractRenderQueue* renderQueue, const NzMatrix4f& transformMatrix) const = 0; virtual void Cull(const NzFrustumf& frustum, const NzBoundingVolumef& volume, const NzMatrix4f& transformMatrix) const = 0; virtual const NzBoundingVolumef& GetBoundingVolume() const; virtual void UpdateBoundingVolume(NzBoundingVolumef* boundingVolume, const NzMatrix4f& transformMatrix) const; NzRenderable& operator=(const NzRenderable& renderable); protected: virtual void MakeBoundingVolume() const = 0; void InvalidateBoundingVolume(); void UpdateBoundingVolume() const; mutable NzBoundingVolumef m_boundingVolume; private: mutable bool m_boundingVolumeUpdated; static NzRenderableLibrary::LibraryMap s_library; }; #include #endif // NAZARA_RENDERABLE_HPP