Program Listing for File pipeline.hpp

Return to documentation for file (/home/runner/work/Legion-Engine/Legion-Engine/legion/engine/rendering/pipeline/base/pipeline.hpp)

#pragma once
#include <rendering/data/framebuffer.hpp>
#include <rendering/components/camera.hpp>
#include <rendering/pipeline/base/pipelinebase.hpp>
#include <rendering/pipeline/base/renderstage.hpp>
#include <application/application.hpp>

#include <memory>
#include <any>

namespace legion::rendering
{
    template<typename Self>
    class RenderPipeline : public RenderPipelineBase
    {
        friend class Renderer;
    protected:
        static std::multimap<priority_type, std::unique_ptr<RenderStageBase>, std::greater<>> m_stages;

    public:

        template<typename StageType CNDOXY(inherits_from<StageType, RenderStage<StageType>> = 0)>
        static void attachStage();

        static void attachStage(std::unique_ptr<RenderStageBase>&& stage);

        virtual void setup(app::window& context) LEGION_PURE;

        void init(app::window& context) override;
        void render(app::window& context, camera& cam, const camera::camera_input& camInput, time::span deltaTime) override;
    };
}

#include <rendering/pipeline/base/pipeline.inl>