Program Listing for File renderer.inl

Return to documentation for file (/home/runner/work/Legion-Engine/Legion-Engine/legion/engine/rendering/systems/renderer.inl)

#pragma once

namespace legion::rendering
{
    template<typename Pipeline, typename ...Args CNDOXY(inherits_from<Pipeline, RenderPipeline<Pipeline>>)>
    inline void Renderer::setPipeline(Args&&... args)
    {
        OPTICK_EVENT();
        m_pipelineProvider = delegate<RenderPipelineBase* (app::window&)>::create([&](app::window& context)
        {
            static std::unordered_map<app::window, std::unique_ptr<Pipeline>> m_pipelines;

            if (!m_pipelines.count(context))
            {
                m_pipelines.emplace(context, std::unique_ptr<Pipeline>(new Pipeline(std::forward(args)...)));
                RenderStageBase::m_pipeline = m_pipelines[context].get();
                m_pipelines[context]->init(context);
            }
            else
                RenderStageBase::m_pipeline = m_pipelines[context].get();

            return RenderStageBase::m_pipeline;
        });
    }
}