// Copyright (C) 2022 Jérôme "Lynix" Leclercq (lynix680@gmail.com) // 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_GRAPHICS_ELEMENTRENDERERREGISTRY_HPP #define NAZARA_GRAPHICS_ELEMENTRENDERERREGISTRY_HPP #include #include #include #include #include #include #include namespace Nz { class ElementRenderer; class NAZARA_GRAPHICS_API ElementRendererRegistry { public: ElementRendererRegistry(); ElementRendererRegistry(const ElementRendererRegistry&) = delete; ElementRendererRegistry(ElementRendererRegistry&&) = delete; ~ElementRendererRegistry() = default; template RenderElementOwner AllocateElement(Args&&... args); template void ForEachElementRenderer(F&& callback); inline ElementRenderer& GetElementRenderer(std::size_t elementIndex); inline std::size_t GetElementRendererCount() const; template void ProcessRenderQueue(const RenderQueue& renderQueue, F&& callback); template void RegisterElementRenderer(std::unique_ptr renderer); inline void RegisterElementRenderer(std::size_t elementIndex, std::unique_ptr renderer); ElementRendererRegistry& operator=(const ElementRendererRegistry&) = delete; ElementRendererRegistry& operator=(ElementRendererRegistry&&) = delete; private: std::vector> m_elementRenderers; }; } #include #endif // NAZARA_GRAPHICS_ELEMENTRENDERERREGISTRY_HPP