Program Listing for File pipelinebase.hpp

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

#pragma once
#include <rendering/data/framebuffer.hpp>
#include <rendering/data/buffer.hpp>
#include <rendering/components/camera.hpp>
#include <application/application.hpp>

#include <memory>
#include <any>

namespace legion::rendering
{
    class RenderPipelineBase
    {
        friend class Renderer;
    protected:
        sparse_map<id_type, framebuffer> m_framebuffers;
        sparse_map<id_type, std::any> m_metadata;

        static ecs::EcsRegistry* m_ecs;
        static schd::Scheduler* m_scheduler;
        static events::EventBus* m_eventBus;

        bool m_abort;

        static std::atomic_bool m_exiting;

    public:
        static void exit();

        void abort();

        template<typename T>
        L_NODISCARD bool has_meta(const std::string& name);

        template<typename T, typename... Args>
        T* create_meta(const std::string& name, Args&&... args);

        template<typename T>
        L_NODISCARD T* get_meta(const std::string& name);

        template<typename T>
        L_NODISCARD bool has_meta(id_type nameHash);

        template<typename T, typename... Args>
        T* create_meta(id_type nameHash, Args&&... args);

        template<typename T>
        L_NODISCARD T* get_meta(id_type nameHash);

        framebuffer* addFramebuffer(const std::string& name, GLenum target = GL_FRAMEBUFFER);
        L_NODISCARD bool hasFramebuffer(const std::string& name, GLenum target = GL_FRAMEBUFFER);
        L_NODISCARD framebuffer* getFramebuffer(const std::string& name);
        framebuffer* addFramebuffer(id_type nameHash, GLenum target = GL_FRAMEBUFFER);
        L_NODISCARD bool hasFramebuffer(id_type nameHash, GLenum target = GL_FRAMEBUFFER);
        L_NODISCARD framebuffer* getFramebuffer(id_type nameHash);

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

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

}