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