#pragma once #include #include #include #include namespace td { namespace render { class BasicRenderer { public: virtual void Render() = 0; void Render(const GL::VertexArray& a_Vao); }; class Renderer : public BasicRenderer { protected: std::unique_ptr m_Shader; Camera& m_Camera; public: Renderer(std::unique_ptr&& a_Shader, Camera& a_Camera); virtual ~Renderer() {} }; class RenderPipeline { private: std::vector> m_Renderers; public: RenderPipeline(); ~RenderPipeline() = default; template void AddRenderer(Args&&... args) { m_Renderers.push_back(std::make_unique(args ...)); } void Clear() { m_Renderers.clear(); } void Render() { for (auto& renderer : m_Renderers) { renderer->Render(); } } }; } // namespace render } // namespace td