// Copyright (C) 2017 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_INSTANCEDRENDERABLE_HPP #define NAZARA_INSTANCEDRENDERABLE_HPP #include #include #include #include #include namespace Nz { class CommandBufferBuilder; class Material; class RenderElement; class WorldInstance; class NAZARA_GRAPHICS_API InstancedRenderable { public: inline InstancedRenderable(const Boxf& aabb); InstancedRenderable(const InstancedRenderable&) = delete; InstancedRenderable(InstancedRenderable&&) noexcept = default; ~InstancedRenderable(); virtual void BuildElement(std::size_t passIndex, const WorldInstance& worldInstance, std::vector>& elements) const = 0; inline const Boxf& GetAABB() const; virtual const std::shared_ptr& GetMaterial(std::size_t i) const = 0; virtual std::size_t GetMaterialCount() const = 0; InstancedRenderable& operator=(const InstancedRenderable&) = delete; InstancedRenderable& operator=(InstancedRenderable&&) noexcept = default; NazaraSignal(OnMaterialInvalidated, InstancedRenderable* /*instancedRenderable*/, std::size_t /*materialIndex*/, const std::shared_ptr& /*newMaterial*/); private: Boxf m_aabb; }; } #include #endif